解析程序 - 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 部署时上传本地文件

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

类型:字符串

必需:否

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

FieldName

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

类型:字符串

必需:否

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

InlineCode

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

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

类型:字符串

必需:否

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

LogicalId

解析程序的唯一名称。在一个 GraphQL schema,您的解析器名称应与其使用的字段名称相匹配。对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; }