Architektura
ArchitekturaRozdzielenie queries żądanych i wykonywalnych

Rozdzielenie queries żądanych i wykonywalnych

Gato GraphQL wykorzystuje pipeline dyrektyw, architekturę umożliwiającą silnikowi serwera rozwiązywanie, walidowanie i wykonywanie queries. Aby silnik był jak najprostszy, każda akcja związana z rozwiązywaniem queries odbywa się wewnątrz pipeline'u, za pośrednictwem dyrektyw.

Pipeline dyrektyw

Wywołanie resolvera w celu walidacji i rozwiązania pola oraz scalenia jego wyniku z odpowiedzią jest realizowane przez kilka specjalnych dyrektyw: @validate i @resolveValueAndMerge. Te dyrektywy są szczególnego rodzaju: nie są dodawane przez aplikację (ani w query, ani w schemacie), lecz przez sam silnik. Te 2 dyrektywy są niejawne i zawsze dodawane do każdego pola każdej query.

Z tej strategii wynika, że podczas wykonywania query na serwerze GraphQL w rzeczywistości biorą udział 2 queries:

  • Żądana query
  • Wykonywalna query

Wykonywalna query, która ostatecznie zostanie rozwiązana przez serwer, jest tworzona poprzez zastosowanie transformacji na żądanej query, w tym dodanie dyrektyw @validate i @resolveValueAndMerge dla każdego pola.

Wewnętrzny proces na serwerze GraphQL

Na przykład, jeśli żądana query wygląda tak:

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

Wykonywalna query będzie wyglądać tak:

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

Gdzie jest używane

Gato GraphQL wykorzystuje ten mechanizm do tworzenia wykonywalnej query w następujących okolicznościach: