AWS AppSync 中的标量类型 - AWS AppSync
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS AppSync 中的标量类型

GraphQL 对象类型具有名称和字段,必须解析为某些具体数据。这就是利用标量类型的地方:它们表示查询的树叶。AppSync 附带一组可以直接使用的标量类型,包括一组以 AWS 前缀开头的预留类型。

注意:不能将 AWS 用作自定义类型的前缀。

GraphQL 标量

ID

ID 标量类型表示唯一标识符,通常用于重新提取对象或者作为缓存的键。ID 类型以相同方式序列化为字符串;但是,定义某个字段作为 ID 表示它并非供人来阅读。

字符串

String 标量类型表示文本数据,以 UTF-8 字符序列表示。字符串类型通常由 GraphQL 用于表示自由格式的人类可读的文本。

Int

Int 标量类型表示无小数的有符号正数值。Int 可以表示 – (2 ^ 31) 和 2 ^ 31 – 1 之间的值。

Float

Float 标量类型表示有符号双精度小数值,如 IEEE 754 所指定。

Boolean

Boolean 标量类型表示 truefalse 的布尔值。

AppSync 定义的标量

AWSDate

AWSDate 标量类型表示有效的扩展 ISO 8601 日期字符串。换而言之,此标量类型接受 YYYY-MM-DD 格式的日期字符串。此标量类型也可以接受时区偏移。例如,1970-01-01Z1970-01-01-07:001970-01-01+05:30 都是有效的日期。时区偏移必须为 Z(表示 UTC 时区)或者格式 ±hh:mm:ss。时区偏移中的秒字段可以视为有效,即使它不属于 ISO 8601 标准。

AWSTime

AWSTime 标量类型表示有效的扩展 ISO 8601 时间字符串。换而言之,此标量类型接受 hh:mm:ss.sss 格式的时间字符串。秒字段后面的字段是纳秒字段。它可以接受 1 和 9 位之间的数字。秒和纳秒字段是可选字段(如果要使用纳秒字段,则必须指定秒字段)。此标量类型也可以接受时区偏移。例如,12:30Z12:30:24-07:0012:30:24.500+05:30 都是有效的时间字符串。时区偏移必须为 Z(表示 UTC 时区)或者格式 ±hh:mm:ss。时区偏移中的秒字段可以视为有效,即使它不属于 ISO 8601 标准。

AWSDateTime

AWSDateTime 标量类型表示有效的扩展 ISO 8601 日期时间字符串。换而言之,此标量类型接受 YYYY-MM-DDThh:mm:ss.sssZ 格式的日期时间字符串。秒字段后面的字段是纳秒字段。它可以接受 1 和 9 位之间的数字。秒和纳秒字段是可选字段(如果要使用纳秒字段,则必须指定秒字段)。时区偏移对于此标量是必需的。时区偏移必须为 Z(表示 UTC 时区)或者格式 ±hh:mm:ss。时区偏移中的秒字段可以视为有效,即使它不属于 ISO 8601 标准。

AWSTimestamp

AWSTimestamp 标量类型表示自 1970-01-01T00:00Z 以来经过的秒数。时间戳序列化和反序列化为数字。也可以接受负值,这表示在 1970-01-01T00:00Z 之前的秒数。

AWSEmail

AWSEmail 标量类型表示符合 RFC 822 的电子邮件地址字符串。例如,username@example.com 是有效的电子邮件地址。

AWSJSON

AWSJSON 标量类型表示符合 RFC 8259 的 JSON 字符串。

类似于 {"upvotes": 10} 的映射,类似于 [1,2,3] 的列表,以及类似于 "AWSJSON example string"1true 的标量值,均可接受作为有效的 JSON。它们将自动解析并加载到解析程序映射模板中,作为映射、列表或标量值,而不是文本输入字符串。无效的 JSON 字符串,如 {a: 1}{‘a’: 1}未加引号的字符串将引发 GraphQL 验证错误。

AWSURL

AWSURL 标量类型表示有效的 URL 字符串。该 URL 可能使用任何方案,也可以是本地 URL(例如:<https://localhost/>)。没有方案的 URL 被视为无效。包含双斜杠的 URL 也被视为无效。

AWSPhone

AWSPhone 标量类型表示有效的电话号码。电话号码序列化和反序列化为字符串。提供的电话号码可以使用空格分隔或者使用连字符。在开头的数字可以指定国家/地区代码,但此项对于美国电话号码并非必需。

AWSIPAddress

AWSIPAddress 标量类型代表有效的 IPv4IPv6 地址字符串。

示例架构用法

如果您不熟悉在 AWS AppSync 中创建 GraphQL API,或者不熟悉通过映射模板连接解析程序,在继续之前,请首先查看设计 GraphQL API连接数据源和解析程序

下面我们演示一种示例 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 使用以下请求模板:

{ "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 使用以下请求模板:

{ "version": "2017-02-28", "operation": "GetItem", "key": { "id": $util.dynamodb.toDynamoDBJson($ctx.args.id), } }

getObject响应模板将是:

$util.toJson($ctx.result)

listObjects 使用以下请求模板:

{ "version" : "2017-02-28", "operation" : "Scan", }

listObjects响应模板将是:

$util.toJson($ctx.result.items)

以下为将此架构用于 GraphQL 查询的一些示例:

mutation CreateObject { putObject(email: "nadiabailey@amazon.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.co.in" phoneno: "+91 704-011-2342" 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 } }