Architettura
ArchitetturaDisaccoppiamento delle query richieste ed eseguibili

Disaccoppiamento delle query richieste ed eseguibili

Gato GraphQL utilizza una pipeline di direttive, un'architettura che consente al motore del server di risolvere, validare ed eseguire la query. Per rendere il motore il più semplice possibile, ogni azione che riguarda la risoluzione della query avviene all'interno della pipeline, tramite direttive.

La pipeline di direttive

Chiamare il resolver per validare e risolvere un campo, e unire il suo output nella risposta, avviene tramite un paio di direttive speciali: @validate e @resolveValueAndMerge. Queste direttive sono di un tipo speciale: non vengono aggiunte dall'applicazione (né nella query né nello schema) ma dal motore stesso. Queste 2 direttive sono implicite e vengono sempre aggiunte, su ogni campo di ogni query.

Da questa strategia possiamo vedere che, quando si esegue una query sul server GraphQL, in realtà sono coinvolte 2 query:

  • La query richiesta
  • La query eseguibile

La query eseguibile, che è quella che verrà infine risolta dal server, è prodotta applicando trasformazioni alla query richiesta, tra cui l'inclusione delle direttive @validate e @resolveValueAndMerge per ogni campo.

Processo interno nel server GraphQL

Ad esempio, se la query richiesta è questa:

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

La query eseguibile sarà questa:

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

Dove viene utilizzato

Gato GraphQL utilizza questo meccanismo per produrre la query eseguibile nelle seguenti circostanze: