无服务器计算与GraphQL:现代应用开发

在这篇文章中,我将引导您使用TypeScript、AWS Lambda和Apollo Server创建一个无服务器的GraphQL API。

无服务器计算

无服务器计算是一种云计算执行模型,在这种模型中,云提供商自动管理运行应用程序的基础设施。在这种模式下,开发者编写代码,云提供商负责运行、扩展和维护服务器,这意味着开发者不需要担心服务器管理、基础设施配置或扩展。术语“无服务器”并不意味着没有服务器参与,而是说服务器管理任务从开发者那里抽象出来。AWS Lambda 是亚马逊网络服务(AWS)提供的无服务器计算服务,它允许您在不配置或管理服务器的情况下运行代码

GraphQL

GraphQL是一种用于API的查询语言和执行这些查询的运行时。它允许客户端请求确切所需的数据,与可能过度获取或获取不足数据的REST相比,效率更高。使用GraphQL,客户端指定响应的形状和结构,在一次请求中检索多个资源。这种灵活性提高了性能并减少了网络开销。GraphQL是强类型的,有一个定义可用类型和操作的架构。它在现代应用程序中广泛使用,以优化前端和后端之间的通信,实现更响应和高效的数据管理。

Apollo Server

Apollo Server是一个流行的、开源的GraphQL服务器,它可以帮助开发者轻松地创建GraphQL API。它通过处理模式定义、查询执行和响应格式化,简化了构建健壮和可扩展GraphQL API的过程。Apollo Server支持数据获取、缓存和身份验证等功能,使其非常适合现代应用程序。它与各种数据源无缝协作,包括REST API、数据库和微服务。配备了用于性能监控和错误处理的内置工具,Apollo Server通常用于简化后端开发,为GraphQL环境中的客户端和服务器之间的通信提供高效和灵活的机制。

为什么使用TypeScript?

它是JavaScript的一个超集,为语言添加了静态类型。它帮助在开发过程中捕捉错误,提高代码的可读性,增强重构。通过提供类型安全和工具支持,TypeScript使得应用程序更加可维护和可扩展,使其成为大型项目或团队的理想选择。

为什么我觉得无服务器和GraphQL非常配套(或者说“代码中的爱情故事”)

  1. 优化资源使用:GraphQL精确的数据获取与无服务器按使用付费模型完美对齐,确保高效资源利用。
  2. 简化后端:无服务器函数可以高效处理GraphQL解析器,简化后端架构。
  3. 提高性能:GraphQL减少数据开销的能力使得应用程序运行更快,尤其是与无服务器架构结合使用时。
  4. 可扩展性:这两种技术都擅长处理变化的负载,使得它们的组合具有很高的可扩展性。
  5. 成本效益:无服务器计算的按需付费模型,结合GraphQL高效的数据传输,可以带来显著的成本节省。

“无服务器和GraphQL的结合使得可以快速开发可扩展且高效的API。这是一个强大的组合,可以显著减少开发时间和运营成本。” – Nader Dabit, “全栈无服务器

以下是使用AWS Lambda中的GraphQL部署服务的逐步指南。

  • 第一步:初始化一个新的TypeScript项目并安装依赖。
Shell

 

  • 第二步:定义包含所需元素的GraphQL架构。
TypeScript

 

  • 第三步: 实现解析器:
TypeScript

 

  • 第四步:创建Lambda处理器:
TypeScript

 

  • 第五步:配置无服务器部署。创建一个serverless.yml文件:
service: serverless-graphql-api

provider:
  name: aws
  runtime: nodejs16.x
  stage: dev
  region: us-east-1

functions:
  graphql:
    handler: handler.graphqlHandler
    events:
      - http:
          path: graphql
          method: post
      - http:
          path: graphql
          method: get

plugins:
  - serverless-offline

您可以直接在AWS中使用Lambda编写代码(快速入门Hello World),并使用适当的部署选项,如CDKTerraform。随着无服务器计算和GraphQL的不断发展,我们可以期待出现更多强大工具和实践。

结论

通过采用无服务器GraphQL,开发者可以创建易于扩展并精确满足客户端需求的API。这就像拥有一个水晶球,它总是知道精确获取和扩展哪些数据。

Source:
https://dzone.com/articles/serverless-computing-and-graphql