将 graphQL 与 API 网关 (apollo-server-lambda) 与 AppSync 结合使用

Use graphQL with API Gateway (apollo-server-lambda) vs. AppSync

这个问题一直困扰着我。尽管 AppSync 是作为 GraphQL 销售的,而 API Gateway 是针对 REST 的。但是 API Gateway 也可以通过 lambda 中的 apollo 服务器与 GraphQL 一起工作。

那么究竟是什么让一个比另一个更好呢?

这取决于您对后端服务执行的控制程度,您喜欢编写多少代码,当然还有您愿意支付的费用。

使用 API 网关和 Lambda,您正在编写一个处理程序函数,该函数针对您使用 Lambda 运行时设置的任何语言编写的解析器定义执行完整的 graphql 请求。您必须考虑您的应用程序需要多少内存,以及您希望支持什么样的功能。您还需要做一些跑腿工作来获得使用 websockets 的订阅。

AWS AppSync 更像是一种托管服务,您可以在其中向 AppSync 注册您的 GraphQL 模式,该服务负责查询验证、批处理调用,当然还有开箱即用的订阅。在其中,您只需要定义如何使用 VTL(速度模板语言)“映射”GraphQL 请求,以定义对下游数据源的调用,即。特别是 DynamoDB、ElasicSearch、HTTP、Aurora Serverless RDS 或 Lambda。请记住,您为 AppSync 编写的 Lambda 函数只需处理单个解析器,而使用 Apollo Server,您将在代码中编写所有解析器逻辑。

最终,无论您选择哪种方式,都有利有弊。使用 Lambda 上的 Apollo Server,您可以控制整个 HTTP GraphQL 请求周期,但代价是增加了复杂性。借助 AppSync,您拥有一个更“托管”的服务,您只需定义解析器来与您的数据源对话(在许多情况下,这些可以使用 Amplify CLI 自动为您生成),但代价是更好地控制整个 GraphQL 请求。