解析程序 - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

解析程序

为您的 GraphQL API 字段配置解析器。 Amazon Serverless Application Model(Amazon SAM) 支持JavaScript 管道解析器

语法

要在您的 Amazon Serverless Application Model (Amazon SAM) 模板中声明此实体,请使用以下语法。

YAML

OperationType: LogicalId: Caching: CachingConfig CodeUri: String FieldName: String InlineCode: String MaxBatchSize: Integer Pipeline: List Runtime: Runtime Sync: SyncConfig

属性

Caching

激活了缓存的解析程序的缓存配置。

类型:CachingConfig

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给 AWS::AppSync::Resolver 资源的 CachingConfig 属性。

CodeUri

解析程序函数代码的 Amazon Simple Storage Service (Amazon S3) URI 或本地文件夹路径。

如果您指定本地文件夹的路径,则 Amazon CloudFormation 会要求在部署前先将该文件上传到 Amazon S3。您可以使用 Amazon SAM CLI 来简化此过程。有关更多信息,请参阅 在部署时使用 Amazon SAM CLI 上传本地文件

如果既未提供CodeUri,也未提供InlineCode,则 Amazon SAM 会生成 InlineCode,将请求重定向到第一个管道函数并接收来自最后一个管道函数的响应。

类型:字符串

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给 AWS::AppSync::Resolver 资源的 CodeS3Location 属性。

FieldName

解析程序的名称。指定此属性以覆盖 LogicalId 值。

类型:字符串

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给 AWS::AppSync::Resolver 资源的 FieldName 属性。

InlineCode

包含请求和响应函数的解析程序代码。

如果既未提供CodeUri,也未提供InlineCode,则 Amazon SAM 会生成 InlineCode,将请求重定向到第一个管道函数并接收来自最后一个管道函数的响应。

类型:字符串

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给 AWS::AppSync::Resolver 资源的 Code 属性。

LogicalId

解析程序的唯一名称。在 GraphQL 架构中,解析程序名称应与其使用的字段名称相匹配。对LogicalId 也使用这个字段名称。

类型:字符串

必需:是

Amazon CloudFormation 兼容性:此属性为 Amazon SAM 独有,没有 Amazon CloudFormation 等效属性。

MaxBatchSize

BatchInvoke 操作中单个 Amazon Lambda 函数发送的解析程序请求输入的最大数量。

类型:整数

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给 AWS::AppSync::Resolver 资源的 MaxBatchSize 属性。

OperationType

与解析程序关联的 GraphQL 操作类型。例如,QueryMutationSubscription。您可以按LogicalId 将多个解析程序嵌套在单个OperationType中。

类型:字符串

必需:是

Amazon CloudFormation 兼容性:此属性直接传递给 AWS::AppSync::Resolver 资源的 TypeName 属性。

Pipeline

与管道解决程序关联的函数。在列表中按逻辑 ID 指定函数。

类型:列表

必需:是

Amazon CloudFormation 兼容性:此属性为 Amazon SAM 独有,没有 Amazon CloudFormation 等效属性。它类似于 AWS::AppSync::Resolver 资源的 PipelineConfig 属性。

Runtime

管道解析程序或函数的运行时间。指定要使用的名称和版本。

类型运行时

必需:是

Amazon CloudFormation 兼容性:此属性为 Amazon SAM 独有,没有 Amazon CloudFormation 等效属性。它类似于 AWS::AppSync::Resolver 资源的 Runtime 属性。

Sync

描述解析程序的同步配置。

指定在调用解析程序时要使用的冲突检测策略和解决策略。

类型:SyncConfig

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给 AWS::AppSync::Resolver 资源的 SyncConfig 属性。

示例

使用 Amazon SAM 生成的解析程序函数代码并将字段另存为变量

以下是我们的示例使用的 GraphQL 架构:

schema { query: Query mutation: Mutation } type Query { getPost(id: ID!): Post } type Mutation { addPost(author: String!, title: String!, content: String!): Post! } type Post { id: ID! author: String title: String content: String }

以下是 Amazon SAM 模板的代码段:

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyGraphQLApi: Type: AWS::Serverless::GraphQLApi Properties: ... Functions: preprocessPostItem: ... createPostItem: ... Resolvers: Mutation: addPost: Runtime: Name: APPSYNC_JS Version: 1.0.0 Pipeline: - preprocessPostItem - createPostItem

在 Amazon SAM 模板中,未指定 CodeUriInlineCode。部署时,Amazon SAM 会自动为解析程序生成以下内联代码:

export function request(ctx) { return {}; } export function response(ctx) { return ctx.prev.result; }

这个默认的解析程序代码会将请求重定向到第一个管道函数,并接收来自最后一个管道函数的响应。

在第一个管道函数中,可以使用提供的 args 字段来解析请求对象并创建变量。然后就可以在函数中使用这些变量。以下是 preprocessPostItem 函数的示例:

import { util } from "@aws-appsync/utils"; export function request(ctx) { const author = ctx.args.author; const title = ctx.args.title; const content = ctx.args.content; // Use variables to process data } export function response(ctx) { return ctx.result; }