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á.
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:
-
Faça login no AWS Management Console e abra o console do AppSync
. -
Na página APIs, escolha o nome de uma API GraphQL.
-
Na página inicial da sua API, no painel de navegação, selecione Configurações.
-
Em Configurações da API, selecione Editar.
-
Em Consultas de introspecção, faça o seguinte:
-
Ative ou desative Habilitar consultas de introspecção.
-
-
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:

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

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:
-
Faça login no AWS Management Console e abra o console do AppSync
. -
Na página APIs, escolha o nome de uma API GraphQL.
-
Na página inicial da sua API, no painel de navegação, selecione Configurações.
-
Em Configurações da API, selecione Editar.
-
Em Profundidade da consulta, faça o seguinte:
-
Ative ou desative Habilitar profundidade de consulta.
-
Em Profundidade máxima, defina o limite de profundidade. Pode ser entre
1
e75
.
-
-
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:

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:
-
Faça login no AWS Management Console e abra o console do AppSync
. -
Na página APIs, escolha o nome de uma API GraphQL.
-
Na página inicial da sua API, no painel de navegação, selecione Configurações.
-
Em Configurações da API, selecione Editar.
-
Em Limite de contagem de resolvedores, faça o seguinte:
-
Ative Habilitar contagem de resolvedores.
-
Em Contagem máxima de resolvedores, defina o limite de contagem. Pode ser entre
1
e10000
.
-
-
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.
