同期
Sync
リクエストマッピングドキュメントを使用すると、DynamoDB テーブルからすべての結果を取得し、最後のクエリ (差分更新) 以降に変更されたデータのみを受け取ることができます。 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" : { ... } }
各フィールドの定義は以下のようになります。
Sync フィールド
-
version
-
テンプレート定義のバージョンです。現在、
2018-05-29
のみがサポートされています。この値は必須です。 -
operation
-
実行する DynamoDB の処理。
Sync
の処理を実行するには、これにSync
を設定する必要があります。この値は必須です。 -
filter
-
DynamoDB からの結果が返される前に、その結果をフィルタリングするために使用するフィルタです。フィルタの詳細については、「フィルタ」を参照してください。このフィールドはオプションです。
-
limit
-
一度に評価する項目の最大数です。このフィールドはオプションです。省略した場合、デフォルトの制限は
100
項目に設定されます。このフィールドの最大値は1000
項目です。 -
nextToken
-
前のクエリを継続するためのページ分割トークンです。これは前のクエリから取得されます。このフィールドはオプションです。
-
lastSync
-
最後に成功した
Sync
オペレーションが開始されたエポックミリ秒単位の時刻。指定すると、lastSync
以降に変更された項目のみが返されます。このフィールドはオプションです。最初のSync
オペレーションからすべてのページを取得した後にのみ入力する必要があります。省略した場合は、ベーステーブルの結果が返されます。それ以外の場合は、差分テーブルの結果が返されます。 basePartitionKey
-
Sync
オペレーションを実行する際に使用されるベーステーブルのパーティションキー。このフィールドにより、テーブルがカスタムパーティションキーを使用している場合にSync
オペレーションを実行できます。これはオプションのフィールドです。 deltaIndexName
-
Sync
オペレーションに使用されるインデックス。このインデックスは、テーブルがカスタムパーティションキーを使用する場合に、デルタストアテーブル全体で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
には別のリクエストで使用できるページ分割トークンが含まれています。AWSAppSync は、DynamoDB から返されたページ分割トークンを暗号化および難読化します。これにより、テーブルデータが誤って呼び出し元に漏えいされるのを防ぎます。また、これらのページ分割トークンは異なるリゾルバー間では使用できません。 -
scannedCount
-
フィルタ式 (ある場合) が適用される前に、DynamoDB により取得された項目の数です。
-
startedAt
-
エポックミリ秒単位の時刻ですが、同期オペレーションが開始されれば、ローカルに保存して別のリクエストで
lastSync
の引数として使用することができます。ページ分割トークンがリクエストに含まれている場合、この値は、結果の最初のページのリクエストによって返されたものと同じになります。
例
次の例は、GraphQL クエリ: syncPosts(nextToken: String, lastSync: AWSTimestamp)
のマッピングテンプレートです。
この例では、lastSync
を省略すると、ベーステーブルのすべてのエントリが返されます。lastSync
が指定されている場合は、lastSync
以降に変更された差分同期テーブルのエントリのみが返されます。
{ "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)) }