

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

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

使用 D AWS AppSync ynamoDB 解析器调用您的 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 映射值表示为：  

```
{ "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)。