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 API de GraphQL.

Actualmente, API Management admite solucionadores que pueden acceder a los siguientes orígenes de datos:

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 y backend 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.

Requisitos previos

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.

  1. Vaya a la instancia de API Management en Azure Portal.

  2. En el menú de la izquierda, seleccione API y, a continuación, el nombre de su GraphQL API.

  3. En la pestaña Esquema, revise el esquema de un campo en un tipo de objeto en el que desea configurar un solucionador.

    1. Seleccione un campo y, a continuación, pase el puntero por el margen izquierdo.

    2. Seleccione + Agregar solucionador.

      Captura de pantalla de la adición de un solucionador desde un campo del esquema GraphQL en el portal.

  4. En la página Crear solucionador:

    1. Actualice la propiedad Name si quiere, escriba opcionalmente una Descripción y confirme o actualice las selecciones Tipo y Campo.
    2. Seleccione el origen de datos del solucionador. En este ejemplo, seleccione API de HTTP.
  5. En el editor de Directiva de solucionador, actualice la http-data-source directiva con elementos secundarios para su escenario.

    1. Actualice el elemento necesario http-request con directivas para transformar la operación GraphQL en una solicitud HTTP.

    2. Opcionalmente, agregue un elemento http-response y agregue directivas secundarias para transformar la respuesta HTTP del solucionador. Si no se especifica el elemento http-response, la respuesta se devuelve como una cadena sin formato.

    3. Seleccione Crear.

      Captura de pantalla del editor de directiva de solucionador en el portal.

    El solucionador se adjunta al campo y aparece en la pestaña Solucionadores.

    Captura de pantalla de la lista de solucionadores para GraphQL API en el portal.

Administrar solucionadores

Enumere y administre los solucionadores de GraphQL API en la pestaña Solucionadores de la API.

Captura de pantalla de la lista de solucionadores para GraphQL API en el portal.

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.

    Captura de pantalla de la edición de un solucionador GraphQL en el portal.

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: