建立基本查詢 (VTL) - AWS AppSync

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

建立基本查詢 (VTL)

注意

我們現在主要支援 APPSYNC_JS 執行期及其文件。請考慮在此處使用 APPSYNC_JS 執行期及其指南

GraphQL 解析程式將類型結構描述中的欄位連接到資料來源。解析程式是滿足請求的機制。 AWS AppSync 可以從結構描述自動建立和連接解析程式,或建立結構描述並從現有資料表連接解析程式,而無需編寫任何程式碼。

解析程式 AWS AppSync 用來 JavaScript 將 GraphQL 表達式轉換為資料來源可以使用的格式。或者,映射範本可以用 Apache Velocity 範本語言 (VTL) 撰寫,將 GraphQL 表達式轉換為資料來源可以使用的格式。

本節將示範如何使用 設定解析器VTL。您可以在 Resolver 映射範本程式設計指南 中找到編寫解析程式的入門教學樣式程式設計指南,而當程式設計可以在 Resolver 映射範本內容參考 中找到時可以使用的協助程式公用程式。 AWS AppSync 也具有內建測試和偵錯流程,您可以在從頭開始編輯或撰寫時使用。如需詳細資訊,請參閱測試和偵錯解析程式。

我們建議您先遵循本指南,然後再嘗試使用上述任何教學課程。

在本節中,我們將逐步說明如何建立解析程式、新增用於突變的解析程式,以及使用進階組態。

建立您的第一個解析程式

依照前面各節的範例,第一個步驟是為您的Query類型建立解析程式。

Console
  1. 登入 AWS Management Console 並開啟AppSync 主控台

    1. APIs儀表板 中,選擇您的 GraphQL API。

    2. Sidebar 中,選擇結構描述

  2. 在頁面的右側,有一個名為 Resolvers 的視窗。此方塊包含頁面左側結構描述視窗中定義的類型和欄位清單。您可以將解析器連接至 欄位。例如,在查詢類型下,選擇getTodos欄位旁的連接

  3. 建立解析程式頁面上,選擇您在連接資料來源指南中建立的資料來源。在設定映射範本視窗中,您可以使用右側的下拉式清單選擇一般請求和回應映射範本,或自行撰寫。

    注意

    將請求映射範本與回應映射範本配對稱為單位解析器。單位解析器通常用於執行輪換操作;我們建議僅將它們用於具有少量資料來源的單一操作。對於更複雜的操作,我們建議您使用管道解析器,其可以依序使用多個資料來源執行多個操作。

    如需請求和回應映射範本之間差異的詳細資訊,請參閱 單位解析器

    如需使用管道解析程式的詳細資訊,請參閱管道解析程式

  4. 對於常見使用案例, AWS AppSync 主控台具有內建範本,可用來從資料來源取得項目 (例如所有項目查詢、個別查詢等)。例如,在設計getTodos沒有分頁的結構描述的簡單版本上,列出項目的請求映射範本如下所示:

    { "version" : "2017-02-28", "operation" : "Scan" }
  5. 您一律需要回應映射範本來搭配請求。主控台為清單提供具有下列傳遞值的預設值:

    $util.toJson($ctx.result.items)

    在這個範例中,項目清單的 context 物件 (別名為 $ctx) 為 $context.result.items 格式。如果您的 GraphQL 操作傳回單一項目,則會是 $context.result。 AWS AppSync 提供常見操作的協助程式函數,例如先前列出的$util.toJson函數,以正確格式化回應。如需函數的完整清單,請參閱解析程式對應範本公用程式參考

  6. 選擇儲存解析程式

API
  1. 呼叫 CreateResolver 來建立解析器物件API。

  2. 您可以呼叫 UpdateResolver 來修改解析程式的欄位API。

CLI
  1. 執行 create-resolver命令來建立解析程式。

    您需要為此特定命令輸入 6 個參數:

    1. api-id的 API。

    2. 您想要在結構描述中修改type-name的類型。在主控台範例中,這是 Query

    3. 您要在類型中修改field-name的欄位。在主控台範例中,這是 getTodos

    4. 您在連接資料來源指南中建立data-source-name的資料來源的 。 https://docs.aws.amazon.com/appsync/latest/devguide/attaching-a-data-source.html

    5. request-mapping-template,這是請求的內文。在主控台範例中,這是:

      { "version" : "2017-02-28", "operation" : "Scan" }
    6. response-mapping-template,這是回應的內文。在主控台範例中,這是:

      $util.toJson($ctx.result.items)

    範例命令可能如下所示:

    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)" } }
  2. 若要修改解析程式的欄位和/或映射範本,請執行 update-resolver命令。

    除了 api-id 參數之外, create-resolver命令中使用的參數會被來自 update-resolver命令的新值覆寫。

新增突變的解析程式

下一步是為您的Mutation類型建立解析程式。

Console
  1. 登入 AWS Management Console 並開啟AppSync 主控台

    1. APIs儀表板 中,選擇您的 GraphQL API。

    2. Sidebar 中,選擇結構描述

  2. 突變類型下,選擇addTodo欄位旁的連接

  3. 建立解析程式頁面上,選擇您在連接資料來源指南中建立的資料來源

  4. 設定映射範本視窗中,您需要修改請求範本,因為這是您新增項目至 DynamoDB 的突變。請使用下列要求映射範本:

    { "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id) }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }
  5. AWS AppSync 會自動將欄位中定義的引數addTodo從 GraphQL 結構描述轉換為 DynamoDB 操作。上一個範例使用 金鑰將記錄存放在 DynamoDB 中id,該金鑰會從突變引數傳遞為 $ctx.args.id。您傳遞的所有其他欄位都會自動映射到具有 的 DynamoDB 屬性$util.dynamodb.toMapValuesJson($ctx.args)

    在此解析程式中,使用下列的回應映射範本:

    $util.toJson($ctx.result)

    AWS AppSync 也支援用於編輯解析器的測試和偵錯工作流程。您可以使用模擬 context 物件,先查看範本轉換後的值,然後再叫用。或者,您可以在執行查詢時以互動方式檢視對資料來源的完整要求執行。如需詳細資訊,請參閱測試和偵錯解析器,以及監控和記錄

  6. 選擇儲存解析程式

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
  1. 登入 AWS Management Console 並開啟AppSync 主控台

    1. APIs儀表板 中,選擇您的 GraphQL API。

    2. Sidebar 中,選擇結構描述

  2. 待辦事項類型下,選擇comments欄位旁的連接

  3. 建立解析程式頁面上,選擇您的註解資料表資料來源。快速入門指南中註解資料表的預設名稱為 AppSyncCommentTable,但可能會因您提供的名稱而異。

  4. 將下列程式碼片段新增至您的請求映射範本:

    { "version": "2017-02-28", "operation": "Query", "index": "todoid-index", "query": { "expression": "todoid = :todoid", "expressionValues": { ":todoid": { "S": $util.toJson($context.source.id) } } } }
  5. context.source 參照目前正在解析之欄位的父物件。在這個範例中,source.id 代表個別 Todo 物件,這個物件會在稍後用於查詢表達式。

    您可使用傳遞回應映射範本,如下所示:

    $util.toJson($ctx.result.items)
  6. 選擇儲存解析程式

  7. 最後,回到主控台的結構描述頁面上,將解析器連接至 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使用 建立第一個解析器區段中的命令和本節中的參數詳細資訊,在 中執行此操作。