型システム (リクエストマッピング)
AWS の AppSync DynamoDB リゾルバーを使用して DynamoDB テーブルを呼び出す場合、AWS AppSync はその呼び出しで使用するそれぞれの値の型を知っている必要があります。これは、DynamoDB が GraphQL や JSON よりも多くの型プリミティブをサポートしているためです (セットやバイナリデータなど)。AWSGraphQL と DynamoDB 間で変換を行う場合、AppSync には何らかの情報が必要であり、これがない場合には、テーブルでのデータ構造について前提条件を作成する必要があります。
DynamoDB のデータ型の詳細については、DynamoDB の「データ型記述子」および「データ型」の各ドキュメントを参照してください。
DynamoDB の値は、単一のキーと値のペアを含む JSON オブジェクトで表されます。キーは DynamoDB の型を指定し、値はその値自身を指定します。次の例では、キー S
は値が文字列であることを示し、値 identifier
がその文字列値です。
{ "S" : "identifier" }
JSON オブジェクトは複数のキーと値のペアを持つことはできません。複数のキーと値のペアが指定されている場合、リクエストマッピングドキュメントは解析されません。
DynamoDB の値は、値を指定する必要がある場合にはリクエストマッピングドキュメントのどこかで使用されます。これが必要になる箇所には、key
セクションと attributeValue
セクション、および式セクションの expressionValues
セクションが含まれています。次の例では、DynamoDB の文字列値 identifier
が、(おそらくは GetItem
リクエストマッピングドキュメントの) key
セクションの id
フィールドに割り当てられています。
"key" : { "id" : { "S" : "identifier" } }
サポートされているタイプ
AWS AppSync では、以下の DynamoDB スカラー、ドキュメント、およびセット型をサポートしています。
- 文字列型
S
-
単一の文字列値です。DynamoDB の文字列値は次のように表されます。
{ "S" : "some string" }
以下は使用例です。
"key" : { "id" : { "S" : "some string" } }
- 文字列セット型
SS
-
1 組の文字列値です。DynamoDB の文字列セット値は次のように表されます。
{ "SS" : [ "first value", "second value", ... ] }
以下は使用例です。
"attributeValues" : { "phoneNumbers" : { "SS" : [ "+1 555 123 4567", "+1 555 234 5678" ] } }
- 数値型
N
-
単一の数値です。DynamoDB の数値は次のように表されます。
{ "N" : 1234 }
以下は使用例です。
"expressionValues" : { ":expectedVersion" : { "N" : 1 } }
- 数値セット型
NS
-
1 組の数値です。DynamoDB の数値セット値は次のように表されます。
{ "NS" : [ 1, 2.3, 4 ... ] }
以下は使用例です。
"attributeValues" : { "sensorReadings" : { "NS" : [ 67.8, 12.2, 70 ] } }
- バイナリ型
B
-
バイナリ値です。DynamoDB のバイナリ値は次のように表されます。
{ "B" : "SGVsbG8sIFdvcmxkIQo=" }
値は実際には文字列であることに注意してください。この文字列は、バイナリデータを Base64 でエンコードして表したものです。AWSAppSync では、この文字列をバイナリ値にデコードしてから DynamoDB に送信します。AWSAppSync は、RFC 2045 で定義された Base64 デコーディングスキームを使用します。Base64 のアルファベットにない文字は無視されます。
以下は使用例です。
"attributeValues" : { "binaryMessage" : { "B" : "SGVsbG8sIFdvcmxkIQo=" } }
- バイナリセット型
BS
-
1 組のバイナリ値です。DynamoDB のバイナリセット値は次のように表されます。
{ "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ] }
値は実際には文字列であることに注意してください。この文字列は、バイナリデータを Base64 でエンコードして表したものです。AWSAppSync では、この文字列をバイナリ値にデコードしてから DynamoDB に送信します。AWSAppSync は、RFC 2045 で定義された Base64 デコーディングスキームを使用します。Base64 のアルファベットにない文字は無視されます。
以下は使用例です。
"attributeValues" : { "binaryMessages" : { "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ] } }
- ブール型
BOOL
-
ブール値。DynamoDB のブール値は次のように表されます。
{ "BOOL" : true }
有効な値は、
true
とfalse
のみです。以下は使用例です。
"attributeValues" : { "orderComplete" : { "BOOL" : false } }
- リスト型
L
-
サポートされているその他の DynamoDB の値のリストです。DynamoDB のリスト値は次のように表されます。
{ "L" : [ ... ] }
この値は複合値です。リストには、サポートされる DynamoDB の値 (他のリストも含む) が 0 個以上入ります。このリストには、異なる型を混在させることもできます。
以下は使用例です。
{ "L" : [ { "S" : "A string value" }, { "N" : 1 }, { "SS" : [ "Another string value", "Even more string values!" ] } ] }
- マップ型
M
-
サポートされる他の DynamoDB の値の、キーと値のペアの順序付けされていない集合を表します。DynamoDB のマップ値は次のように表されます。
{ "M" : { ... } }
マップには 0 個以上のキーと値のペアが入ります。キーは文字列である必要があり、値には、サポートされている DynamoDB の任意の値 (他のマップを含む) が使用できます。このマップには、異なる型を混在させることもできます。
以下は使用例です。
{ "M" : { "someString" : { "S" : "A string value" }, "someNumber" : { "N" : 1 }, "stringSet" : { "SS" : [ "Another string value", "Even more string values!" ] } } }
- Null 型
NULL
-
null 値です。DynamoDB の Null 値は次のように表されます。
{ "NULL" : null }
以下は使用例です。
"attributeValues" : { "phoneNumbers" : { "NULL" : null } }
各タイプの詳細については、DynamoDB のドキュメントを参照してください。