

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á.

# Configurando a complexidade de execução, a profundidade da consulta e a introspecção do GraphQL com AWS AppSync
<a name="configuration-limits"></a>

AWS AppSync permite ativar ou desativar os recursos de introspecção e definir limites para a quantidade de níveis e resolvedores aninhados em uma única consulta.

## Usar o recurso de introspecção
<a name="configuration-limits-introspection"></a>

**dica**  
Para obter mais informações sobre introspecção no GraphQL, consulte este artigo no [site de base do GraphQL](https://graphql.org/learn/introspection/).

Por padrão, o GraphQL permite utilizar a introspecção para consultar o próprio esquema e descobrir tipos, campos, consultas, mutações, assinaturas, etc. É um recurso importante para aprender como os dados são moldados e processados pelo serviço GraphQL. No entanto, há alguns fatores a serem considerados ao lidar com introspecção. É possível ter um caso de uso que se beneficiaria com a desativação da introspecção, como um caso em que os nomes dos campos podem ser confidenciais ou ocultos ou em que o esquema completo da API deve ficar não documentado para os consumidores. Nesses casos, a publicação de dados do esquema por meio de introspecção pode ocasionar o vazamento de dados intencionalmente privados.

Para evitar que isso aconteça, é possível desabilitar a introspecção. Isso evitará que pessoas não autorizadas usem campos de introspecção no esquema. No entanto, é importante observar que a introspecção é útil para que as equipes de desenvolvimento aprendam como os dados nos serviços são processados. Internamente, pode ser útil manter a introspecção habilitada e, ao mesmo tempo, desabilitá-la no código de produção como uma camada extra de segurança. Outra maneira de lidar com isso é adicionar um método de autorização, que AWS AppSync também fornece. Para ter mais informações, consulte [ authorization](https://docs.aws.amazon.com/appsync/latest/devguide/security-authz.html).

AWS AppSync permite que você ative ou desative a introspecção no nível da API. Para habilitar ou desabilitar a introspecção, faça o seguinte:

1. Faça login no Console de gerenciamento da AWS e abra o [AppSyncconsole](https://console.aws.amazon.com/appsync/).

1. Na **APIs**página, escolha o nome de uma API do GraphQL.

1. Na página inicial da sua API, no painel de navegação, selecione **Configurações**.

1. Em **Configurações da API**, selecione **Editar**.

1. Em **Consultas de introspecção**, faça o seguinte:

   1. Ative ou desative **Habilitar consultas de introspecção**.

1. Escolha **Salvar**.

Quando a introspecção estiver habilitada (o comportamento padrão), o uso do sistema de introspecção funcionará normalmente. Por exemplo, a imagem abaixo mostra um campo `__schema` processando todos os tipos disponíveis no esquema:

![Editor de consultas GraphQL exibido MyQuery com introspecção de esquema retornando Query, String, Int, Schema, Type e types. TypeKind](http://docs.aws.amazon.com/pt_br/appsync/latest/devguide/images/introspection-enabled.png)


Ao desabilitar esse recurso, um erro de validação aparecerá na resposta:

![Editor de consultas GraphQL mostrando erro de validação para o campo de tipos indefinidos no esquema.](http://docs.aws.amazon.com/pt_br/appsync/latest/devguide/images/introspection-disabled.png)


## Configurar limites de profundidade de consultas
<a name="configuration-limits-depth"></a>

Há momentos em que convém ter um controle mais granular sobre como a API funciona durante uma operação. Um desses controles é adicionar um limite à quantidade de níveis aninhados que uma consulta pode processar. Por padrão, as consultas podem processar uma quantidade ilimitada de níveis aninhados. Limitar as consultas a uma quantidade específica de níveis aninhados tem implicações potenciais para a performance e a flexibilidade do projeto. Considere a seguinte consulta:

```
query MyQuery {
  L1: nextLayer {
    L2: nextLayer {
      L3: nextLayer {
        L4: value
      }
    }
  }
}
```

O projeto pode exigir a limitação de consultas a `L1` ou `L2` para alguma finalidade. Por padrão, toda a consulta de `L1` a `L4` é processada sem nenhuma forma de controlar isso. Ao definir um limite, é possível impedir que as consultas acessem qualquer item além do nível especificado.

Para adicionar um limite de profundidade de consultas, faça o seguinte:

1. Faça login no Console de gerenciamento da AWS e abra o [AppSyncconsole](https://console.aws.amazon.com/appsync/).

1. Na **APIs**página, escolha o nome de uma API do GraphQL.

1. Na página inicial da sua API, no painel de navegação, selecione **Configurações**.

1. Em **Configurações da API**, selecione **Editar**.

1. Em **Profundidade da consulta**, faça o seguinte:

   1. Ative ou desative **Habilitar profundidade de consulta**.

   1. Em **Profundidade máxima**, defina o limite de profundidade. Pode ser entre `1` e `75`.

1. Escolha **Salvar**.

Quando um limite for definido, ultrapassar o limite máximo vai gerar um erro `QueryDepthLimitReached`. Por exemplo, a imagem abaixo mostra uma consulta com um limite de profundidade de `2` que ultrapassa o limite até o terceiro (`L3`) e o quarto (`L4`) níveis:

![Erro de limite de profundidade de consulta mostrando uma estrutura de consulta aninhada excedendo o limite configurado de 2.](http://docs.aws.amazon.com/pt_br/appsync/latest/devguide/images/query-depth-limit.jpg)


Observe que os campos ainda podem ser marcados como anuláveis ou não anuláveis no esquema. Se um campo não anulável receber um erro `QueryDepthLimitReached`, esse erro será lançado para o primeiro campo principal anulável. 

## Configurar limites de contagem de resolvedores
<a name="configuration-limits-resolver-count"></a>

Também é possível controlar quantos resolvedores cada consulta pode processar. Assim como a profundidade da consulta, é possível definir um limite para esse valor. Faça a seguinte consulta que contém três resolvedores:

```
query MyQuery {
  resolver1: resolver
  resolver2: resolver
  resolver3: resolver
}
```

Por padrão, cada consulta pode processar até 10 mil resolvedores. No exemplo acima, `resolver1`, `resolver2` e `resolver3` serão processados. No entanto, o projeto pode exigir a limitação de cada consulta ao tratamento de um ou dois resolvedores no total. Ao definir um limite, é possível fazer com que a consulta não processe nenhum resolvedor além de um número específico, como os primeiros (`resolver1`) ou os segundos (`resolver2`) resolvedores.

Para adicionar um limite de contagem de resolvedores, faça o seguinte:

1. Faça login no Console de gerenciamento da AWS e abra o [AppSyncconsole](https://console.aws.amazon.com/appsync/).

1. Na **APIs**página, escolha o nome de uma API do GraphQL.

1. Na página inicial da sua API, no painel de navegação, selecione **Configurações**.

1. Em **Configurações da API**, selecione **Editar**.

1. Em **Limite de contagem de resolvedores**, faça o seguinte:

   1. Ative **Habilitar contagem de resolvedores**.

   1. Em **Contagem máxima de resolvedores**, defina o limite de contagem. Pode ser entre `1` e `10000`.

1. Escolha **Salvar**.

Assim como o limite de profundidade da consulta, exceder o limite configurado de resolvedores faz com que a consulta termine com um erro `ResolverExecutionLimitReached` em resolvedores adicionais. Na imagem abaixo, uma consulta com um limite de contagem de resolvedores de *2* tenta processar três resolvedores. Por causa do limite, o terceiro resolvedor gera um erro e não é executado.

![Consulta GraphQL com três resolvedores mostrando erro quando o limite de contagem de resolvedores de dois é excedido.](http://docs.aws.amazon.com/pt_br/appsync/latest/devguide/images/resolver-count-limit.jpg)
