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
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
ofalse
.
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 horaria1970-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/
omailto: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 } }