将 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 请求。
这个问题一直困扰着我。尽管 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 请求。