Partilhar via


Fonte de dados HTTP para um resolvedor

APLICA-SE A: Todas as camadas de gerenciamento de API

A http-data-source política de resolvedor configura a solicitação HTTP e, opcionalmente, a resposta HTTP para resolver dados para um tipo de objeto e campo em um esquema GraphQL. O esquema deve ser importado para o Gerenciamento de API como uma API GraphQL.

Nota

Defina os elementos da política e os elementos filho na ordem fornecida na declaração de política. Saiba mais sobre como definir ou editar políticas de Gerenciamento de API.

Declaração de política

<http-data-source> 
    <http-request>
        <get-authorization-context>...get-authorization-context policy configuration...</get-authorization-context>
        <set-backend-service>...set-backend-service policy configuration...</set-backend-service>
        <set-method>...set-method policy configuration...</set-method> 
        <set-url>URL</set-url>
        <include-fragment>...include-fragment policy configuration...</include-fragment>
        <set-header>...set-header policy configuration...</set-header>
        <set-body>...set-body policy configuration...</set-body>
        <authentication-certificate>...authentication-certificate policy configuration...</authentication-certificate>  
    </http-request> 
    <backend>
        <forward-request>...forward-request policy configuration...</forward-request>
    <http-response>
        <set-body>...set-body policy configuration...</set-body>
        <xml-to-json>...xml-to-json policy configuration...</xml-to-json>
        <find-and-replace>...find-and-replace policy configuration...</find-and-replace>
        <publish-event>...publish-event policy configuration...</publish-event>
        <include-fragment>...include-fragment policy configuration...</include-fragment>
    </http-response>
</http-data-source> 

Elementos

Nome Descrição Obrigatório
http-pedido Especifica uma URL e políticas filho para configurar a solicitação HTTP do resolvedor. Sim
back-end Opcionalmente, encaminha a solicitação HTTP do resolvedor para um serviço de back-end, se especificado. Não
http-resposta Opcionalmente, especifica políticas filho para configurar a resposta HTTP do resolvedor. Se não for especificado, a resposta será retornada como uma cadeia de caracteres bruta. Não

Elementos de solicitação HTTP

Nota

Exceto quando indicado, cada elemento filho pode ser especificado no máximo uma vez. Especifique os elementos na ordem listada.

Elemento Description Obrigatório
get-authorization-context Obtém um contexto de autorização para a solicitação HTTP do resolvedor. Não
set-backend-service Redireciona a solicitação HTTP do resolvedor para o back-end especificado. Não
incluir-fragmento Insere um fragmento de política na definição de política. Se houver vários fragmentos, adicione elementos adicionais include-fragment . Não
método-conjunto Define o método da solicitação HTTP do resolvedor. Sim
set-url Define a URL da solicitação HTTP do resolvedor. Sim
set-header Define um cabeçalho na solicitação HTTP do resolvedor. Se houver vários cabeçalhos, adicione elementos adicionais header . Não
corpo-conjunto Define o corpo na solicitação HTTP do resolvedor. Não
certificado-autenticação Autentica usando um certificado de cliente na solicitação HTTP do resolvedor. Não

elemento de back-end

Elemento Description Obrigatório
encaminhar-pedido Encaminha a solicitação HTTP do resolvedor para um serviço de back-end configurado. Não

Elementos de resposta HTTP

Nota

Exceto quando indicado, cada elemento filho pode ser especificado no máximo uma vez. Especifique os elementos na ordem listada.

Nome Descrição Obrigatório
corpo-conjunto Define o corpo na resposta HTTP do resolvedor. Não
xml-para-json Transforma a resposta HTTP do resolvedor de XML em JSON. Não
localizar-e-substituir Localiza uma substring na resposta HTTP do resolvedor e a substitui por uma substring diferente. Não
publicar-evento Publica um evento para uma ou mais assinaturas especificadas no esquema da API GraphQL. Não
incluir-fragmento Insere um fragmento de política na definição de política. Se houver vários fragmentos, adicione elementos adicionais include-fragment . Não

Utilização

Notas de utilização

  • Para configurar e gerenciar um resolvedor com essa política, consulte Configurar um resolvedor GraphQL.
  • Essa política é invocada somente ao resolver um único campo em um tipo de operação GraphQL correspondente no esquema.

Exemplos

Resolvedor para consulta GraphQL

O exemplo a seguir resolve uma consulta fazendo uma chamada HTTP GET para uma fonte de dados de back-end.

Esquema de exemplo

type Query {
    users: [User]
}

type User {
    id: String!
    name: String!
}

Exemplo de política

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/get/users</set-url>
    </http-request>
</http-data-source>

Resolvedor para uma consulta GraqhQL que retorna uma lista, usando um modelo líquido

O exemplo a seguir usa um modelo líquido, com suporte para uso na política set-body , para retornar uma lista na resposta HTTP a uma consulta. Ele também renomeia o username campo na resposta da API REST para name na resposta GraphQL.

Esquema de exemplo

type Query {
    users: [User]
}

type User {
    id: String!
    name: String!
}

Exemplo de política

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/users</set-url>
    </http-request>
    <http-response>
        <set-body template="liquid">
            [
                {% JSONArrayFor elem in body %}
                    {
                        "name": "{{elem.username}}"
                    }
                {% endJSONArrayFor %}
            ]
        </set-body>
    </http-response>
</http-data-source>

Resolvedor para mutação GraphQL

O exemplo a seguir resolve uma mutação que insere dados fazendo uma POST solicitação para uma fonte de dados HTTP. A expressão de política na set-body política da solicitação HTTP modifica um name argumento que é passado na consulta GraphQL como seu corpo. O corpo que é enviado será semelhante ao seguinte JSON:

{
    "name": "the-provided-name"
}

Esquema de exemplo

type Query {
    users: [User]
}

type Mutation {
    makeUser(name: String!): User
}

type User {
    id: String!
    name: String!
}

Exemplo de política

<http-data-source>
    <http-request>
        <set-method>POST</set-method>
        <set-url>https://data.contoso.com/user/create </set-url>
        <set-header name="Content-Type" exists-action="override">
            <value>application/json</value>
        </set-header>
        <set-body>@{
            var args = context.GraphQL.Arguments;  
            JObject jsonObject = new JObject();
            jsonObject.Add("name", args["name"])
            return jsonObject.ToString();
        }</set-body>
    </http-request>
</http-data-source>

Resolvedor para o tipo de união GraphQL

O exemplo a seguir resolve a orderById consulta fazendo uma chamada HTTP GET para uma fonte de dados de back-end e retorna um objeto JSON que inclui o ID e o tipo do cliente. O tipo de cliente é uma união de RegisteredCustomer e GuestCustomer tipos.

Esquema de exemplo

type Query {
  orderById(orderId: Int): Order
}

type Order {
  customerId: Int!
  orderId: Int!  
  customer: Customer
}

enum AccountType {
  Registered
  Guest
}

union Customer = RegisteredCustomer | GuestCustomer

type RegisteredCustomer {
  accountType: AccountType!
  customerId: Int!
  customerGuid: String!
  firstName: String!
  lastName: String!
  isActive: Boolean!
}

type GuestCustomer {
  accountType: AccountType!
  firstName: String!
  lastName: String!
}

Exemplo de política

Neste exemplo, simulamos os resultados do cliente de uma fonte externa e codificamos os resultados obtidos na set-body política. O __typename campo é usado para determinar o tipo de cliente.

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/orders/</set-url>
    </http-request>
    <http-response>
        <set-body>{"customerId": 12345, "accountType": "Registered", "__typename": "RegisteredCustomer" }
        </set-body>
    </http-response>
</http-data-source>

Para obter mais informações sobre como trabalhar com políticas, consulte: