类型系统(请求映射) - Amazon AppSync GraphQL
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

类型系统(请求映射)

在使用 Amazon AppSync DynamoDB 解析器调用 DynamoDB 表时,Amazon AppSync 需要知道该调用中使用的每个值的类型。这是因为 DynamoDB 支持的基元类型比 GraphQL 或 JSON 多(例如集和二进制数据)。Amazon在 GraphQL 和 DynamoDB 之间转换时,AppSync 需要一些提示,否则,它必须对如何在表中设置数据结构做出一些假设。

有关 DynamoDB 数据类型的更多信息,请参阅 DynamoDB 数据类型描述符数据类型文档。

DynamoDB 值由包含单个键值对的 JSON 对象表示。键指定 DynamoDB 类型,值指定值本身。在下面的示例中,键 S 表示值是一个字符串,值 identifier 是字符串值本身。

{ "S" : "identifier" }

请注意,JSON 对象不能具有多于一个键值对。如果指定了多个键值对,将不会解析请求映射文档。

DynamoDB 值用于请求映射文档中您需要指定值的任何位置。您需要这样做的一些地方包括:keyattributeValue 部分以及表达式部分的 expressionValues 部分。在以下示例中,DynamoDB 字符串值 identifier 分配给 key 部分中的 id 字段(可能位于 GetItem 请求映射文档中)。

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

支持的类型

Amazon 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 编码表示形式。AmazonAppSync 将该字符串解码回二进制值,然后再将其发送到 DynamoDB。AmazonAppSync 使用 RFC 2045 定义的 Base64 解码方案:忽略没有位于 Base64 字母表中的任何字符。

示例用法如下:

"attributeValues" : { "binaryMessage" : { "B" : "SGVsbG8sIFdvcmxkIQo=" } }
二进制集类型 BS

一组二进制值。DynamoDB 二进制集值表示为:

{ "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ] }

请注意,该值实际上是一个字符串,其中,字符串是二进制数据的 Base64 编码表示形式。AmazonAppSync 将该字符串解码回二进制值,然后再将其发送到 DynamoDB。AmazonAppSync 使用 RFC 2045 定义的 Base64 解码方案:忽略没有位于 Base64 字母表中的任何字符。

示例用法如下:

"attributeValues" : { "binaryMessages" : { "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ] } }
布尔值类型 BOOL

布尔值。DynamoDB 布尔值表示为:

{ "BOOL" : true }

请注意,只有 truefalse 是有效值。

示例用法如下:

"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 文档