如何在 Serverless 中使用 GraphQL API

阅读时长 4 分钟读完

在近年来,Serverless 架构逐渐流行起来。相对于传统的基于虚拟机或物理服务器的 Web 应用,Serverless 应用具有更高效的资源利用、更低的成本以及更快的开发和部署速度。在 Serverless 中,我们可以使用各种服务来构建我们的应用,如 AWS Lambda、Azure Functions、Google Cloud Functions等等。而 GraphQL 是一种强大的 API 查询语言,被广泛用于前端应用的数据查询,如何在 Serverless 中使用 GraphQL API 是一个非常值得深入探讨的话题。

Serverless + GraphQL 架构

在 Serverless 中,常常使用 AWS Lambda 函数来处理请求,而 Lambda 函数可以使用各种语言编写,如 Node.js、Python、Java等。我们可以使用 GraphQL 相关的库来快速构建 Serverless + GraphQL 的应用。以下是一些常用的库:

  • graphql-yoga: 一个基于 Express.js 的 GraphQL 服务器库,可轻松创建和运行 GraphQL API
  • apollo-server-lambda: 使用 Apollo Server 可以快速构建 Serverless + GraphQL 应用,lambda 部署在 AWS Lambda 上
  • aws-serverless-express: 将 Express 应用转换成基于 API Gateway 和 Lambda 的快速响应服务器,简化了在 AWS Lambda 上运行 Express 应用程序的流程

在这里,我们将以 graphql-yoga 为例,介绍如何在 Serverless 中使用 GraphQL API。

创建 Serverless GraphQL API

下面我们将逐步介绍创建 Serverless GraphQL API 的过程。

安装依赖

首先,安装 graphql-yoga 和 serverless 库。

创建 Lambda 函数

我们需要使用 serverless 命令行工具来创建 Lambda 函数。在命令行键入以下命令来创建一个名为 graphql-api-lambda 的 Lambda 函数:

创建 Serverless Function 端点

按照 传统使用 Express.js 的方式我们可以方便创建 serverless function,新建一个名为 server.js 的文件:

-- -------------------- ---- -------
----- - ------------- - - -----------------------

----- -------- - -
  ---- ----- -
    ----------- -------- -------
  -
-

----- --------- - -
  ------ -
    ------ --- - ---- -- -- ------ ------ -- ----------
  --
-

----- ------ - --- --------------- --------- --------- --
--------------- - ----------------------

运行以下命令将 GraphQL API 部署成无服务器函数:

这将在 AWS Lambda 上创建一个名为 graphql-api-lambda 的函数。

测试 GraphQL API

将 Lambda 函数部署到了云端后,可以使用 Postman 或者 curl 发送查询请求。在命令行里键入以下命令来发送查询请求:

这应该会返回以下 JSON 响应:

至此,我们已经成功的创建了一个 Serverless GraphQL API。

总结

在本文中,我们介绍了如何在 Serverless 中使用 GraphQL API。我们使用 graphql-yoga 来创建 GraphQL API,并使用 serverless 命令行工具将 Lambda 函数部署到 AWS Lambda 上。GraphQL API 可以帮助您从前端应用程序中查询数据,同时在 Serverless 架构中使用 GraphQL API 可以提高效率,减少成本。至此,您已经可以开始为 Serverless Web 应用程序构建 GraphQL API 了,希望本文对您有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648b0ef048841e989496fc4b

纠错
反馈