解析程式 - AWS Serverless Application Model

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

解析程式

設定 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

已啟動快取之解析程式的快取組態。

類型:CachingConfig

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::AppSync::Resolver資源的CachingConfig屬性。

CodeUri

解析器函數代碼的 Amazon Simple Storage Service (Amazon S3) URI 或本地文件夾的路徑。

如果您指定本機資料夾的路徑,則 AWS CloudFormation 需要在部署之前先將檔案上傳到 Amazon S3。您可以使用 AWS SAMCLI來促進此程序。如需詳細資訊,請參閱 如何在部署時上傳本地文件 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; }