在这篇文章中,我将引导您使用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非常配套(或者说“代码中的爱情故事”)
- 优化资源使用:GraphQL精确的数据获取与无服务器按使用付费模型完美对齐,确保高效资源利用。
- 简化后端:无服务器函数可以高效处理GraphQL解析器,简化后端架构。
- 提高性能:GraphQL减少数据开销的能力使得应用程序运行更快,尤其是与无服务器架构结合使用时。
- 可扩展性:这两种技术都擅长处理变化的负载,使得它们的组合具有很高的可扩展性。
- 成本效益:无服务器计算的按需付费模型,结合GraphQL高效的数据传输,可以带来显著的成本节省。
“无服务器和GraphQL的结合使得可以快速开发可扩展且高效的API。这是一个强大的组合,可以显著减少开发时间和运营成本。” – Nader Dabit, “全栈无服务器“
以下是使用AWS Lambda中的GraphQL部署服务的逐步指南。
- 第一步:初始化一个新的TypeScript项目并安装依赖。
mkdir serverless-graphql-api
cd serverless-graphql-api
npm init -y
npm install typescript @types/node --save-dev
npx tsc --init
npm install apollo-server-lambda graphql @types/aws-lambda
npm install --save-dev serverless-offline
- 第二步:定义包含所需元素的GraphQL架构。
import { gql } from 'apollo-server-lambda';
export const typeDefs = gql`
type Query {
auto: String
}
type Mutation {
sayAuto(name: String!): String
}
`;
- 第三步: 实现解析器:
export const resolvers = {
Query: {
auto: () => 'Hello from serverless GraphQL!',
},
Mutation: {
sayAuto: (_: any, { name }: { name: string }) => `Hello, ${name}!`,
},
};
- 第四步:创建Lambda处理器:
import { ApolloServer } from 'apollo-server-lambda';
import { typeDefs } from './schema';
import { resolvers } from './resolvers';
const server = new ApolloServer({
typeDefs,
resolvers,
});
export const graphqlHandler = server.createHandler();
- 第五步:配置无服务器部署。创建一个
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),并使用适当的部署选项,如CDK或Terraform。随着无服务器计算和GraphQL的不断发展,我们可以期待出现更多强大工具和实践。
结论
通过采用无服务器GraphQL,开发者可以创建易于扩展并精确满足客户端需求的API。这就像拥有一个水晶球,它总是知道精确获取和扩展哪些数据。
Source:
https://dzone.com/articles/serverless-computing-and-graphql