本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
GraphQL 中的純量類型
GraphQL 物件類型具有名稱和欄位,而且這些欄位可以具有子欄位。最終,物件類型的欄位必須解析為純量類型,代表查詢的葉子。如需物件類型和純量的詳細資訊,請參閱 GraphQL 網站上的結構描述和類型
除了預設的一組 GraphQL 純量之外, AWS AppSync 也可讓您使用以 AWS字首開頭的服務定義純量。 AWS AppSync 不支援建立使用者定義 (自訂) 純量。您必須使用預設 AWS 或純量。
您無法使用 AWS做為自訂物件類型的字首。
下節是結構描述類型參考。
預設純量
GraphQL 定義下列預設純量:
ID-
物件的唯一識別符。此純量會序列化為 ,
String但並非供人閱讀。 String-
UTF-8 字元序列。
Int-
介於 -(231) 和 231-1 之間的整數值。
Float-
IEEE 754 浮點值。
Boolean-
布林值,
true或false。
AWS AppSync 純量
AWS AppSync 定義下列純量:
AWSDate-
格式為 的擴充 ISO 8601 日期
字串 YYYY-MM-DD。 AWSTime-
格式為 的擴充 ISO 8601 時間
字串 hh:mm:ss.sss。 AWSDateTime-
擴充 ISO 8601 日期和時間
字串,格式為 YYYY-MM-DDThh:mm:ss.sssZ。
注意
AWSDate、 AWSTime和 AWSDateTime 純量可以選擇性地包含時區位移1970-01-01Z、 1970-01-01-07:00和 1970-01-01+05:30 都對 有效AWSDate。時區位移必須是 Z(UTC) 或以小時和分鐘為單位的位移 (以及選擇性的秒數)。例如:±hh:mm:ss。時區位移中的秒欄位被視為有效,即使它不是 ISO 8601 標準的一部分。
AWSTimestamp-
整數值,代表 前後的秒數
1970-01-01-T00:00Z。 AWSEmail-
採用 RFC 822
local-part@domain-part所定義格式的電子郵件地址。 AWSJSON-
JSON 字串。任何有效的 JSON 建構模組都會自動剖析並載入解析程式程式碼,做為映射、清單或純量值,而非常值輸入字串。未引用的字串或其他無效的 JSON 會導致 GraphQL 驗證錯誤。
AWSPhone-
電話號碼。此值會儲存為字串。電話號碼可以包含空格或連字號,以分隔數字群組。沒有國家/地區代碼的電話號碼假設為遵守北美編號計劃 (NANP)
的美國/北美電話號碼。 AWSURL-
RFC 1738
定義的 URL。例如 https://www.amazon.com/dp/B000NZW3KC/或mailto:example@example.com。URLs 必須包含結構描述 (http、mailto),且路徑部分中不能包含兩個正斜線 (//)。 AWSIPAddress-
有效的 IPv4 或 IPv6 地址。IPv4 地址預期為四點符號 (
123.12.34.56)。IPv6 地址預期為非括號、冒號分隔格式 (1a2b:3c4b::1234:4567)。您可以包含選用的 CIDR 尾碼 (123.45.67.89/16) 來表示子網路遮罩。
結構描述用量範例
下列範例 GraphQL 結構描述使用所有自訂純量做為「物件」,並顯示基本 put、get 和 list 操作的解析程式請求和回應範本。最後,此範例示範如何在執行查詢和變動時使用此功能。
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可能看起來的樣子。putObject 使用 PutItem操作來建立或更新 Amazon DynamoDB 資料表中的項目。請注意,此程式碼片段沒有已設定的 Amazon DynamoDB 資料表做為資料來源。這只是用作範例:
{ "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可能看起來的樣子。getObject 使用 GetItem操作來傳回指定主索引鍵之項目的一組屬性。請注意,此程式碼片段沒有已設定的 Amazon DynamoDB 資料表做為資料來源。這只是用作範例:
{ "version": "2017-02-28", "operation": "GetItem", "key": { "id": $util.dynamodb.toDynamoDBJson($ctx.args.id), } }
的回應範本會getObject傳回結果:
$util.toJson($ctx.result)
以下是 的請求範本listObjects可能看起來的樣子。listObjects 使用 Scan操作來傳回一或多個項目和屬性。請注意,此程式碼片段沒有已設定的 Amazon DynamoDB 資料表做為資料來源。這只是用作範例:
{ "version" : "2017-02-28", "operation" : "Scan", }
的回應範本會listObjects傳回結果:
$util.toJson($ctx.result.items)
以下是搭配 GraphQL 查詢使用此結構描述的一些範例:
mutation CreateObject { putObject(email: "example@example.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.com" phoneno: "+1 555 764 4377" 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 } }