本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立基本查詢 (VTL)我們現在主要支援 APPSYNC_JS 執行期及其文件。請考慮在此處使用 APPSYNC_JS 執行期及其指南。
GraphQL 解析程式將類型結構描述中的欄位連接到資料來源。解析程式是滿足請求的機制。 AWS AppSync 可以從結構描述自動建立和連接解析程式,或建立結構描述並從現有資料表連接解析程式,而無需編寫任何程式碼。
解析程式 AWS AppSync 用來 JavaScript 將 GraphQL 表達式轉換為資料來源可以使用的格式。或者,映射範本可以用 Apache Velocity 範本語言 (VTL) 撰寫,將 GraphQL 表達式轉換為資料來源可以使用的格式。
本節將示範如何使用 設定解析器VTL。您可以在 Resolver 映射範本程式設計指南 中找到編寫解析程式的入門教學樣式程式設計指南,而當程式設計可以在 Resolver 映射範本內容參考 中找到時可以使用的協助程式公用程式。 AWS AppSync 也具有內建測試和偵錯流程,您可以在從頭開始編輯或撰寫時使用。如需詳細資訊,請參閱測試和偵錯解析程式。
我們建議您先遵循本指南,然後再嘗試使用上述任何教學課程。
在本節中,我們將逐步說明如何建立解析程式、新增用於突變的解析程式,以及使用進階組態。
建立您的第一個解析程式
依照前面各節的範例,第一個步驟是為您的Query
類型建立解析程式。
- Console
-
-
登入 AWS Management Console 並開啟AppSync 主控台 。
-
在APIs儀表板 中,選擇您的 GraphQL API。
-
在 Sidebar 中,選擇結構描述 。
-
在頁面的右側,有一個名為 Resolvers 的視窗。此方塊包含頁面左側結構描述視窗中定義的類型和欄位清單。您可以將解析器連接至 欄位。例如,在查詢類型下,選擇getTodos
欄位旁的連接。
-
在建立解析程式頁面上,選擇您在連接資料來源指南中建立的資料來源。在設定映射範本視窗中,您可以使用右側的下拉式清單選擇一般請求和回應映射範本,或自行撰寫。
將請求映射範本與回應映射範本配對稱為單位解析器。單位解析器通常用於執行輪換操作;我們建議僅將它們用於具有少量資料來源的單一操作。對於更複雜的操作,我們建議您使用管道解析器,其可以依序使用多個資料來源執行多個操作。
如需請求和回應映射範本之間差異的詳細資訊,請參閱 單位解析器 。
如需使用管道解析程式的詳細資訊,請參閱管道解析程式 。
-
對於常見使用案例, AWS AppSync 主控台具有內建範本,可用來從資料來源取得項目 (例如所有項目查詢、個別查詢等)。例如,在設計getTodos
沒有分頁的結構描述的簡單版本上,列出項目的請求映射範本如下所示:
{
"version" : "2017-02-28",
"operation" : "Scan"
}
-
您一律需要回應映射範本來搭配請求。主控台為清單提供具有下列傳遞值的預設值:
$util.toJson($ctx.result.items)
在這個範例中,項目清單的 context
物件 (別名為 $ctx
) 為 $context.result.items
格式。如果您的 GraphQL 操作傳回單一項目,則會是 $context.result
。 AWS AppSync 提供常見操作的協助程式函數,例如先前列出的$util.toJson
函數,以正確格式化回應。如需函數的完整清單,請參閱解析程式對應範本公用程式參考 。
-
選擇儲存解析程式 。
- API
-
- CLI
-
-
執行 create-resolver
命令來建立解析程式。
您需要為此特定命令輸入 6 個參數:
範例命令可能如下所示:
aws appsync create-resolver --api-id abcdefghijklmnopqrstuvwxyz --type-name Query --field-name getTodos --data-source-name TodoTable --request-mapping-template "{ "version" : "2017-02-28", "operation" : "Scan", }" --response-mapping-template ""$"util.toJson("$"ctx.result.items)"
輸出會在 中傳回CLI。範例如下:
{
"resolver": {
"kind": "UNIT",
"dataSourceName": "TodoTable",
"requestMappingTemplate": "{ version : 2017-02-28, operation : Scan, }",
"resolverArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/types/Query/resolvers/getTodos",
"typeName": "Query",
"fieldName": "getTodos",
"responseMappingTemplate": "$util.toJson($ctx.result.items)"
}
}
-
若要修改解析程式的欄位和/或映射範本,請執行 update-resolver
命令。
除了 api-id
參數之外, create-resolver
命令中使用的參數會被來自 update-resolver
命令的新值覆寫。
新增突變的解析程式
下一步是為您的Mutation
類型建立解析程式。
- Console
-
-
登入 AWS Management Console 並開啟AppSync 主控台 。
-
在APIs儀表板 中,選擇您的 GraphQL API。
-
在 Sidebar 中,選擇結構描述 。
-
在突變類型下,選擇addTodo
欄位旁的連接。
-
在建立解析程式頁面上,選擇您在連接資料來源指南中建立的資料來源。
-
在設定映射範本視窗中,您需要修改請求範本,因為這是您新增項目至 DynamoDB 的突變。請使用下列要求映射範本:
{
"version" : "2017-02-28",
"operation" : "PutItem",
"key" : {
"id" : $util.dynamodb.toDynamoDBJson($ctx.args.id)
},
"attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args)
}
-
AWS AppSync 會自動將欄位中定義的引數addTodo
從 GraphQL 結構描述轉換為 DynamoDB 操作。上一個範例使用 金鑰將記錄存放在 DynamoDB 中id
,該金鑰會從突變引數傳遞為 $ctx.args.id
。您傳遞的所有其他欄位都會自動映射到具有 的 DynamoDB 屬性$util.dynamodb.toMapValuesJson($ctx.args)
。
在此解析程式中,使用下列的回應映射範本:
$util.toJson($ctx.result)
AWS AppSync 也支援用於編輯解析器的測試和偵錯工作流程。您可以使用模擬 context
物件,先查看範本轉換後的值,然後再叫用。或者,您可以在執行查詢時以互動方式檢視對資料來源的完整要求執行。如需詳細資訊,請參閱測試和偵錯解析器,以及監控和記錄 。
-
選擇儲存解析程式 。
- API
-
您也可以APIs使用 建立第一個解析器區段中的命令和本節中的參數詳細資訊來使用 來執行此操作。
- CLI
-
您也可以CLI使用 建立第一個解析器區段中的命令和本節中的參數詳細資訊,在 中執行此操作。
此時,如果您未使用進階解析器,您可以開始使用 GraphQLAPI,如使用 API所述。
進階解析程式
如果您遵循進階區段,並在設計結構描述以執行分頁掃描中建置範例結構描述,請改用下列getTodos
請求範本取代欄位:
{
"version" : "2017-02-28",
"operation" : "Scan",
"limit": $util.defaultIfNull(${ctx.args.limit}, 20),
"nextToken": $util.toJson($util.defaultIfNullOrBlank($ctx.args.nextToken, null))
}
對此分頁使用案例而言,回應映射不只是傳遞,因為其中必須包含游標 (讓用戶端了解接下來從哪個頁面開始) 和結果集。映射範本如下所示:
{
"todos": $util.toJson($context.result.items),
"nextToken": $util.toJson($context.result.nextToken)
}
前述回應映射範本的欄位,應符合 TodoConnection
類型之中定義的欄位。
對於您擁有Comments
資料表且正在解析Todo
類型 (傳回類型 [Comment]
) 上註解欄位的關係,您可以使用針對第二個資料表執行查詢的映射範本。若要執行此操作,您必須已經建立Comments
資料表的資料來源,如連接資料來源 所述。
我們針對第二個資料表使用查詢操作,僅供說明之用。您可以改為針對 DynamoDB 使用其他操作。此外,您可以從其他資料來源提取資料,例如 AWS Lambda 或 Amazon OpenSearch Service,因為關係是由 GraphQL 結構描述控制。
- Console
-
-
登入 AWS Management Console 並開啟AppSync 主控台 。
-
在APIs儀表板 中,選擇您的 GraphQL API。
-
在 Sidebar 中,選擇結構描述 。
-
在待辦事項類型下,選擇comments
欄位旁的連接。
-
在建立解析程式頁面上,選擇您的註解資料表資料來源。快速入門指南中註解資料表的預設名稱為 AppSyncCommentTable
,但可能會因您提供的名稱而異。
-
將下列程式碼片段新增至您的請求映射範本:
{
"version": "2017-02-28",
"operation": "Query",
"index": "todoid-index",
"query": {
"expression": "todoid = :todoid",
"expressionValues": {
":todoid": {
"S": $util.toJson($context.source.id)
}
}
}
}
-
context.source
參照目前正在解析之欄位的父物件。在這個範例中,source.id
代表個別 Todo
物件,這個物件會在稍後用於查詢表達式。
您可使用傳遞回應映射範本,如下所示:
$util.toJson($ctx.result.items)
-
選擇儲存解析程式 。
-
最後,回到主控台的結構描述頁面上,將解析器連接至 addComment
欄位,並指定Comments
資料表的資料來源。在這種情況下,要求映射範本是簡單的 PutItem
,其中具有註解為引數的特定 todoid
,但您需要使用 $utils.autoId()
公用程式來為註解建立唯一的排序索引鍵,如下所示:
{
"version": "2017-02-28",
"operation": "PutItem",
"key": {
"todoid": { "S": $util.toJson($context.arguments.todoid) },
"commentid": { "S": "$util.autoId()" }
},
"attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args)
}
使用傳遞回應範本,如下所示:
$util.toJson($ctx.result)
- API
-
您也可以APIs使用 建立第一個解析器區段中的命令和本節中的參數詳細資訊來使用 來執行此操作。
- CLI
-
您也可以CLI使用 建立第一個解析器區段中的命令和本節中的參數詳細資訊,在 中執行此操作。