Arquitectura
ArquitecturaTrabajando con directivas de tipo esquema

Trabajando con directivas de tipo esquema

Gato GraphQL es un servidor Servidor GraphQL code-first, es decir, utiliza código para desarrollar el esquema. (La alternativa es el enfoque SDL-first, que utiliza el Schema Definition Language para producir primero el esquema y luego desarrollar el servicio).

Como no tiene un SDL, los servidores code-first no pueden soportar de forma natural las directivas de tipo esquema. Para evitar esta limitación, Gato GraphQL ha desarrollado el siguiente mecanismo:

El resultado es un soporte completo para las directivas de tipo esquema en el servidor GraphQL.

¿Por qué funciona?

@deprecated es una directiva de tipo esquema, por lo que debe aplicarse sobre el esquema. Sin embargo, ¿qué ocurriría si por un momento fingiéramos que es una directiva de tipo consulta y añadiéramos @deprecated sobre algún campo directamente en la consulta?

Por ejemplo, al ejecutar esta consulta:

query {
  posts {
    id
    title
    content @deprecated(reason: "Use newContent instead")
  }
}

¡Pues podría funcionar igualmente! Porque, después de todo, una directiva no es más que una funcionalidad a ejecutar sobre el campo; declarar esa funcionalidad mediante el esquema, o directamente en la consulta, no hace que la funcionalidad se comporte de manera diferente.

Ahora bien, aunque funcione, no tiene mucho sentido. No podemos obligar a nuestros clientes a añadir @deprecated a sus consultas. Esta es una funcionalidad decidida por la aplicación en el lado del servidor, no en el cliente.

Sin embargo, la funcionalidad en sí sigue funcionando. Por lo tanto, que la directiva se añada al esquema o a la consulta no importa desde un punto de vista funcional. Es más, toda directiva acabará tarde o temprano estando presente en la consulta, ya que es ahí donde se ejecuta.

Por lo tanto, si el servidor no tiene un SDL, aún puede incrustar la directiva en la consulta en tiempo de ejecución.