本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
解析程序
为你的字段配置解析器 GraphQL API。 AWS Serverless Application Model (AWS SAM) 支持JavaScript 管道解析器。
语法
要在 AWS Serverless Application Model (AWS SAM) 模板中声明此实体,请使用以下语法。
YAML
OperationType:LogicalId: Caching:CachingConfigCodeUri:StringFieldName:StringInlineCode:StringMaxBatchSize:IntegerPipeline:ListRuntime:RuntimeSync:SyncConfig
属性
- Caching
- 
					激活了缓存的解析程序的缓存配置。 必需:否 AWS CloudFormation 兼容性:此属性直接传递给 AWS::AppSync::Resolver资源的CachingConfig属性。
- CodeUri
- 
					解析程序函数代码的 Amazon Simple Storage Service (Amazon S3) URI 或本地文件夹路径。 如果您指定本地文件夹的路径,则 AWS CloudFormation 要求在部署之前先将文件上传到 Amazon S3。你可以使用 AWS SAM CLI 以促进这一进程。有关更多信息,请参阅 如何在 AWS SAM 部署时上传本地文件。 如果两者均未提供 CodeUri或InlineCode,则 AWS SAM 将生成InlineCode将请求重定向到第一个管道函数并接收来自最后一个管道函数的响应。类型:字符串 必需:否 AWS CloudFormation 兼容性:此属性直接传递给 AWS::AppSync::Resolver资源的CodeS3Location属性。
- FieldName
- 
					解析程序的名称。指定此属性以覆盖 LogicalId值。类型:字符串 必需:否 AWS CloudFormation 兼容性:此属性直接传递给 AWS::AppSync::Resolver资源的FieldName属性。
- InlineCode
- 
					包含请求和响应函数的解析程序代码。 如果两者均未提供 CodeUri或InlineCode,则 AWS SAM 将生成InlineCode将请求重定向到第一个管道函数并接收来自最后一个管道函数的响应。类型:字符串 必需:否 AWS CloudFormation 兼容性:此属性直接传递给 AWS::AppSync::Resolver资源的Code属性。
- LogicalId
- 
					解析程序的唯一名称。在一个 GraphQL schema,您的解析器名称应与其使用的字段名称相匹配。对 LogicalId也使用这个字段名称。类型:字符串 必需:是 AWS CloudFormation 兼容性:此属性是独有的 AWS SAM ,没有 AWS CloudFormation 等效属性。 
- MaxBatchSize
- 
					向 BatchInvoke操作中单个 AWS Lambda 函数发送的解析程序请求输入的最大数量。类型:整数 必需:否 AWS CloudFormation 兼容性:此属性直接传递给 AWS::AppSync::Resolver资源的MaxBatchSize属性。
- OperationType
- 
					这些区域有:GraphQL 与您的解析器关联的操作类型。例如, Query、Mutation或Subscription。您可以按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 模板中,我们没有指定CodeUri或InlineCode。在部署时, 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; }