Sync - AWS AppSync

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

Sync

Sync 請求映射文件可讓您從 DynamoDB 資料表擷取所有結果,然後僅接收自上次查詢 (delta 更新) 以來變更的資料。 Sync 請求只能對版本化的 DynamoDB 資料來源提出。您可以指定下列選項:

  • 排除結果的篩選結果

  • 要傳回多少項目

  • 分頁字符

  • 上次起始 Sync 操作時

Sync 映射文件結構如下:

{ "version" : "2018-05-29", "operation" : "Sync", "basePartitionKey": "Base Tables PartitionKey", "deltaIndexName": "delta-index-name", "limit" : 10, "nextToken" : "aPaginationToken", "lastSync" : 1550000000000, "filter" : { ... } }

欄位定義如下:

同步欄位

version

範本定義的版本。目前僅支援 2018-05-29。此值為必填。

operation

要執行的 DynamoDB 操作。若要執行 Sync 操作,這必須設定為 Sync。此值為必填。

filter

在傳回結果之前,可用來從 DynamoDB 篩選結果的篩選條件。如需篩選條件的詳細資訊,請參閱篩選條件。此欄位為選用欄位。

limit

單次可評估的項目數量上限。此欄位為選用欄位。如果省略此值,預設限制將設為 100 個項目。此欄位的最大值為 1000 個項目。

nextToken

分頁字符將繼續先前的查詢。這會是從先前查詢所取得的。此欄位為選用欄位。

lastSync

上次成功啟動 Sync 操作的時間 (以毫秒為單位)。如果指定此值,只會傳回 lastSync 之後變更的項目。這個欄位是選用的,而且只有在初始 Sync 操作擷取所有頁面之後才能填入。如果省略此值,將傳回 Base 資料表的結果,否則會傳回 Delta 資料表的結果。

basePartitionKey

執行 Sync 操作時使用的基礎資料表的分割區索引鍵。此欄位允許在資料表使用自訂分割區金鑰時執行Sync操作。此為選用欄位。

deltaIndexName

用於 Sync 操作的索引。當資料表使用自訂分割區金鑰時,需要此索引才能在整個 Delta Store 資料表上啟用Sync操作。Sync 操作將在 GSI(在 gsi_ds_pk和 上建立) 上執行gsi_ds_sk。此欄位為選用欄位。

DynamoDB 同步傳回的結果會自動轉換為 GraphQL JSON 和原始類型,並可在映射內容中使用 ($context.result)。

如需 DynamoDB 類型轉換的詳細資訊,請參閱類型系統 (回應映射)

如需回應映射範本的詳細資訊,請參閱解析程式映射範本概觀。

結果的結構如下:

{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10, startedAt = 1550000000000 }

欄位定義如下:

items

包含同步傳回項目的清單。

nextToken

如果可能有更多結果, 會nextToken包含分頁權杖,您可以在另一個 request. AWS AppSync encrypts 中使用,並混淆從 DynamoDB 傳回的分頁權杖。這樣可確保資料表的資料不會不慎洩漏給發起人。此外,這些分頁字符在不同解析程式之間無法使用。

scannedCount

在套用篩選條件表達式 (如果有) 之前DynamoDB 擷取的項目數量。

startedAt

開始同步操作時,可以在本機存放並在另一個請求中做為 lastSync 引數的時間 (以 epoch 毫秒為單位)。如果請求中包含分頁字符,則該值將與請求針對第一頁結果傳回的值相同。

範例

下列範例是 GraphQL 查詢的映射範本:syncPosts(nextToken: String, lastSync: AWSTimestamp)

在此範例中,如果省略 lastSync,則會傳回 Base 資料表中的所有項目。如果提供 lastSync,只會傳回自 lastSync 變更之 Delta Sync 資料表中的項目。

{ "version" : "2018-05-29", "operation" : "Sync", "limit": 100, "nextToken": $util.toJson($util.defaultIfNull($ctx.args.nextToken, null)), "lastSync": $util.toJson($util.defaultIfNull($ctx.args.lastSync, null)) }