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

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

Amazon AppSync 中的标量类型

GraphQL 对象类型具有名称和字段,并且这些字段可以具有子字段。最终,对象类型的字段必须解析为标量类型,这些类型表示查询的叶节点。有关对象类型和标量的更多信息,请参阅 GraphQL 网站上的 Schemas and types

除了默认 GraphQL 标量集以外,Amazon AppSync 还允许您使用以 Amazon 前缀开头的服务定义的标量。Amazon AppSync 不支持创建用户定义的(自定义)标量。您必须使用默认标量或 Amazon 标量。

您不能将 Amazon 作为自定义对象类型的前缀。

下一节是架构类型参考。

默认标量

GraphQL 定义了以下默认标量:

ID

对象的唯一标识符。该标量像 String 一样序列化,但并不意味着用户可读。

String

UTF-8 字符序列。

Int

-(231) 和 231-1 之间的整数值。

Float

IEEE 754 浮点值。

Boolean

一个布尔值,可以是 truefalse

Amazon AppSync 标量

Amazon AppSync 定义了以下标量:

AWSDate

格式为 YYYY-MM-DD 的扩展 ISO 8601 日期字符串。

AWSTime

格式为 hh:mm:ss.sss 的扩展 ISO 8601 时间字符串。

AWSDateTime

格式为 YYYY-MM-DDThh:mm:ss.sssZ 的扩展 ISO 8601 日期和时间字符串。

注意

AWSDateAWSTimeAWSDateTime 标量可以选择包含时区偏移。例如,值 1970-01-01Z1970-01-01-07:001970-01-01+05:30 对于 AWSDate 均有效。时区偏移必须是 Z (UTC) 或以小时和分钟以及秒(可选)为单位的偏移。例如,±hh:mm:ss。时区偏移中的秒字段被认为有效,即使它不是 ISO 8601 标准的一部分。

AWSTimestamp

表示 1970-01-01-T00:00Z 之前或之后的秒数的整数值。

AWSEmail

采用 RFC 822 定义的格式 local-part@domain-part 的电子邮件地址。

AWSJSON

JSON 字符串。任何有效的 JSON 构造自动作为映射、列表或标量值解析并加载到解析器代码中,而不是作为文本输入字符串。不带引号的字符串或其他无效的 JSON 将导致 GraphQL 验证错误。

AWSPhone

电话号码。该值存储为字符串。电话号码可以包含空格或连字符以分隔数字组。没有国家/地区代码的电话号码假定为符合北美编号计划 (NANP) 的美国/北美号码。

AWSURL

RFC 1738 定义的 URL。例如,https://www.amazon.com/dp/B000NZW3KC/mailto:example@example.com。URL 必须包含模式(httpmailto),并且不能在路径部分中包含两个正斜杠 (//)。

AWSIPAddress

有效的 IPv4 或 IPv6 地址。IPv4 地址应采用四点表示法 (123.12.34.56)。IPv6 地址应采用以冒号分隔的无括号格式 (1a2b:3c4b::1234:4567)。您可以包含可选的 CIDR 后缀 (123.45.67.89/16) 以指示子网掩码。

架构用法示例

以下示例 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 } }