Tipos escalares no GraphQL
Um tipo de objeto do GraphQL possui um nome e campos, e esses campos podem ter subcampos. Em última análise, os campos de um tipo de objeto devem ser resolvidos em tipos escalares, que representam as folhas da consulta. Para obter mais informações sobre tipos de objetos e escalares, consulte Esquemas e tipos
Além do conjunto padrão de escalares do GraphQL, o AWS AppSync também permite usar os escalares definidos pelo serviço que começam com o prefixo AWS. O AWS AppSync não oferece suporte à criação de escalares definidos pelo usuário (personalizados). Você deve usar o padrão ou escalares da AWS.
Você não pode usar AWS como prefixo para tipos de objetos personalizados.
A seção a seguir é uma referência para digitação de esquema.
Escalares padrão
O GraphQL define os seguintes escalares padrão:
ID
-
Um identificador exclusivo para um objeto. Este escalar é serializado como
String
, mas não foi feito para ser legível por humanos. String
-
Uma sequência de caracteres UTF-8.
Int
-
Um valor inteiro entre -(231) e 231-1.
Float
-
Um valor de ponto flutuante IEEE 754.
Boolean
-
Um valor booliano,
true
oufalse
.
Escalares de AWS AppSync
AWS AppSync define os seguintes escalares:
AWSDate
-
Uma string de data ISO 8601
estendida no formato YYYY-MM-DD
. AWSTime
-
Uma string de horário ISO 8601
estendida no formato hh:mm:ss.sss
. AWSDateTime
-
Uma string de data e horário ISO 8601
estendida no formato YYYY-MM-DDThh:mm:ss.sssZ
.
nota
Os escalares AWSDate
, AWSTime
e AWSDateTime
podem incluir um deslocamento de fuso horário1970-01-01Z
, 1970-01-01-07:00
e 1970-01-01+05:30
são todos válidos para AWSDate
. O deslocamento do fuso horário deve ser Z
(UTC) ou um deslocamento em horas e minutos (e, opcionalmente, segundos). Por exemplo, ±hh:mm:ss
. O campo de segundos no deslocamento de fuso horário é considerado válido mesmo que não faça parte do padrão ISO 8601.
AWSTimestamp
-
Um valor inteiro que representa o número de segundos antes ou depois de
1970-01-01-T00:00Z
. AWSEmail
-
Um endereço de email no formato
local-part@domain-part
definido pela RFC 822. AWSJSON
-
Uma string JSON. Qualquer estrutura JSON válida é automaticamente analisada e carregada no código do resolvedor como mapas, listas ou valores escalares, em vez de strings de entrada literais. Strings sem aspas ou JSON inválido resultam em um erro de validação do GraphQL.
AWSPhone
-
Um número de telefone. Esse valor é armazenado como uma string. Os números de telefone podem conter espaços ou hífens para separar grupos de dígitos. Os números de telefone sem código de país são considerados números dos EUA/norte-americanos que aderem ao Plano de Numeração norte-americano (NANP)
. AWSURL
-
Um URL conforme definido pela RFC 1738
. Por exemplo, o https://www.amazon.com/dp/B000NZW3KC/
ou omailto:example@example.com
. Os URLs devem conter um esquema (http
,mailto
) e não podem conter duas barras (//
) na parte do caminho. AWSIPAddress
-
Um endereço IPv4 ou IPv6 válido. Os endereços IPv4 são esperados em notação com quatro pontos (
123.12.34.56
). Os endereços IPv6 são esperados em formato sem colchetes e separados por dois pontos (1a2b:3c4b::1234:4567
). Você pode incluir um sufixo CIDR opcional (123.45.67.89/16
) para indicar a máscara de sub-rede.
Exemplo de uso de esquema
O exemplo de esquema do GraphQL a seguir usa todos os escalares personalizados como um "objeto" e mostra os modelos de solicitação e resposta do resolvedor para operações básicas de colocação, obtenção e lista. Por fim, o exemplo mostra como você pode usar isso ao executar consultas e mutações.
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 }
Esta é a aparência de um modelo de solicitação para putObject
. Um putObject
usa uma operação PutItem
para criar ou atualizar um item na tabela do Amazon DynamoDB. Observe que esse trecho de código não tem uma tabela do Amazon DynamoDB configurada como fonte de dados. Ele está sendo usado apenas como exemplo:
{ "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id": $util.dynamodb.toDynamoDBJson($util.autoId()), }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }
O modelo de resposta para putObject
retorna os resultados:
$util.toJson($ctx.result)
Esta é a aparência de um modelo de solicitação para getObject
. Um getObject
usa uma operação GetItem
para retornar um conjunto de atributos para o item dada a chave primária. Observe que esse trecho de código não tem uma tabela do Amazon DynamoDB configurada como fonte de dados. Ele está sendo usado apenas como exemplo:
{ "version": "2017-02-28", "operation": "GetItem", "key": { "id": $util.dynamodb.toDynamoDBJson($ctx.args.id), } }
O modelo de resposta para getObject
retorna os resultados:
$util.toJson($ctx.result)
Esta é a aparência de um modelo de solicitação para listObjects
. Um listObjects
usa uma operação Scan
para retornar um ou mais itens e atributos. Observe que esse trecho de código não tem uma tabela do Amazon DynamoDB configurada como fonte de dados. Ele está sendo usado apenas como exemplo:
{ "version" : "2017-02-28", "operation" : "Scan", }
O modelo de resposta para listObjects
retorna os resultados:
$util.toJson($ctx.result.items)
Veja a seguir alguns exemplos de uso deste esquema com consultas do 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 } }