AWS AppSync でのスカラー型
GraphQL オブジェクトタイプ
注意: カスタムタイプのプレフィックスとして AWS を使用することはできません。
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-01Z
、1970-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:30Z
、12: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
AWSJSON
AWSJSON
スカラー型は RFC 8259
{\"upvotes\": 10} のようなマップ、[1,2,3] のようなリスト、\"AWSJSON example string\" のようなスカラー値、1、および true が有効な JSON として受け入れられます。これらはリテラルな入力文字列としてではなく、マップ、リスト、スカラー値として自動的に解析され、リゾルバーマッピングテンプレートにロードされます。{a: 1}、{'a': 1} および引用符で囲まれていない文字列のような無効な JSON 文字列は GraphQL 検証エラーをスローします。
AWSURL
AWSURL
スカラー型は有効な URL 文字列を表します。URL は任意のスキームを使用できます。ローカル URL (<https://localhost/>
など) も有効です。スキームがない URL は無効と見なされます。また、2 重のスラッシュを含む URL は無効と見なされます。
AWSPhone
AWSPhone
スカラー型は有効な電話番号を表現します。電話番号は文字列としてシリアル化および逆シリアル化されます。電話番号は空白文字やハイフンで区切っても構いません。最初に国コードを指定する数字を指定できますが、米国の電話番号には必須ではありません。
AWSIPAddress
AWSIPAddress
スカラー型は有効な IPv4
スキーマの使用例
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:"https://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 } }