Architectuur
ArchitectuurOntkoppeling van gevraagde en uitvoerbare queries

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.

De directive pipeline

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.

Intern proces binnen de GraphQL-server

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: