Architecture
ArchitectureDécouplage des requêtes demandées et exécutables

Découplage des requêtes demandées et exécutables

Gato GraphQL utilise un pipeline de directives, une architecture qui permet au moteur du serveur de résoudre, valider et exécuter la requête. Pour rendre le moteur aussi simple que possible, toute action concernant la résolution de la requête se déroule dans le pipeline, via des directives.

Le pipeline de directives

Appeler le résolveur pour valider et résoudre un champ, puis fusionner sa sortie dans la réponse, se fait via deux directives spéciales : @validate et @resolveValueAndMerge. Ces directives sont d'un type spécial : elles ne sont pas ajoutées par l'application (ni dans la requête ni dans le schéma) mais par le moteur lui-même. Ces 2 directives sont implicites et sont toujours ajoutées, sur chaque champ de chaque requête.

De cette stratégie, nous pouvons voir que, lors de l'exécution d'une requête sur le serveur GraphQL, il y a en réalité 2 requêtes impliquées :

  • La requête demandée
  • La requête exécutable

La requête exécutable, qui est celle qui sera finalement résolue par le serveur, est produite en appliquant des transformations à la requête demandée, notamment l'inclusion des directives @validate et @resolveValueAndMerge pour chaque champ.

Processus interne dans le serveur GraphQL

Par exemple, si la requête demandée est celle-ci :

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

La requête exécutable sera celle-ci :

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

Où est-il utilisé

Gato GraphQL utilise ce mécanisme pour produire la requête exécutable dans les circonstances suivantes :