Ontkoppeling van gevraagde en uitvoerbare queries
Gato GraphQL maakt gebruik van een directive pipeline, een architectuur waarmee de engine van de server queries kan oplossen, valideren en uitvoeren. Om de engine zo eenvoudig mogelijk te houden, vindt elke actie met betrekking tot het oplossen van queries plaats binnen de pipeline, via directives.

Het aanroepen van de resolver om een veld te valideren en op te lossen, en de uitvoer samen te voegen in de respons, wordt uitgevoerd door een aantal speciale directives: @validate en @resolveValueAndMerge. Deze directives zijn van een speciaal type: ze worden niet toegevoegd door de applicatie (niet in de query en niet in het schema), maar door de engine zelf. Deze 2 directives zijn impliciet en worden altijd toegevoegd aan elk veld van elke query.
Uit deze strategie blijkt dat er bij het uitvoeren van een query op de GraphQL-server eigenlijk 2 queries betrokken zijn:
- De gevraagde query
- De uitvoerbare query
De uitvoerbare query, die uiteindelijk door de server wordt opgelost, wordt gegenereerd door transformaties toe te passen op de gevraagde query, waaronder het toevoegen van de directives @validate en @resolveValueAndMerge voor elk veld.

Als de gevraagde query bijvoorbeeld als volgt is:
{
posts {
url
title @uppercase
content @include(if: $addContent)
}
}Dan zal de uitvoerbare query er zo uitzien:
{
posts @validate @resolveValueAndMerge {
url @validate @resolveValueAndMerge
title @validate @resolveValueAndMerge @uppercase
content @validate @include(if: $addContent) @resolveValueAndMerge
}
}Waar het wordt gebruikt
Gato GraphQL gebruikt dit mechanisme om de uitvoerbare query te genereren in de volgende omstandigheden:
- Het toevoegen van systeemtype-directives (zoals
@validateen@resolveValueAndMerge) - Het toevoegen van een directive via IFTTT via directives
- Het definiƫren van een strikte volgorde voor velduitvoering voor Multiple Query Execution