GraphQL 是一种基于 RESTful API 的替代方案,它可以让开发者更容易地在客户端和服务器之间进行数据交互。在前端开发中,常常需要通过 GraphQL 与后端服务器进行数据通信,而在传统的服务器架构中,搭建 GraphQL 服务需要考虑诸多技术细节和架构设计,这对于新手来说可能会是一个难以跨越的门槛。但是,借助 Serverless 架构,我们可以快速轻松地搭建一套高效的 GraphQL 服务。
什么是 Serverless 架构
Serverless 架构是一种无服务化的计算模式,与传统的服务器模式相比,最大的不同在于 Serverless 架构并不需要用户自己搭建、维护服务器硬件和软件环境。相反,Serverless 架构是一种按使用资源付费的模式,即只有在需要使用计算资源的时候才会被分配计算资源,这样能够大大降低开发和运维的成本,提高系统的可用性和灵活性。
常见的 Serverless 服务提供商有 AWS Lambda、Azure Functions、Google Cloud Functions 等。
使用 Serverless 架构搭建 GraphQL 服务
在本教程中,我们将使用 AWS Lambda 和 AWS API Gateway 实现一个简单的 GraphQL 服务。
第一步:创建 Serverless 项目
首先,在 AWS 控制台中创建 Lambda 函数,选择您喜欢的语言,本教程中我们将选择 Node.js。
其次,在 AWS 控制台中创建 AWS API Gateway,选择 Lambda Proxy 集成,将 API Gateway 与 Lambda 函数关联起来。
当您完成此步骤后,您将得到一个 API Gateway 的 URL,我们将在下一步中使用它。
第二步:安装依赖包和配置 GraphQL
接下来,我们需要安装 npm
包,并探究使用 Amazon API Gateway 和 AWS Lambda 的 GraphQL 架构的好处体验。所以,我们需要建立一个带有以下依赖关系的 package.json
文件:
-- -------------------- ---- ------- - ------- ------------------------- ---------- -------- -------------- -- ------ ------- --- ------- ----- --- ------ --- ------ --- --------- ---------- - --------- ---- -------------- ------- --------------- --------------- ----------- ------------------ ---------------------- ------------- -- --- -------------- ------ --------------- -------------------- ------------ ---------------------- -------------- --------------- -- --------------- - ---------- ----------- ---------- ---------- ------------------ --------- ---------------- -------- -- ------------------ - ------------- ---------- -------------------------------------- --------- ------------------------------- --------- --------------------- --------- ------------------------------- --------- ------------------------------- --------- ------------- -------- - -展开代码
然后,我们需要创建一个 serverless.yaml
文件,用于配置 AWS Lambda
函数和 API Gateway
:
-- -------------------- ---- ------- -------- ---------------------- ----------------- --- --------- ----- --- -------- ---------- ------ --- ------- --------- ------------------ - ------- ----- ------- - ---- --------- --- ---------- ---- -------- ------------------ ------- - ----- ------- ---- ----- - ------------ ------------ ----- ---- -------------- -------- ------- - ------- ----- ------------ ------- - ------- ----- -- ---- -------- -------------- ------------------- ----------------------- -------- - ---------------------------- - ----------------------------------- - ----------------------------展开代码
注意,这个配置中:
runtime
指定了使用的nodejs12.x
运行时版本;handler
指定了入口文件为src/lambda.handler
;events
配置了访问 API 的方式和路径,所有发起的POST
请求都将被路由到src/lambda.handler
文件中;plugins
中配置了使用了一些基础插件,比如支持TypeScript
、API Gateway
代理和报警等。
接下来,让我们来配置 GraphQL
引擎。
在项目目录下创建一个名为 src
的文件夹,该文件夹包含我们 Lambda 函数的代码。
lambda 函数有固定格式的输入和输出,输入是 event
和 context
,输出是 callback(error, result)
,本教程中,我们要使用 apollo-server-lambda
来编写 handler
函数,该函数将预处理 GraphQL
查询和响应结果:
-- -------------------- ---- ------- ------ - ------------ - ---- ----------------------- ------ - -------------------- - ---- ---------------- ----- ------ - - ---- ----- - ----------- -------- ------ - -- ----- --------- - - ------ - ------ ----- --- ---- - ---- -- - ----- ------ -- -- - ------ ------ ---- ----------- ------ -- -------------- -- -- -- ----- -------------- - --- -------------- ------- ---------------------- --------- ------- --------- --- -------------- ----- ----------- ----- ------------------- ------ ----- ------- - ------- ---- -------- ---- --------- ---- -- - -------------------------------------- - ------ ----- -------------- - ------- ---- ------- ---- -- - ----- ------- - - --------------- ------------------ -- --------------- - ---------- ------- --- -- --------------------- -------- ---------------- --展开代码
现在,我们已经成功地创建了一个 GraphQL 服务,并可以通过 AWS API Gateway
进行访问。
第三步:启动本地环境
在开发阶段,尤其是团队协作中,测试和调试 GraphQL 服务是非常重要的。因此,我们应该在本地搭建一套仿真的环境,并在上面测试服务是否正常运行。Serverless
提供了一个名为 serverless-offline
的插件,可以在本地启动一个仿真的 Lambda 环境和 API Gateway 环境。
首先,我们需要在项目目录下添加一个名为 serverless.yml
的配置文件:
-- -------------------- ---- ------- -------- ---------------------------- --------- ----- --- -------- ---------- ------ ----- ------- -------------- ------- ------- ----- --------------------- - --------- ---- - ---------- ---- -------- ------------------ ------- - ----- ----- - ------- --- -------- - ---------------------------- - ------------------ - ----------------------------展开代码
然后,安装 serverless-offline
插件:
npm install serverless-offline --save-dev
在本地启动仿真的环境:
serverless offline start
如果一切正常,serverless
将告诉您 API Gateway
的启动地址和端口。
现在您已经可以在本地开发环境中测试和调试 GraphQL
服务了。
第四步:部署
最后,我们需要将代码部署到 AWS Lambda 上。执行以下命令即可:
npm run deploy
serverless
将会打包整个项目,然后将本地代码推送到 AWS Lambda
上,包括运行目录、依赖项和 serverless.yaml
文件的配置。如果这一步成功,您即可访问部署在 AWS Lambda
上的 GraphQL
服务了。
至此,我们已经完成了 Serverless
架构下的 GraphQL
服务搭建,该服务可以快速、轻便、安全地运行,无需担心服务器硬件和软件的维护和运营成本。
总结
本篇文章详细地介绍了 Serverless
架构下如何快速搭建 GraphQL
服务,并提供了代码示例和详细的步骤和解释。尽管这一过程可能对初学者来说有一些技术挑战,但通过本教程,选择正确的技术路线和工具,我们相信您将可以轻松地构建一套高效稳定的 GraphQL
服务。
Good Luck & Have Fun!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65b3ad1fadd4f0e0ffcb3a8e