Tipos escalares en GraphQL - AWS AppSync

Tipos escalares en GraphQL

Un tipo de objeto de GraphQL tiene un nombre y campos, y esos campos pueden tener subcampos. En última instancia, los campos de un tipo de objeto deben resolverse en tipos escalares, que representan las hojas de la consulta. Para obtener más información sobre los tipos de objetos y los escalares, consulte Schemas and types en el sitio web de GraphQL.

Además del conjunto predeterminado de escalares de GraphQL, AWS AppSync también le permite usar escalares definidos por el servicio que comienzan con el prefijo AWS. AWS AppSync no admite la creación de escalares definidos por el usuario (personalizados). Debe usar los escalares predeterminados o de AWS.

No puede utilizar AWS como prefijo para tipos de objetos personalizados.

La siguiente sección es una referencia para de los tipos de esquemas.

Escalares predeterminados

GraphQL define los siguientes escalares predeterminados:

ID

Identificador único de un objeto. Este escalar está serializado como una String pero no está destinado a ser legible por humanos.

String

Secuencia de caracteres UTF-8.

Int

Valor entero entre -(231) y 231-1.

Float

Valor de coma flotante según la norma IEEE 754.

Boolean

Un valor booleano, ya sea true o false.

Escalares AWS AppSync

AWS AppSync define los siguientes escalares:

AWSDate

Cadena de fecha ISO 8601 extendida en el formato YYYY-MM-DD.

AWSTime

Cadena de hora ISO 8601 extendida en el formato hh:mm:ss.sss.

AWSDateTime

Cadena de fecha y hora ISO 8601 extendida en el formato YYYY-MM-DDThh:mm:ss.sssZ.

nota

Los escalares AWSDate, AWSTime y AWSDateTime pueden incluir opcionalmente un desfase de zona horaria. Por ejemplo, los valores 1970-01-01Z, 1970-01-01-07:00 y 1970-01-01+05:30 son todos válidos para AWSDate. El desfase de zona horaria debe ser Z (UTC) o un desfase en horas y minutos (y, opcionalmente, en segundos). Por ejemplo, ±hh:mm:ss. El campo de segundos del desfase horario se considera válido aunque no forme parte de la norma ISO 8601.

AWSTimestamp

Valor entero que representa el número de segundos anteriores o posteriores a 1970-01-01-T00:00Z.

AWSEmail

Dirección de correo electrónico con el formato local-part@domain-part definido en el RFC 822.

AWSJSON

Cadena JSON. Cualquier construcción JSON válida se analiza y carga automáticamente en el código de resolución como mapas, listas o valores escalares en lugar de como cadenas de entrada de literales. Las cadenas sin comillas o un JSON no válido provocan un error de validación de GraphQL.

AWSPhone

Número de teléfono. Este valor se almacena como una cadena. Los números de teléfono pueden contener espacios o guiones para separar grupos de dígitos. Se supone que los números de teléfono sin código de país son números de Estados Unidos o Norteamérica que cumplen el plan de numeración de Norteamérica (NANP).

AWSURL

URL tal como se define en el RFC 1738. Por ejemplo, https://www.amazon.com/dp/B000NZW3KC/ o mailto:example@example.com. Las direcciones URL deben contener un esquema (http, mailto) y no pueden contener dos barras diagonales (//) en la parte de la ruta.

AWSIPAddress

Dirección IPv4 o IPv6 válida. Las direcciones IPv4 se esperan en la notación de puntos cuádruples (123.12.34.56). Se espera que las direcciones IPv6 estén en un formato sin corchetes y separadas por dos puntos (1a2b:3c4b::1234:4567). Puede incluir un sufijo CIDR opcional (123.45.67.89/16) para indicar la máscara de subred.

Ejemplo de uso de esquema

En el siguiente ejemplo de esquema, GraphQL utiliza todos los escalares personalizados como un "objeto" y muestra las plantillas de solicitud y respuesta del solucionador para las operaciones básicas put, get y list. Por último, en el ejemplo se muestra cómo se puede utilizar esta información al ejecutar consultas y mutaciones.

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 }

Este es el aspecto que podría tener una plantilla de solicitud de putObject. Un putObject utiliza una operación PutItem para crear o actualizar un elemento en la tabla de Amazon DynamoDB. Tenga en cuenta que este fragmento de código no tiene una tabla de Amazon DynamoDB configurada como origen de datos. Se utiliza únicamente como ejemplo:

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

La plantilla de respuesta para putObject devuelve los resultados:

$util.toJson($ctx.result)

Este es el aspecto que podría tener una plantilla de solicitud de getObject. Un getObject utiliza una operación GetItem para devolver un conjunto de atributos del elemento dada la clave principal. Tenga en cuenta que este fragmento de código no tiene una tabla de Amazon DynamoDB configurada como origen de datos. Se utiliza únicamente como ejemplo:

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

La plantilla de respuesta para getObject devuelve los resultados:

$util.toJson($ctx.result)

Este es el aspecto que podría tener una plantilla de solicitud de listObjects. Un listObjects utiliza una operación Scan para devolver uno o más elementos y atributos. Tenga en cuenta que este fragmento de código no tiene una tabla de Amazon DynamoDB configurada como origen de datos. Se utiliza únicamente como ejemplo:

{ "version" : "2017-02-28", "operation" : "Scan", }

La plantilla de respuesta para listObjects devuelve los resultados:

$util.toJson($ctx.result.items)

Estos son algunos ejemplos de uso de este esquema con consultas de 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 } }