本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
解析程序
为 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
-
激活了缓存的解析程序的缓存配置。
必需:否
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 架构中,解析程序名称应与其使用的字段名称相匹配。对
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; }