AWS AppSync
AWS AppSync 開発者ガイド

AWS AppSync でのスカラー型

GraphQL オブジェクトタイプには名前とフィールドがあり、それらは具体的なデータに解決される必要があります。ここでスカラー型が必要になります。これはクエリの各要素を表します。AppSync には、すぐに使用できる一連のスカラー型が用意されています。

GraphQL スカラー

ID

ID スカラー型は一意の ID を表し、オブジェクトの再取得のため、またはキャッシュのキーとしてよく使用されます。ID 型は文字列と同じ方法でシリアル化されますが、ID をフィールドとして定義することは、人間による読み取りを想定していないことを意味します。

文字列

String スカラー型は UTF-8 文字シーケンスとして表現されるテキストデータです。String 型は、ほとんどの場合、人間が読み取れる自由形式のテキストを表現するために GraphQL によって使用されます。

Int

Int スカラー型は、非小数の符号付き整数値を表します。Int は -(2^31) と 2^31 - 1 の間の値を表現できます。

Float

Float スカラー型は IEEE 754 で定められた符号付き倍精度小数値を表します。

Boolean

Boolean スカラー型は true または false のブール値を示します。

AppSync 定義スカラー

AWSDate

AWSDate スカラー型は有効な拡張 ISO 8601 日付文字列です。つまり、このスカラー型は YYYY-MM-DD の形式の日付文字列を受け入れます。このスカラー型はタイムゾーンオフセットも受け入れます。たとえば、1970-01-01Z1970-01-01-07:00 および 1970-01-01+05:30 はすべて有効な日付です。タイムゾーンオフセットは Z (UTC タイムゾーンを表す)、または ±hh:mm:ss の形式である必要があります。ISO 8601 標準には含まれていませんが、タイムゾーンオフセットの第 2 フィールドは有効と見なされます。

AWSTime

AWSTime スカラー型は有効な拡張 ISO 8601 時刻文字列です。つまり、このスカラー型は hh:mm:ss.sss の形式の時刻文字列を受け入れます。秒の後ろのフィールドはナノ秒フィールドです。1 ~ 9 桁を受け入れることができます。秒およびナノ秒フィールドは省略可能です (ナノ秒フィールドを使用する場合は 2 番目のフィールドを指定する必要があります)。このスカラー型はタイムゾーンオフセットも受け入れます。

たとえば、12:30Z12:30:24-07:00 および 12:30:24.500+05:30 はすべて有効な時刻文字列です。

タイムゾーンオフセットは Z (UTC タイムゾーンを表す)、または ±hh:mm:ss の形式である必要があります。ISO 8601 標準には含まれていませんが、タイムゾーンオフセットの第 2 フィールドは有効と見なされます。

AWSDateTime

AWSDateTime スカラー型は有効な拡張 ISO 8601 日時文字列です。つまり、このスカラー型は YYYY-MM-DDThh:mm:ss.sssZ の形式の日時文字列を受け入れます。秒の後ろのフィールドはナノ秒フィールドです。1 ~ 9 桁を受け入れることができます。秒およびナノ秒フィールドは省略可能です (ナノ秒フィールドを使用する場合は 2 番目のフィールドを指定する必要があります)。タイムゾーンオフセットはこのスカラーには必須です。タイムゾーンオフセットは Z (UTC タイムゾーンを表す)、または ±hh:mm:ss の形式である必要があります。ISO 8601 標準には含まれていませんが、タイムゾーンオフセットの第 2 フィールドは有効と見なされます。

AWSTimestamp

AWSTimestamp スカラー型は 1970-01-01T00:00Z から経過した秒数を表します。タイムスタンプは数値としてシリアル化および逆シリアル化されます。負の値も受け入れられ、1970-01-01T00:00Z までの秒数を表現します。

AWSEmail

AWSEmail スカラー型は RFC 822 に準拠する E メールアドレス文字列を表します。たとえば、username@example.com は有効な E メールアドレスです。

AWSJSON

AWSJSON スカラー型は RFC 8259 に準拠する JSON 文字列を表します。

{\"upvotes\": 10} のようなマップ、[1,2,3] のようなリスト、\"AWSJSON example string\" のようなスカラー値、1、および true が有効な JSON として受け入れられます。これらはリテラルな入力文字列としてではなく、マップ、リスト、スカラー値として自動的に解析され、リゾルバーマッピングテンプレートにロードされます。{a: 1}{'a': 1} および引用符で囲まれていない文字列のような無効な JSON 文字列は GraphQL 検証エラーをスローします。

AWSURL

AWSURL スカラー型は有効な URL 文字列を表します。URL にはあらゆるスキームを使用でき、ローカル URL (例: <http://localhost/>) であっても構いません。スキームがない URL は無効と見なされます。また、2 重のスラッシュを含む URL は無効と見なされます。

AWSPhone

AWSPhone スカラー型は有効な電話番号を表現します。電話番号は文字列としてシリアル化および逆シリアル化されます。電話番号は空白文字やハイフンで区切っても構いません。最初に国コードを指定する数字を指定できますが、必須ではありません。

AWSIPAddress

AWSIPAddress スカラー型は有効な IPv4 または IPv6 アドレス文字列を表現します。

スキーマの使用例

AWS AppSync での GraphQL API の作成、またはリゾルバーのマッピングテンプレートとの接続に慣れていない場合、まずは「GraphQL API の設計」と「データソースとリソルバーへの接続」に目を通してください。

以下に、GraphQL スキーマのサンプルを示します。すべてのカスタムのスカラーを「オブジェクト」として使用するとともに、シンプルな配置、取得、リストオペレーションのリゾルバーリクエストとレスポンステンプレートを使用しています。最後に、これがクエリとミューテーションの実行時にどのように使用できるかを示します。

type Mutation { putObject( email: AWSEmail, json: AWSJSON, date: AWSDate, time: AWSTime, datetime: AWSDateTime, timestamp: AWSTimestamp, url: AWSURL, phoneno: AWSPhone, ip: AWSIPAddress ): Object } type Object { id: ID! email: AWSEmail json: AWSJSON date: AWSDate time: AWSTime datetime: AWSDateTime timestamp: AWSTimestamp url: AWSURL phoneno: AWSPhone ip: AWSIPAddress } type Query { getObject(id: ID!): Object listObjects: [Object] } schema { query: Query mutation: Mutation }

次のリクエストテンプレートを putObject として使用します。

{ "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id": $util.dynamodb.toDynamoDBJson($util.autoId()), }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }

putObject のレスポンステンプレートは次の通りです。

$util.toJson($ctx.result)

次のリクエストテンプレートを getObject として使用します。

{ "version": "2017-02-28", "operation": "GetItem", "key": { "id": $util.dynamodb.toDynamoDBJson($ctx.args.id), } }

getObject のレスポンステンプレートは次の通りです。

$util.toJson($ctx.result)

次のリクエストテンプレートを listObjects として使用します。

{ "version" : "2017-02-28", "operation" : "Scan", }

listObjects のレスポンステンプレートは次の通りです。

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

このスキーマを GraphQL クエリと共に使用する例をいくつか次に示します。

mutation CreateObject { putObject(email: "nadiabailey@amazon.com" json: "{\"a\":1, \"b\":3, \"string\": 234}" date: "1970-01-01Z" time: "12:00:34." datetime: "1930-01-01T16:00:00-07:00" timestamp: -123123 url:"http://amazon.co.in" phoneno: "+91 704-011-2342" ip: "127.0.0.1/8" ) { id email json date time datetime url timestamp phoneno ip } } query getObject { getObject(id:"0d97daf0-48e6-4ffc-8d48-0537e8a843d2"){ email url timestamp phoneno ip } } query listObjects { listObjects { json date time datetime } }