GraphQL 服务器方案介绍

May 03, 2018 graphql https://git.io/vpgpF

apollo-server
开源的 node.js GraphQL 服务器,提供了多种封装方案,可以很方便的基于 express、koa、AWS Lambda、Azure functions 等 Web 服务器和云环境中运行 GraphQL 服务。

apollo-engine
SaaS 平台,可以与 apollo-server 集成,也可以集成到现有的其他语言的 GraphQL Server。提供缓存、错误追踪、性能追踪等服务,有免费和付费的方案。

graphql-yoga
对 apollo-server 和相关的封装,类似于 create-react-app 的这种脚手架,可以快速方便的搭建 GraphQL 服务器,同时还默认集成了 graphql-playground 这个交互式的工具,比 GraphiQL 功能更完善。但是 graphql-yoga 和 apollo-server 并无本质区别,只提供对外的 GraphQL 接口,不关心底层数据的来源。

prisma
Prisma 的核心功能是直接管理 GraphQL 的类型结构与数据库表和字段直接的映射,同时提供对外的 GraphQL 接口。此外还提供速率限制、访问认证、日志等其他功能。与数据库的连接有两种模式:主动模式是完全管理数据库的 Schema 和数据结构迁移;被动模式是不管理数据库,仅对数据库做读写操作。Prisma 目前只有 MySQL 的主动模式,已经把自身和数据库用 docker 封装,可以很方便的部署。目前的问题就是只支持 docker 化的 MySQL 数据库的主动模式,所以只适合搭建全新的系统。不支持其他数据库以及云数据库(还在开发中

Prisma Cloud
提供 Prisma 的托管服务,有免费和付费方案,除了把上面提到的 prisma 快捷部署到云服务器之外,还提供了 Web 控制面板,提供查看数据等功能。

graphcool-framework
比 Prisma 更进一步,不仅仅管理数据库,还管理事件、云函数,以及外部 API,而且所有这些都用 docker 做了封装,可以很方便的做集群部署。除了数据库和云函数,还可以非常方便的集成 Auth0 和 Algolia 等第三方服务。

graph.cool
定位是 Backend as a Service,类似于 Firebase 和 Parse,提供托管的 graphcool 服务,有免费和付费方案。此外还提供了对 Schema、数据、Function 等可视化编辑的 Web 控制面板。

AppSync
AWS 提供的 GraphQL 托管服务。apollo-server + AWS Lambda 虽然也能实现托管的 GraphQL 服务器,但是有两个问题:一是 Lambda 不支持 WebSocket,实现 subscription 需要使用额外的服务;二是 Lambda 有个冷启动的延迟问题。AppSync 默认提供了实时同步的功能,数据库默认使用 DynamoDB,可以触发 Lambda 函数、使用 Cognito 做用户认证、调用 Elasticsearch 搜索等,此外还提供离线数据支持以及冲突处理。

参考:
https://dev-blog.apollodata.com/tutorial-building-a-graphql-server-cddaa023c035
https://blog.graph.cool/tutorial-how-to-build-a-graphql-server-with-graphql-yoga-6da86f346e68
https://www.graph.cool/forum/t/graphcool-framework-and-prisma/2237
https://github.com/graphcool/prisma/issues/1749