Configurar um resolvedor GraphQL
APLICA-SE A: Todas as camadas de gerenciamento de API
Configure um resolvedor para recuperar ou definir dados para um campo GraphQL em um tipo de objeto especificado em um esquema GraphQL. O esquema deve ser importado para o Gerenciamento de API como uma API GraphQL.
Nota
Atualmente, esse recurso não está disponível em espaços de trabalho.
Atualmente, o Gerenciamento de API suporta resolvedores que podem acessar as seguintes fontes de dados:
- Fonte de dados baseada em HTTP (REST ou SOAP API)
- Banco de dados do Cosmos DB
- Base de dados SQL do Azure
Aspetos importantes
- Um resolvedor é um recurso que contém uma definição de política que é invocada somente quando um tipo de objeto e um campo correspondentes no esquema são executados.
- Cada resolvedor resolve dados para um único campo. Para resolver dados para vários campos, configure um resolvedor separado para cada um.
- As políticas com escopo de resolvedor são avaliadas após qualquer
inbound
ebackend
políticas no pipeline de execução de políticas. Eles não herdam políticas de outros escopos. Para obter mais informações, consulte Políticas no gerenciamento de API. - Você pode configurar políticas com escopo de API para uma API GraphQL, independentemente das políticas com escopo de resolvedor. Por exemplo, adicione uma política validate-graphql-request ao
inbound
escopo para validar a solicitação antes que o resolvedor seja invocado. Configure políticas com escopo de API na guia Políticas de API para a API. - Para suportar tipos de interface e união em resolvedores GraphQL, a resposta de back-end já deve conter o
__typename
campo ou ser alterada usando a política set-body para incluir__typename
.
Pré-requisitos
- Uma instância de gerenciamento de API existente. Crie um, caso ainda não o tenha feito.
- Importe uma API GraphQL sintética ou de passagem.
Criar um resolvedor
As etapas a seguir criam um resolvedor usando uma fonte de dados baseada em HTTP. As etapas gerais são semelhantes para qualquer resolvedor que use uma fonte de dados suportada.
No portal do Azure, navegue até sua instância de Gerenciamento de API.
No menu à esquerda, selecione APIs e, em seguida, o nome da sua API GraphQL.
Na guia Esquema, revise o esquema para um campo em um tipo de objeto no qual você deseja configurar um resolvedor.
Selecione um campo e, na margem esquerda, passe o ponteiro do mouse.
Selecione + Adicionar resolvedor.
Na página Criar resolvedor:
- Atualize a propriedade Name se desejar, opcionalmente insira uma Descrição e confirme ou atualize as seleções Tipo e Campo .
- Selecione a fonte de dados do resolvedor. Para este exemplo, selecione HTTP API.
No editor de políticas do Resolvedor, atualize a
http-data-source
política com elementos filho para o seu cenário.Atualize o elemento necessário
http-request
com políticas para transformar a operação GraphQL em uma solicitação HTTP.Opcionalmente, adicione um
http-response
elemento e adicione políticas filho para transformar a resposta HTTP do resolvedor. Se ohttp-response
elemento não for especificado, a resposta será retornada como uma cadeia de caracteres bruta.Selecione Criar.
O resolvedor é anexado ao campo e aparece na guia Resolvedores .
Gerenciar resolvedores
Liste e gerencie os resolvedores de uma API GraphQL na guia Resolvedores da API.
Na guia Resolvedores:
A coluna Vinculado indica se o resolvedor está configurado para um campo que está atualmente no esquema GraphQL. Se um resolvedor não estiver vinculado, ele não poderá ser invocado.
No menu de contexto (...) de um resolvedor, localize comandos para Clonar, Editar ou Excluir um resolvedor. Clone um resolvedor listado para criar rapidamente um resolvedor semelhante que tenha como alvo um tipo e campo diferentes.
Você pode criar um novo resolvedor selecionando + Criar.
Editar e testar um resolvedor
Quando você edita um único resolvedor, a página Editar resolvedor é aberta. Pode:
Atualize a política do resolvedor e, opcionalmente, a fonte de dados. A alteração da fonte de dados substitui a política de resolução atual.
Altere o tipo e o campo a que o resolvedor se destina.
Teste e depure a configuração do resolvedor. Ao editar a política do resolvedor, selecione Executar teste para verificar a saída da fonte de dados, que pode ser validada em relação ao esquema. Se ocorrerem erros, a resposta inclui informações de solução de problemas.
Contexto do GraphQL
- O contexto da solicitação e resposta do resolvedor (se especificado) difere do contexto da solicitação de API do gateway original:
context.GraphQL
As propriedades são definidas como os argumentos (Arguments
) e o objeto pai (Parent
) para a execução atual do resolvedor.- O contexto da solicitação contém argumentos que são passados na consulta GraphQL como seu corpo.
- O contexto de resposta é a resposta da chamada independente feita pelo resolvedor, não o contexto para a resposta completa para a solicitação de gateway.
A
context
variável que é passada pelo pipeline de solicitação e resposta é aumentada com o contexto GraphQL quando usada com um resolvedor GraphQL.
contexto. GraphQL.pai
O context.GraphQL.parent
é definido como o objeto pai para a execução atual do resolvedor. Considere o seguinte esquema parcial:
type Comment {
id: ID!
owner: string!
content: string!
}
type Blog {
id: ID!
title: string!
content: string!
comments: [Comment]!
comment(id: ID!): Comment
}
type Query {
getBlog(): [Blog]!
getBlog(id: ID!): Blog
}
Além disso, considere uma consulta GraphQL para todas as informações de um blog específico:
query {
getBlog(id: 1) {
title
content
comments {
id
owner
content
}
}
}
Se você definir um resolvedor para o comments
campo no Blog
tipo, você vai querer entender qual ID de blog usar. Você pode obter o ID do blog usando context.GraphQL.Parent["id"]
como mostrado no seguinte resolvedor:
<http-data-source>
<http-request>
<set-method>GET</set-method>
<set-url>@($"https://data.contoso.com/api/blog/{context.GraphQL.Parent["id"]}")
</set-url>
</http-request>
</http-data-source>
contexto. GraphQL.Argumentos
Os argumentos para uma consulta GraphQL parametrizada são adicionados ao context.GraphQL.Arguments
. Por exemplo, considere as duas consultas a seguir:
query($id: Int) {
getComment(id: $id) {
content
}
}
query {
getComment(id: 2) {
content
}
}
Essas consultas são duas maneiras de chamar o getComment
resolvedor. O GraphQL envia a seguinte carga JSON útil:
{
"query": "query($id: Int) { getComment(id: $id) { content } }",
"variables": { "id": 2 }
}
{
"query": "query { getComment(id: 2) { content } }"
}
Você pode definir o resolvedor da seguinte maneira:
<http-data-source>
<http-request>
<set-method>GET</set-method>
<set-url>@($"https://data.contoso.com/api/comment/{context.GraphQL.Arguments["id"]}")</set-url>
</http-request>
</http-data-source>
Próximos passos
Para obter mais exemplos de resolvedores, consulte: