İstenen ve çalıştırılabilir queries'lerin ayrıştırılması
Gato GraphQL, sunucunun motorunun query'yi çözümlemesini, doğrulamasını ve çalıştırmasını sağlayan bir mimari olan directive pipeline'ı kullanır. Motoru mümkün olduğunca basit tutmak için, query'nin çözümlenmesiyle ilgili her işlem pipeline içinde direktifler aracılığıyla gerçekleşir.

Bir alanı doğrulamak ve çözümlemek için resolver'ı çağırmak ve çıktısını yanıta birleştirmek, birkaç özel direktif aracılığıyla gerçekleştirilir: @validate ve @resolveValueAndMerge. Bu direktifler özel bir türdedir: uygulama tarafından (ne query'ye ne de şemaya) eklenmez, bizzat motor tarafından eklenir. Bu 2 direktif örtüktür ve her query'nin her alanına her zaman eklenir.
Bu stratejiden, GraphQL sunucusunda bir query çalıştırıldığında aslında 2 query'nin söz konusu olduğunu görebiliriz:
- İstenen query
- Çalıştırılabilir query
Çalıştırılabilir query, sonuç olarak sunucu tarafından çözülecek olan query'dir ve istenen query üzerinde dönüşümler uygulanarak üretilir; bu dönüşümler arasında her alan için @validate ve @resolveValueAndMerge direktiflerinin dahil edilmesi yer alır.

Örneğin, istenen query şu ise:
{
posts {
url
title @uppercase
content @include(if: $addContent)
}
}Çalıştırılabilir query şu olacaktır:
{
posts @validate @resolveValueAndMerge {
url @validate @resolveValueAndMerge
title @validate @resolveValueAndMerge @uppercase
content @validate @include(if: $addContent) @resolveValueAndMerge
}
}Nerede kullanılır
Gato GraphQL, aşağıdaki durumlarda çalıştırılabilir query'yi üretmek için bu mekanizmayı kullanır:
- Sistem türü direktifler ekleme (örneğin
@validateve@resolveValueAndMerge) - Direktifler aracılığıyla IFTTT ile herhangi bir direktif ekleme
- Multiple Query Execution için katı bir alan çalıştırma sırası tanımlama