解析程序 - AWS Serverless Application Model

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

解析程序

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

语法

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

YAML

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

属性

Caching

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

类型:CachingConfig

必需:否

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

CodeUri

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

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

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

类型:字符串

必需:否

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

FieldName

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

类型:字符串

必需:否

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

InlineCode

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

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

类型:字符串

必需:否

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

LogicalId

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

类型:字符串

必需:是

AWS CloudFormation 兼容性:此属性是独有的 AWS SAM ,没有 AWS CloudFormation 等效属性。

MaxBatchSize

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

类型:整数

必需:否

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

OperationType

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

类型:字符串

必需:是

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

Pipeline

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

类型:列表

必需:是

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

Runtime

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

类型运行时

必需:是

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

Sync

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

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

类型:SyncConfig

必需:否

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

示例

使用 AWS 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 }

以下是我们 AWS 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

在我们的 AWS SAM 模板中,我们没有指定CodeUriInlineCode。部署时, AWS 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; }