

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

# GraphQL 中的純量類型
<a name="scalars"></a>

GraphQL 物件類型具有名稱和欄位，而且這些欄位可以具有子欄位。最終，物件類型的欄位必須解析為*純量*類型，代表查詢的葉子。如需物件類型和純量的詳細資訊，請參閱 GraphQL 網站上的[結構描述和類型](https://graphql.org/learn/schema/)。

除了預設的一組 GraphQL 純量之外， AWS AppSync 也可讓您使用以 *AWS*字首開頭**的服務定義**純量。 AWS AppSync 不支援建立**使用者定義** （自訂） 純量。您必須使用預設 *AWS* 或純量。

您無法使用 *AWS*做為自訂物件類型的字首。

下節是結構描述類型參考。

## 預設純量
<a name="graph-ql-base-scalars"></a>

GraphQL 定義下列預設純量：

### 預設純量清單
<a name="graph-ql-base-scalars-list"></a>

`ID`  
物件的唯一識別符。此純量會序列化為 ，`String`但並非供人閱讀。

`String`  
UTF-8 字元序列。

`Int`  
介於 -(231) 和 231-1 之間的整數值。

`Float`  
IEEE 754 浮點值。

`Boolean`  
布林值，`true` 或 `false`。

## AWS AppSync 純量
<a name="graph-ql-aws-appsync-scalars"></a>

AWS AppSync 定義下列純量：

### AWS AppSync 純量清單
<a name="graph-ql-aws-appsync-scalars-list"></a>

`AWSDate`  
格式為 的擴充 [ISO 8601 日期](https://en.wikipedia.org/wiki/ISO_8601#Calendar_dates)字串`YYYY-MM-DD`。

`AWSTime`  
格式為 的擴充 [ISO 8601 時間](https://en.wikipedia.org/wiki/ISO_8601#Times)字串`hh:mm:ss.sss`。

`AWSDateTime`  
擴充 [ISO 8601 日期和時間](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations)字串，格式為 `YYYY-MM-DDThh:mm:ss.sssZ`。

**注意**  
`AWSDate`、 `AWSTime`和 `AWSDateTime` 純量可以選擇性地包含[時區位移](https://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators)。例如，值 `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 ](https://tools.ietf.org/html/rfc822)`local-part@domain-part`所定義格式的電子郵件地址。

`AWSJSON`  
JSON 字串。任何有效的 JSON 建構模組都會自動剖析並載入解析程式程式碼，做為映射、清單或純量值，而非常值輸入字串。未引用的字串或其他無效的 JSON 會導致 GraphQL 驗證錯誤。

`AWSPhone`  
電話號碼。此值會儲存為字串。電話號碼可以包含空格或連字號，以分隔數字群組。沒有國家/地區代碼的電話號碼假設為遵守[北美編號計劃 (NANP)](https://en.wikipedia.org/wiki/North_American_Numbering_Plan) 的美國/北美電話號碼。

`AWSURL`  
[RFC 1738 ](https://tools.ietf.org/html/rfc1738)定義的 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`) 來表示子網路遮罩。

## 結構描述用量範例
<a name="example-schema-usage"></a>

下列範例 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
    }
}
```