Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
inboundybackenden la canalización de ejecución de directiva. No heredan directivas de otros ámbitos. Para más información, consulte Directivas en Azure 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 ámbito
inboundpara 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 ya debe contener el
__typenamecampo o 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, seleccione el nombre de GraphQL API.
En la pestaña Esquema, revise el esquema de un campo en un tipo de objeto en el que desee configurar un resolver.
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-sourcedirectiva con elementos secundarios para su escenario.Actualice el elemento necesario
http-requestcon directivas para transformar la operación GraphQL en una solicitud HTTP.Opcionalmente, agregue un
http-responseelemento 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.
La resolución se adjunta al campo y aparece en la pestaña Resoluciones.
Administrar resoluciones
Puede enumerar y administrar los solucionadores de graphQL API en la pestaña Solucionadores de la API.
En la pestaña Resoluciones:
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 una resolución, busque comandos para clonar, editar o eliminar una resolución. Clonar una resolución enumerada para crear rápidamente una resolución similar que tenga como destino un tipo y un campo diferentes.
Para crear una resolución, seleccione + Crear.
Editar y probar una resolución
Al editar una única resolución, se abre la página Editar resolución. Puede:
Actualice la directiva de la resolución y, de manera opcional, 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 la resolución.
Pruebe y depure la configuración de la resolución. Al editar la directiva de la resolución, 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:
-
Las propiedades de
context.GraphQLse 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
contextque 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.
-
Las propiedades de
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 de 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>
Contenido relacionado
Para obtener más ejemplos de resolución, consulte: