GraphQL 中的純量類型 - AWS AppSync

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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

布林值,truefalse

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

注意

AWSDateAWSTimeAWSDateTime 純量可以選擇性地包含時區偏移 。例如,值 1970-01-01Z1970-01-01-07:001970-01-01+05:30 都對 有效AWSDate。時區偏移必須為 Z(UTC) 或以小時和分鐘為單位的偏移 (以及選擇性的秒數)。例如:±hh:mm:ss。即使不是 8601 ISO 標準的一部分,時區偏移中的秒欄位仍視為有效。

AWSTimestamp

整數值,代表 之前或之後的秒數1970-01-01-T00:00Z

AWSEmail

使用 RFC822 local-part@domain-part定義的格式的電子郵件地址。

AWSJSON

JSON 字串。任何有效的JSON建構都會自動剖析並載入解析器程式碼中,作為映射、清單或純量值,而不是常值輸入字串。未引用的字串或其他無效JSON會導致 GraphQL 驗證錯誤。

AWSPhone

電話號碼。此值會儲存為字串。電話號碼可以包含空格或連字號,以分隔數字群組。沒有國家/地區代碼的電話號碼假設為遵守北美編號計畫的美國/北美電話號碼 (NANP)

AWSURL

RFC1738 URL定義的 。例如 https://www.amazon.com/dp/B000NZW3KC/mailto:example@example.com。URLs 必須包含結構描述 (httpmailto),且路徑部分中不能包含兩個正斜線 (//)。

AWSIPAddress

有效 IPv4 或 IPv6 地址。IPv4 地址預期為四點符號 (123.12.34.56)。IPv6 地址應為非括號、冒號分隔格式 (1a2b:3c4b::1234:4567)。您可以包含選用尾碼 CIDR (123.45.67.89/16) 來指示子網路遮罩。

結構描述用量範例

下列範例 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可能看起來的樣子。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 } }