Partilhar via


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:

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 e backend 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

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.

  1. No portal do Azure, navegue até sua instância de Gerenciamento de API.

  2. No menu à esquerda, selecione APIs e, em seguida, o nome da sua API GraphQL.

  3. Na guia Esquema, revise o esquema para um campo em um tipo de objeto no qual você deseja configurar um resolvedor.

    1. Selecione um campo e, na margem esquerda, passe o ponteiro do mouse.

    2. Selecione + Adicionar resolvedor.

      Captura de tela da adição de um resolvedor de um campo no esquema GraphQL no portal.

  4. Na página Criar resolvedor:

    1. Atualize a propriedade Name se desejar, opcionalmente insira uma Descrição e confirme ou atualize as seleções Tipo e Campo .
    2. Selecione a fonte de dados do resolvedor. Para este exemplo, selecione HTTP API.
  5. No editor de políticas do Resolvedor, atualize a http-data-source política com elementos filho para o seu cenário.

    1. Atualize o elemento necessário http-request com políticas para transformar a operação GraphQL em uma solicitação HTTP.

    2. Opcionalmente, adicione um http-response elemento e adicione políticas filho para transformar a resposta HTTP do resolvedor. Se o http-response elemento não for especificado, a resposta será retornada como uma cadeia de caracteres bruta.

    3. Selecione Criar.

      Captura de tela do editor de políticas do resolvedor no portal.

    O resolvedor é anexado ao campo e aparece na guia Resolvedores .

    Captura de tela da lista de resolvedores para a API GraphQL no portal.

Gerenciar resolvedores

Liste e gerencie os resolvedores de uma API GraphQL na guia Resolvedores da API.

Captura de tela do gerenciamento de resolvedores para a API GraphQL no portal.

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.

    Captura de ecrã da edição de um resolvedor no portal.

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: