Tipos escalares no GraphQL - AWS AppSync

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 no site do GraphQL.

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 ou false.

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ário. Por exemplo, os valores 1970-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 o mailto: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 } }