Configurar un solucionador GraphQL
SE APLICA A: todos los niveles de API Management
Configurar un solucionador para recuperar o establecer datos para un campo GraphQL en un tipo de objeto especificado en un esquema GraphQL. El esquema debe importarse a API Management como una API de GraphQL.
Nota:
Actualmente, esta característica no está disponible en las áreas de trabajo.
Actualmente, API Management admite solucionadores que pueden acceder a los siguientes orígenes de datos:
- Origen de datos basado en HTTP (API de REST o SOAP)
- Base de datos de Cosmos DB
- Azure SQL Database
Cosas que debe saber
- Un solucionador es un recurso que contiene una definición de directiva que se invoca solo cuando se ejecuta un tipo de objeto y un campo coincidentes en el esquema.
- Cada solucionador resuelve los datos de un solo campo. Para resolver los datos de varios campos, configure una resolución independiente para cada uno.
- Las directivas con ámbito de resolución se evalúan después de cualquier directiva
inbound
ybackend
en la canalización de ejecución de directiva. No heredan directivas de otros ámbitos. Para más información, consulte Directivas en API Management. - Puede configurar directivas con ámbito de API para GraphQL API, independientemente de las directivas con ámbito de resolución. Por ejemplo, agregue una directiva validate-graphql-request al
inbound
ámbito para validar la solicitud antes de invocar la resolución. Configure directivas con ámbito de API en la pestaña Directivas de API de la API. - Para admitir tipos de interfaz y unión en los solucionadores de GraphQL, la respuesta de back-end debe contener ya el campo
__typename
o bien modificarse mediante la directiva set-body para incluir__typename
.
Requisitos previos
- Tener una instancia de API Management existente. Cree una suscripción si todavía no lo ha hecho.
- Importe GraphQL API de tránsito o sintética.
Crear un solucionador
En los pasos siguientes se crea un solucionador mediante un origen de datos basado en HTTP. Los pasos generales son similares para cualquier solucionador que use un origen de datos compatible.
Vaya a la instancia de API Management en Azure Portal.
En el menú de la izquierda, seleccione API y, a continuación, el nombre de su GraphQL API.
En la pestaña Esquema, revise el esquema de un campo en un tipo de objeto en el que desea configurar un solucionador.
Seleccione un campo y, a continuación, pase el puntero por el margen izquierdo.
Seleccione + Agregar solucionador.
En la página Crear solucionador:
- Actualice la propiedad Name si quiere, escriba opcionalmente una Descripción y confirme o actualice las selecciones Tipo y Campo.
- Seleccione el origen de datos del solucionador. En este ejemplo, seleccione API de HTTP.
En el editor de Directiva de solucionador, actualice la
http-data-source
directiva con elementos secundarios para su escenario.Actualice el elemento necesario
http-request
con directivas para transformar la operación GraphQL en una solicitud HTTP.Opcionalmente, agregue un elemento
http-response
y agregue directivas secundarias para transformar la respuesta HTTP del solucionador. Si no se especifica el elementohttp-response
, la respuesta se devuelve como una cadena sin formato.Seleccione Crear.
El solucionador se adjunta al campo y aparece en la pestaña Solucionadores.
Administrar solucionadores
Enumere y administre los solucionadores de GraphQL API en la pestaña Solucionadores de la API.
En la pestaña Solucionadores:
La columna Vinculada indica si el solucionador está configurado para un campo que se encuentra actualmente en el esquema GraphQL. Si un solucionador no está vinculado, no se puede invocar.
En el menú contextual (...) de un solucionador, busque comandos para clonar, editar o eliminar un solucionador. Clonar un solucionador enumerado para crear rápidamente un solucionador similar que tenga como destino un tipo y un campo diferentes.
Para crear un solucionador, seleccione + Crear.
Editar y probar un solucionador
Al editar un único solucionador, se abre la página Editar solucionador. Puede:
Actualice la directiva de solucionador y, opcionalmente, el origen de datos. Al cambiar el origen de datos, se sobrescribe la directiva de solucionador actual.
Cambie el tipo y el campo a los que se dirige el solucionador.
Pruebe y depure la configuración del solucionador. Al editar la directiva de solucionador, seleccione Ejecutar prueba para comprobar la salida del origen de datos, que puede validar con el esquema. Si se producen errores, la respuesta incluye información de solución de problemas.
Contexto de GraphQL
- El contexto de la solicitud del solucionador y el de la respuesta (si se especifica) difieren del contexto de la solicitud de API de la puerta de enlace original:
context.GraphQL
propiedades se establecen en los argumentos (Arguments
) y el objeto primario (Parent
) para la ejecución del solucionador actual.- El contexto de la solicitud contiene argumentos que se pasan en la consulta de GraphQL como su cuerpo.
- El contexto de respuesta es la respuesta de la llamada independiente que realiza el solucionador, no el contexto de la respuesta completa para la solicitud de puerta de enlace.
La variable
context
que se pasa a través de la canalización de peticiones y respuestas se aumenta con el contexto GraphQL cuando se utiliza con un solucionador GraphQL.
context.GraphQL.parent
context.GraphQL.parent
se establece en el objeto primario para la ejecución del revolvedor actual. Fíjese en el siguiente 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
}
Además, considere la posibilidad de usar una consulta de GraphQL para toda la información de un blog específico:
query {
getBlog(id: 1) {
title
content
comments {
id
owner
content
}
}
}
Si establece un solucionador para el campo comments
en el tipo Blog
, tendrá que comprender qué identificador de blog usar. Puede obtener el identificador del blog mediante context.GraphQL.Parent["id"]
, como se muestra en la resolución siguiente:
<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>
context.GraphQL.Arguments
Los argumentos de una consulta GraphQL parametrizada se añaden a context.GraphQL.Arguments
. Por ejemplo, tome en cuenta las dos consultas siguientes:
query($id: Int) {
getComment(id: $id) {
content
}
}
query {
getComment(id: 2) {
content
}
}
Estas consultas son dos maneras de llamar al resolvedor getComment
. GraphQL envía la siguiente carga de JSON:
{
"query": "query($id: Int) { getComment(id: $id) { content } }",
"variables": { "id": 2 }
}
{
"query": "query { getComment(id: 2) { content } }"
}
Puede definir el resolvedor de la siguiente manera:
<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>
Pasos siguientes
Para obtener más ejemplos de resolución, consulte: