

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tipos escalares en GraphQL
<a name="scalars"></a>

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](https://graphql.org/learn/schema/) 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
<a name="graph-ql-base-scalars"></a>

GraphQL define los siguientes escalares predeterminados:

### Lista de escalares predeterminados
<a name="graph-ql-base-scalars-list"></a>

`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
<a name="graph-ql-aws-appsync-scalars"></a>

AWS AppSync define los siguientes escalares:

### Lista de escalares de AWS AppSync
<a name="graph-ql-aws-appsync-scalars-list"></a>

`AWSDate`  
Cadena de [fecha ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Calendar_dates) extendida en el formato `YYYY-MM-DD`.

`AWSTime`  
Cadena de [hora ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Times) extendida en el formato `hh:mm:ss.sss`.

`AWSDateTime`  
Cadena de [fecha y hora ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) 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](https://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators). 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](https://tools.ietf.org/html/rfc822).

`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)](https://en.wikipedia.org/wiki/North_American_Numbering_Plan).

`AWSURL`  
URL tal como se define en el [RFC 1738](https://tools.ietf.org/html/rfc1738). 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
<a name="example-schema-usage"></a>

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
    }
}
```