

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

# 類型系統 （請求映射）
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request"></a>

使用 AWS AppSync DynamoDB 解析程式呼叫 DynamoDB 資料表時， AWS AppSync 需要知道要在該呼叫中使用的每個值類型。這是因為 DynamoDB 支援比 GraphQL 或 JSON 更多的類型基本概念 （例如集合和二進位資料）。 AWS AppSync 需要一些提示，否則您必須對資料表中的資料結構做出一些假設。 GraphQL DynamoDB

如需 DynamoDB 資料類型的詳細資訊，請參閱 DynamoDB [資料類型描述項](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.LowLevelAPI.html#Programming.LowLevelAPI.DataTypeDescriptors)和[資料類型](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html#HowItWorks.DataTypes)文件。

DynamoDB 值由包含單一鍵值對的 JSON 物件表示。金鑰會指定 DynamoDB 類型，而值會指定值本身。在下列範例中，`S` 鍵代表值是字串，`identifier` 值則是字串值本身。

```
{ "S" : "identifier" }
```

請注意，JSON 物件不能有一個以上的索引值對。如果指定一個以上的索引值對，要求映射文件就不會進行剖析。

DynamoDB 值會在您需要指定值的請求映射文件中的任何位置使用。您需要執行這項操作的一些地方包括：`key` 和 `attributeValue` 區段，以及表達式區段的 `expressionValues` 區段。在下列範例中，DynamoDB 字串值`identifier`會指派給`key`區段中的 `id` 欄位 （可能在`GetItem`請求映射文件中）。

```
"key" : {
   "id" : { "S" : "identifier" }
}
```

 **支援的類型** 

AWS AppSync 支援下列 DynamoDB 純量、文件和設定類型：

**字串類型 `S` **  
單一字串值。DynamoDB 字串值以下列表示：  

```
{ "S" : "some string" }
```
使用範例：  

```
"key" : {
   "id" : { "S" : "some string" }
}
```

**字串集類型 `SS` **  
字串值的集合。DynamoDB 字串集值以下列表示：  

```
{ "SS" : [ "first value", "second value", ... ] }
```
使用範例：  

```
"attributeValues" : {
   "phoneNumbers" : { "SS" : [ "+1 555 123 4567", "+1 555 234 5678" ] }
}
```

**數字類型 `N` **  
單一數值。DynamoDB 數字值以下列表示：  

```
{ "N" : 1234 }
```
使用範例：  

```
"expressionValues" : {
   ":expectedVersion" : { "N" : 1 }
}
```

**數字集類型 `NS` **  
數值的集合。DynamoDB 數字集值以下列表示：  

```
{ "NS" : [ 1, 2.3, 4 ... ] }
```
使用範例：  

```
"attributeValues" : {
   "sensorReadings" : { "NS" : [ 67.8, 12.2, 70 ] }
}
```

**二進位類型 `B` **  
二進位值。DynamoDB 二進位值以下列表示：  

```
{ "B" : "SGVsbG8sIFdvcmxkIQo=" }
```
請注意，該值實際上是字串，其中字串是二進位資料的 base64 編碼表示法。 AWS AppSync 會將此字串解碼回其二進位值，再將其傳送至 DynamoDB。 AWS AppSync 使用 RFC 2045 定義的 base64 解碼機制：忽略不在 base64 字母中的任何字元。  
使用範例：  

```
"attributeValues" : {
   "binaryMessage" : { "B" : "SGVsbG8sIFdvcmxkIQo=" }
}
```

**二進位集類型 `BS` **  
二進位值的集合。DynamoDB 二進位集值以下列表示：  

```
{ "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ] }
```
請注意，該值實際上是字串，其中字串是二進位資料的 base64 編碼表示法。 AWS AppSync 會將此字串解碼回其二進位值，再將其傳送至 DynamoDB。 AWS AppSync 使用 RFC 2045 定義的 base64 解碼機制：忽略不在 base64 字母中的任何字元。  
使用範例：  

```
"attributeValues" : {
   "binaryMessages" : { "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ] }
}
```

**布林類型 `BOOL` **  
布林值。DynamoDB 布林值以下列表示：  

```
{ "BOOL" : true }
```
請注意，只有 `true` 和 `false` 為有效值。  
使用範例：  

```
"attributeValues" : {
   "orderComplete" : { "BOOL" : false }
}
```

**清單類型 `L` **  
任何其他支援的 DynamoDB 值清單。DynamoDB 清單值以下列表示：  

```
{ "L" : [ ... ] }
```
請注意，該值是複合值，其中清單可包含任何支援的 DynamoDB 值的零或多個 （包括其他清單）。清單也可包含混合的不同類型。  
使用範例：  

```
{ "L" : [
      { "S"  : "A string value" },
      { "N"  : 1 },
      { "SS" : [ "Another string value", "Even more string values!" ] }
   ]
}
```

**映射類型 `M` **  
代表其他支援 DynamoDB 值的金鑰值對的未排序集合。DynamoDB Map 值以下列表示：  

```
{ "M" : { ... } }
```
請注意，映射可包含零或多個索引值對。金鑰必須是字串，且值可以是任何支援的 DynamoDB 值 （包括其他映射）。映射也可包含混合的不同類型。  
使用範例：  

```
{ "M" : {
      "someString" : { "S"  : "A string value" },
      "someNumber" : { "N"  : 1 },
      "stringSet"  : { "SS" : [ "Another string value", "Even more string values!" ] }
   }
}
```

**Null 類型 `NULL` **  
null 值。DynamoDB Null 值以下列表示：  

```
{ "NULL" : null }
```
使用範例：  

```
"attributeValues" : {
   "phoneNumbers" : { "NULL" : null }
}
```

如需每種類型的詳細資訊，請參閱 [DynamoDB 文件](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html)。