Solução de problemas da API do GraphQL

Soluções para problemas comuns de geração de esquema, autorização, introspecção e relação do GraphQL no construtor de API de Dados.

Perguntas comuns

O que é a API do GraphQL no DAB?

O Construtor de API de Dados gera automaticamente uma API do GraphQL para cada entidade configurada em dab-config.json. O DAB cria tipos de consulta e mutação com base nas definições de entidade e converte solicitações do GraphQL em consultas de banco de dados em runtime. Nenhuma criação de esquema é necessária para bancos de dados relacionais; O Cosmos DB requer um arquivo de esquema graphQL.

Onde está o ponto de extremidade do GraphQL?

O ponto de extremidade GraphQL está disponível em /<graphql-path>, que, por padrão, é /graphql. O caminho pode ser personalizado usando a opção --graphql.path dentro dab init ou editando dab-config.json. O IDE do GraphQL (Banana Cake Pop) está disponível no mesmo caminho quando o DAB é executado no modo de desenvolvimento.

O DAB dá suporte a assinaturas do GraphQL?

Não. Atualmente, o Construtor de API de Dados não dá suporte a assinaturas do GraphQL. Há suporte apenas para consultas e mutações. Se seu aplicativo exigir atualizações em tempo real, considere realizar polling no endpoint de consulta ou usar um serviço de eventos dedicado em conjunto com o DAB.

Problemas comuns

Esquema graphQL não gerado

Sintoma: O ponto de extremidade GraphQL não retorna tipos para uma entidade ou a entidade está ausente do esquema.

Causa: A entidade não está habilitada para GraphQL ou a configuração da entidade contém um erro que impede a geração de esquema.

Resolução: Abra dab-config.json e confirme se a entidade tem "graphql": { "enabled": true } ou que graphql não está explicitamente definida como false. Verifique os logs de inicialização do DAB em busca de erros de geração de esquema. Verifique se a tabela da source entidade existe no banco de dados e se o usuário do banco de dados tem privilégios suficientes para ler seus metadados.

Mutação retorna erro de autorização

Sintoma: A create, updateou delete mutação retorna um erro de autorização ou permissão negado.

Causa: A função usada na solicitação não tem a permissão necessária configurada para a operação de mutação na entidade.

Resolução: Verifique a permissions matriz da entidade em dab-config.json. Verifique se a função (por exemplo, authenticated) tem create, update, ou delete listada em seu actions. Use dab update para adicionar a permissão e, em seguida, reinicie o DAB.

Inspeção desabilitada em produção

Sintoma: Os clientes ou ferramentas do GraphQL recebem um erro, como Introspection is not allowed ao consultar o esquema.

Causa: O DAB desabilita a introspecção do GraphQL ao ser executado no modo de produção. Esse é o comportamento esperado e é um padrão de segurança para evitar expor o esquema a clientes não autorizados.

Resolução: Esse comportamento é por design. Para habilitar a introspecção durante o desenvolvimento, execute o DAB com --no-https-redirect ou confirme que host.mode está definido como development em dab-config.json. Não habilite a introspecção em implementações de produção.

O campo Relação retorna nulo

Sintoma: Uma consulta em uma entidade retorna null para um campo de entidade relacionado, mesmo que os dados relacionados existam no banco de dados.

Causa: A relação entre as duas entidades não está configurada dab-config.jsonou os campos de vinculação são mapeados incorretamente.

Resolução: Use dab update para adicionar a relação, especificando--relationship, --cardinality--target.entitye os campos de vinculação apropriados. Verifique se os nomes das colunas de chave estrangeira em --relationship.fields e --target.fields correspondem aos nomes reais das colunas no banco de dados. Verifique os logs do DAB para erros de geração de junções.

O nome da relação coincide com um nome de campo exposto

Sintoma: Consultas em uma entidade com uma relação retornam resultados inesperados ou um erro de esquema, especialmente quando um nome de relação corresponde a um dos próprios nomes de campo da entidade.

Causa: Atualmente, o Construtor de API de Dados não valida que nomes de relação e nomes de campo expostos são distintos na mesma entidade. Quando eles se sobrepõem, o esquema gerado é ambíguo e as consultas podem se comportar incorretamente. Essa é uma limitação conhecida rastreada no problema do GitHub nº 1937.

Resolução: Verifique se os nomes de relação não duplicam nenhum nome de campo exposto pela mesma entidade. Renomeie a relação (usando --relationship in dab update) ou o campo exposto (usando --map in dab update) para torná-los distintos.