Fonte de dados HTTP para um resolvedor
APLICA-SE A: todas as camadas do Gerenciamento de API
A política de resolvedor http-data-source
configura a solicitação HTTP e, opcionalmente, a resposta HTTP para resolver dados de um tipo de objeto e um campo em um esquema do GraphQL. O esquema deve ser importado para o Gerenciamento de API como uma API do GraphQL.
Observação
Defina os elementos da política e os elementos filho na ordem fornecida na declaração da política. Saiba mais sobre como definir e editar as 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-request | 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-response | Opcionalmente, especifica políticas filho para configurar a resposta HTTP do resolvedor. Se não for especificada, a resposta será retornada como uma cadeia de caracteres bruta. | Não |
Elementos http-request
Observação
Exceto quando indicado, cada elemento filho pode ser especificado no máximo uma vez. Especifique elementos na ordem listada.
Elemento | Descrição | 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 |
include-fragment | Insere um fragmento de política na definição de política. Se houver vários cabeçalhos, adicione include-fragment elementos adicionais. |
Não |
set-method | Define o método da solicitação HTTP do resolvedor. | Sim |
set-url | Define a URL da solicitação HTTP do resolvedor. | Yes |
set-header | Define um cabeçalho na solicitação HTTP do resolvedor. Se houver vários cabeçalhos, adicione header elementos adicionais. |
Não |
set-body | Define o corpo na solicitação HTTP do resolvedor. | Não |
authentication-certificate | Autentica-se usando um certificado do cliente na solicitação HTTP do resolvedor. | Não |
Elemento back-end
Elemento | Descrição | Obrigatório |
---|---|---|
forward-request | Encaminha a solicitação HTTP do resolvedor para um serviço de back-end configurado. | Não |
Elementos http-response
Observação
Exceto quando indicado, cada elemento filho pode ser especificado no máximo uma vez. Especifique elementos na ordem listada.
Nome | Descrição | Obrigatório |
---|---|---|
set-body | Define o corpo na resposta HTTP do resolvedor. | Não |
xml-to-json | Transforma a resposta HTTP do resolvedor de XML em JSON. | Não |
find-and-replace | Localiza uma substring na resposta HTTP do resolvedor e a substitui por uma substring diferente. | Não |
publish-event | Publica um evento em uma ou mais assinaturas especificadas no esquema da API do GraphQL. | Não |
include-fragment | Insere um fragmento de política na definição de política. Se houver vários cabeçalhos, adicione include-fragment elementos adicionais. |
Não |
Uso
- Escopos de política: resolvedor do GraphQL
- Gateways: clássico, v2, consumo
Observações de uso
- Para configurar e gerenciar um resolvedor com essa política, confira Configurar um resolvedor do GraphQL.
- Essa política é invocada somente ao resolver um só campo em um tipo de operação correspondente do GraphQL no esquema.
Exemplos
Resolvedor para consultas do 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!
}
Política de exemplo
<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 GraphQL 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, a fim de retornar uma lista na resposta HTTP a uma consulta. Essa ação também renomeia o campo username
na resposta da API REST para name
na resposta do GraphQL.
Esquema de exemplo
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Política de exemplo
<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 a mutação do GraphQL
O exemplo a seguir resolve uma mutação que insere dados fazendo uma solicitação POST
a uma fonte de dados HTTP. A expressão de política na política set-body
da solicitação HTTP modifica um argumento name
que é transmitido na consulta do GraphQL como o corpo. O corpo 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!
}
Política de exemplo
<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>
Resolução para o tipo de união do GraphQL
O exemplo a seguir resolve a consulta orderById
fazendo uma chamada HTTP GET
a uma fonte de dados de back-end e retorna um objeto JSON que inclui a ID do cliente e o tipo. O tipo de cliente é uma união dos tipos RegisteredCustomer
e GuestCustomer
.
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!
}
Política de exemplo
Neste exemplo, simularemos os resultados do cliente de uma fonte externa e codificaremos os resultados buscados na política set-body
. O campo __typename
é usado para determinar o tipo do 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údo relacionado
Para obter mais informações sobre como trabalhar com políticas, consulte:
- Tutorial: Transformar e proteger sua API
- Referência de Política para uma lista completa das instruções de política e suas configurações
- Expressões de política
- Definir ou editar políticas
- Reutilizar configurações de política
- Repositório de snippets de política
- Kit de ferramentas de política de gerenciamento de API do Azure
- Criar políticas usando o Microsoft Copilot no Azure