本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
解析程式
設定 API 欄位的解析程式GraphQL。 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 SAMCLI來促進此程序。如需詳細資訊,請參閱 方法 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; }