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
- Escopos da política: Resolvedor GraphQL
- Gateways: clássico, v2, consumo
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>
Políticas relacionadas
Conteúdos relacionados
Para obter mais informações sobre como trabalhar com políticas, consulte:
- Tutorial: Transforme e proteja sua API
- Referência de política para uma lista completa de declarações de política e suas configurações
- Expressões de política
- Definir ou editar políticas
- Reutilizar configurações de política
- Recompra de trechos de política
- Criar políticas usando o Microsoft Copilot no Azure