Origen de datos HTTP para una resolución
SE APLICA A: todos los niveles de API Management
La directiva de resolución http-data-source
configura la solicitud HTTP y, opcionalmente, la respuesta HTTP para resolver los datos de un tipo de objeto y un campo en un esquema GraphQL. El esquema debe importarse a API Management como una API de GraphQL.
Nota:
Establezca los elementos de la directiva y los elementos secundarios en el orden proporcionado en la instrucción de directiva. Obtenga más información sobre el establecimiento o modificación de directivas de API Management.
Instrucción de la directiva
<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
Nombre | Descripción | Obligatorio |
---|---|---|
http-request | Especifica una dirección URL y directivas secundarias para configurar la solicitud HTTP del solucionador. | Sí |
back-end | Opcionalmente, reenvía la solicitud HTTP del solucionador a un servicio back-end, si se especifica. | No |
http-response | Opcionalmente, especifica las directivas secundarias para configurar la respuesta HTTP del solucionador. Si no se especifica, la respuesta se devuelve como una cadena sin formato. | No |
elementos http-request
Nota
Excepto donde se indique, cada elemento secundario se puede especificar como máximo una vez. Especificar los elementos en el orden enumerado.
Elemento | Descripción | Obligatorio |
---|---|---|
get-authorization-context | Obtiene un contexto de autorización para la solicitud HTTP del solucionador. | No |
set-backend-service | Redirige la solicitud HTTP del solucionador al back-end especificado. | No |
include-fragment | Inserta un fragmento de la directiva en la definición de directiva. Si hay varios fragmentos, agregue elementos include-fragment adicionales. |
No |
set-method | Establecer el método de la solicitud HTTP de la resolución. | Sí |
set-url | Establece la URL de la solicitud HTTP de la resolución. | Sí |
set-header | Establece un encabezado en la solicitud HTTP de la resolución. Si hay varios encabezados, agrega elementos header adicionales. |
No |
set-body | Establece el cuerpo en la solicitud HTTP de la resolución. | No |
authentication-certificate | Se autentica mediante un certificado de cliente en la solicitud HTTP de la resolución. | No |
elemento back-end
Elemento | Descripción | Obligatorio |
---|---|---|
forward-request | Reenvía la solicitud HTTP del solucionador a un servicio back-end configurado. | No |
elementos http-response
Nota
Excepto donde se indique, cada elemento secundario se puede especificar como máximo una vez. Especificar los elementos en el orden enumerado.
Nombre | Descripción | Obligatorio |
---|---|---|
set-body | Establece el cuerpo en la respuesta HTTP de la resolución. | No |
xml-to-json | Transforma la respuesta HTTP de la resolución de XML a JSON. | No |
find-and-replace | Busca una substring en la respuesta HTTP de la resolución y la reemplaza por una substring diferente. | No |
publish-event | Publica un evento en una o varias suscripciones especificadas en el esquema de GraphQL API. | No |
include-fragment | Inserta un fragmento de la directiva en la definición de directiva. Si hay varios fragmentos, agregue elementos include-fragment adicionales. |
No |
Uso
- Ámbitos de directiva: resolución de GraphQL
- Puertas de enlace: clásica, v2, consumo y autohospedada
Notas de uso
- Para configurar y administrar una resolución con esta directiva, consulte Configuración de una resolución de GraphQL.
- Esta directiva solo se invoca al resolver un único campo en un tipo de operación de GraphQL coincidente en el esquema.
Ejemplos
Resolución de consultas de GraphQL
En el ejemplo siguiente se resuelve una consulta realizando una llamada HTTP GET
a un origen de datos back-end.
Esquema de ejemplo
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Ejemplo de directiva
<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>
Resolución de una consulta de GraphQL que devuelve una lista mediante una plantilla líquida
En el ejemplo siguiente se usa una plantilla líquida que se puede usar en la directiva set-body, para devolver una lista en la respuesta HTTP a una consulta. También cambia el nombre del campo username
de la respuesta de la API de REST a name
en la respuesta de GraphQL.
Esquema de ejemplo
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Ejemplo de directiva
<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>
Resolución para la mutación de GraphQL
En el ejemplo siguiente se resuelve una mutación que inserta datos mediante la realización de una solicitud POST
a un origen de datos HTTP. La expresión de directiva en la directiva set-body
de la solicitud HTTP modifica un argumento name
que se pasa en la consulta de GraphQL como su cuerpo. El cuerpo que se envía tendrá un aspecto similar al siguiente JSON:
{
"name": "the-provided-name"
}
Esquema de ejemplo
type Query {
users: [User]
}
type Mutation {
makeUser(name: String!): User
}
type User {
id: String!
name: String!
}
Ejemplo de directiva
<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>
Resolución del tipo de unión GraphQL
En el ejemplo siguiente se resuelve la consulta de orderById
mediante la realización de una llamada HTTP GET
a un origen de datos back-end y se devuelve un objeto JSON que incluye el identificador de cliente y el tipo. El tipo de cliente es una unión de tipos de RegisteredCustomer
y GuestCustomer
.
Esquema de ejemplo
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!
}
Ejemplo de directiva
En este ejemplo, simulamos los resultados del cliente de un origen externo y codificamos de forma rígida los resultados capturados en la directiva de set-body
. El campo __typename
se usa para determinar el tipo del 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>
Directivas relacionadas
Contenido relacionado
Para más información sobre el trabajo con directivas, vea:
- Tutorial: Transformación y protección de una API
- Referencia de directivas para una lista completa de instrucciones de directivas y su configuración
- Expresiones de directiva
- Establecimiento o edición de directivas
- Reutilización de configuraciones de directivas
- Repositorio de fragmentos de código de directiva
- Creación de directivas mediante Microsoft Copilot en Azure