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

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

中的标量类型Amazon AppSync

GraphQL 对象类型有名称和字段,这些字段可以有子字段。最终,对象类型的字段必须解析为标量类型,标量类型代表查询的叶子。有关对象类型和标量的更多信息,请参阅 GraphQL 网站上的架构和类型

除了默认的 GraphQL 标量集外,还Amazon AppSync包括一组以Amazon前缀开头的保留标量。 Amazon AppSync不支持自定义标量。这意味着您不能使用Amazon作为自定义对象类型的前缀。

以下部分是架构类型的参考资料。如果您尚未阅读以下部分,我们建议您仔细阅读以下部分:

这将为有效使用标量类型提供急需的上下文。

默认标量

GraphQL 定义了以下默认标量:

ID

对象的唯一标识符。这个标量是像 a 一样序列化的,String但并不意味着人类可读。

String

UTF-8 字符序列。

Int

介于-(2 31) 和 2 31 -1 之间的整数值。

Float

一个 IEEE 754 浮点值。

Boolean

一个布尔值,要true么是false

Amazon AppSync标量

Amazon AppSync定义了以下标量:

AWSDate

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

AWSTime

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

AWSDateTime

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

注意

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

AWSTimestamp

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

AWSEmail

采用 RFC 822local-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 必须包含架构 (http,mailto),并且路径部分不能包含两个正斜杠 (//)。

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样子。AputObject 使用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样子。AgetObject 使用GetItem操作返回具有主键的项目的一组属性。请注意,此代码段没有配置的 Amazon DynamoDB 表作为数据源。这仅用作示例:

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

的响应模板getObject返回结果:

$util.toJson($ctx.result)

以下是请求模板的listObjects样子。AlistObjects 使用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 } }