Configurar a complexidade de execução, a profundidade das consultas e a introspecção do GraphQL com o AWS AppSync - AWS AppSync

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

Configurar a complexidade de execução, a profundidade das consultas e a introspecção do GraphQL com o AWS AppSync

O AWS AppSync permite habilitar ou desabilitar 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

dica

Para obter mais informações sobre introspecção no GraphQL, consulte este artigo no site de base do GraphQL.

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 o AWS AppSync também oferece. Para obter mais informações, consulte Autorização.

O AWS AppSync permite habilitar ou desabilitar a introspecção na API. Para habilitar ou desabilitar a introspecção, faça o seguinte:

  1. Faça login no AWS Management Console e abra o console do AppSync.

  2. Na página APIs, escolha o nome de uma API GraphQL.

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

  4. Em Configurações da API, selecione Editar.

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

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

  6. Escolha Save (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:

GraphQL schema explorer showing query structure with types and name fields.

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

GraphQL query editor showing a validation error for undefined 'types' field in '_Schema'.

Configurar limites de profundidade de consultas

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 AWS Management Console e abra o console do AppSync.

  2. Na página APIs, escolha o nome de uma API GraphQL.

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

  4. Em Configurações da API, selecione Editar.

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

    1. Ative ou desative Habilitar profundidade de consulta.

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

  6. Escolha Save (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:

Query structure with nested layers L1, L2, L3, and L4, showing depth limit exceeded.

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

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 AWS Management Console e abra o console do AppSync.

  2. Na página APIs, escolha o nome de uma API GraphQL.

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

  4. Em Configurações da API, selecione Editar.

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

    1. Ative Habilitar contagem de resolvedores.

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

  6. Escolha Save (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.

Query with three resolvers, showing error on third resolver due to execution limit reached.