解析程序
为 GraphQL API 的字段配置解析程序。Amazon Serverless Application Model (Amazon SAM) 支持 JavaScript 管道解析程序。
语法
要在您的 Amazon Serverless Application Model (Amazon SAM) 模板中声明此实体,请使用以下语法。
YAML
OperationType:LogicalId: Caching:CachingConfigCodeUri:StringFieldName:StringInlineCode:StringMaxBatchSize:IntegerPipeline:ListRuntime:RuntimeSync:SyncConfig
属性
Caching-
激活了缓存的解析程序的缓存配置。
必需:否
Amazon CloudFormation 兼容性:此属性直接传递给
AWS::AppSync::Resolver资源的CachingConfig属性。 CodeUri-
解析程序函数代码的 Amazon Simple Storage Service (Amazon S3) URI 或本地文件夹路径。
如果您指定本地文件夹的路径,则 Amazon CloudFormation 会要求在部署前先将该文件上传到 Amazon S3。您可以使用 Amazon SAM CLI 来简化此过程。有关更多信息,请参阅 Amazon SAM 如何在部署时上传本地文件。
如果既未提供
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 操作类型。例如,
Query、Mutation或Subscription。您可以按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 模板中,未指定 CodeUri 或 InlineCode。部署时,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; }