如何在 Serverless 应用中使用 GraphQL

如何在 Serverless 应用中使用 GraphQL

GraphQL 是一种用于 API 的查询语言。通过使用 GraphQL,您可以定义所需的数据形状,而不必使用已经存在的预定义终端。这使得 GraphQL 成为在 Serverless 应用中使用的理想选择,因为其可以方便地与 Lambda, API Gateway 和其他各种 AWS 服务集成。

本文将讨论如何在 Serverless 应用中使用 GraphQL,并将提供一些示例代码,以帮助您更好地理解如何使用该技术。

GraphQL 优点

在学习如何使用 GraphQL 之前,让我们先了解 GraphQL 的优点。 GraphQL 提供了以下功能:

  1. 强类型: GraphQL 是一个类型化的查询语言,使您能够更轻松地查找和质询数据。

  2. 安全: 在 GraphQL 中,输出数据是由查询定义的,这使得数据更加安全。

  3. 灵活性: GraphQL 具有高度的灵活性,并可通过 API 进行很好地扩展,同时不必重构应用程序。

  4. 性能: 由于 GraphQL 具有更少的查询,因此可以更快地从服务器中检索数据。

GraphQL 的架构和实施

GraphQL 的架构由以下两个主要组件组成:Schema 和 Resolver。

  1. Schema: Schema 是 GraphQL API 的核心,它定义了 API 允许质询的数据类型。 Schema 是使用 GraphQL 中的代理语言定义的。

  2. Resolver: Resolver 负责解决 Schema 中定义的查询,并通过枚举服务器端存储中的数据来返回查询结果。

根据定义或查询,创建一个 Schema,而 Resolver 则是存储在服务器上的函数或闭包,负责相应的查询或定义。 GraphQL 的优势在于 Schema 的定义,这使得查询变得简明且易于开发,因为只有满足特定类型的数据才能通过 Schema 发送到服务器。

如何在 Serverless 应用中使用 GraphQL

以下是一些用于在 Serverless 应用中使用 GraphQL 的步骤:

  1. 集成 Lambda 函数和 API Gateway

在 AWS 上构建 Serverless 应用程序时,您需要将 Lambda 函数和 API Gateway 集成到应用程序中。 Lambda 函数实现应用程序的业务逻辑,而 API Gateway 提供了应用程序的访问点。

然后,您需要创建 Lambda 函数并将其与 API Gateway 集成。在 Lambda 函数编写了业务逻辑之后,您可以通过 API Gateway 将其映射到 URL 并公开给用户。

可以使用以下命令来创建 Lambda 和 API Gateway:

$ aws lambda create-function

$ aws apigateway create-rest-api

  1. 定义 GraphQL Schema

定义一个 GraphQL Schema,以启用数据类型和查询。这个 Schema 定义了服务器能够接受的查询以及查询返回的数据类型。以下是一个简单的示例:

type Query {

users: [User]

}

type User {

id: ID!

name: String

age: Int

}

  1. 定义 Resolver

Resolver 位于服务端,并为客户端定义的 GraphQL 查询和变异返回数据。在 Resolver 中,您可以使用服务器端代码来检索数据,例如,从数据库、缓存中获取数据。

以下是定义 Resolver 的代码示例:

const resolvers = {

Query: {

users: (parent, args, context, info) => {

return getUsers()

}

}

}

其中,用户是查询操作定义的字段。因此,Resolver 必须返回一个带有所有用户的数组。

  1. 集成 GraphQL 和 GraphQL Express

使用 GraphQL Express 库将 GraphQL 添加到 Lambda 函数中。将 GraphQL 模块导入您的 Lambda 代码,并构造 GraphQL Express 应用程序。

以下是集成 GraphQL 和 GraphQL Express 的代码示例:

const express = require('express')

const graphqlHTTP = require('express-graphql')

const schema = require('./schema/schema')

const root = require('./resolvers/index')

const app = express()

app.use('/graphql', graphqlHTTP({

schema: schema,

rootValue: root,

graphiql: true

}))

  1. 部署 Lambda 函数和 API Gateway

使用 Serverless 部署命令部署您的 Lambda 函数并在 API Gateway 中创建资源和配置。

以下是使用 Serverless 部署命令部署 Lambda 函数和 API Gateway 的代码示例:

$ serverless deploy

$ sls deploy

这些步骤将帮助您将 GraphQL 集成到 Serverless 应用中。通过使用 Serverless 和 GraphQL,您可以更轻松地构建安全、灵活且高性能的应用程序。

结论

总之,GraphQL 是一种强大的查询语言,适用于 Serverless 应用程序中。通过使用 Lambda 和 API Gateway,您可以将 GraphQL 集成到应用程序中,并使用 Less Code API 获得更好的性能和灵活性。

在此过程中,一定要定义查询 Schema 和 Resolver,并使用 GraphQL Express 实现这些查询。结果将是一个安全的应用程序,可以更好地质询数据。本文提供了一些示例代码,希望可以提高您的思路并帮助您更好地了解使用 GraphQL 在 Serverless 应用中的过程。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672aae56ddd3a70eb6d0801c