本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
中的标量类型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
。
AWSDate
AWSTime
、和AWSDateTime
标量可以选择包含时区偏移量1970-01-01Z
1970-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 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 必须包含架构 (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 } }