Mimari
Mimariİstenen ve çalıştırılabilir queries'lerin ayrıştırılması

İ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.

Directive pipeline

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.

GraphQL sunucusunun iç süreci

Ö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: