Arquitectura
ArquitecturaDesacoplando consultas solicitadas y ejecutables

Desacoplando consultas solicitadas y ejecutables

Gato GraphQL utiliza un pipeline de directivas, una arquitectura que permite al motor del servidor resolver, validar y ejecutar la consulta. Para hacer el motor lo más sencillo posible, toda acción relacionada con la resolución de la consulta tiene lugar dentro del pipeline, a través de directivas.

El pipeline de directivas

Llamar al resolver para validar y resolver un campo, y combinar su salida en la respuesta, se logra mediante un par de directivas especiales: @validate y @resolveValueAndMerge. Estas directivas son de un tipo especial: no las añade la aplicación (ni en la consulta ni en el esquema), sino el propio motor. Estas 2 directivas son implícitas y se añaden siempre, en cada campo de cada consulta.

A partir de esta estrategia podemos ver que, al ejecutar una consulta en el servidor GraphQL, en realidad intervienen 2 consultas:

  • La consulta solicitada
  • La consulta ejecutable

La consulta ejecutable, que es la que finalmente resolverá el servidor, se produce aplicando transformaciones a la consulta solicitada, entre ellas la inclusión de las directivas @validate y @resolveValueAndMerge en cada campo.

Proceso interno dentro del servidor GraphQL

Por ejemplo, si la consulta solicitada es esta:

{
  posts {
    url
    title @uppercase
    content @include(if: $addContent)
  }
}

La consulta ejecutable será esta:

{
  posts @validate @resolveValueAndMerge {
    url @validate @resolveValueAndMerge
    title @validate @resolveValueAndMerge @uppercase
    content @validate @include(if: $addContent) @resolveValueAndMerge
  }
}

Dónde se utiliza

Gato GraphQL emplea este mecanismo para producir la consulta ejecutable en las siguientes circunstancias: