

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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

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

O GraphQL define os seguintes escalares padrão:

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

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

AWS AppSync define os seguintes escalares:

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

`AWSDate`  
Uma string de [data ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Calendar_dates) estendida no formato `YYYY-MM-DD`.

`AWSTime`  
Uma string de [horário ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Times) estendida no formato `hh:mm:ss.sss`.

`AWSDateTime`  
Uma string de [data e horário ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) estendida no formato `YYYY-MM-DDThh:mm:ss.sssZ`.

**nota**  
Os escalares `AWSDate`, `AWSTime` e `AWSDateTime` podem incluir um [deslocamento de fuso horário](https://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators). 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](https://tools.ietf.org/html/rfc822).

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

`AWSURL`  
Um URL conforme definido pela [RFC 1738](https://tools.ietf.org/html/rfc1738). Por exemplo, `https://www.amazon.com/dp/B000NZW3KC/` ou `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
<a name="example-schema-usage"></a>

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