Memisahkan query yang diminta dan yang dapat dieksekusi
Gato GraphQL menggunakan pipeline direktif, sebuah arsitektur yang memungkinkan mesin server untuk menyelesaikan, memvalidasi, dan mengeksekusi query. Agar mesin sesederhana mungkin, setiap tindakan yang berkaitan dengan penyelesaian query berlangsung di dalam pipeline, melalui direktif.

Memanggil resolver untuk memvalidasi dan menyelesaikan sebuah field, lalu menggabungkan hasilnya ke dalam respons, dilakukan melalui sepasang direktif khusus: @validate dan @resolveValueAndMerge. Direktif-direktif ini berjenis khusus: mereka tidak ditambahkan oleh aplikasi (baik pada query maupun pada skema), melainkan oleh mesin itu sendiri. Kedua direktif ini bersifat implisit dan selalu ditambahkan, pada setiap field dari setiap query.
Dari strategi ini kita dapat melihat bahwa, ketika mengeksekusi sebuah query pada server GraphQL, sebenarnya terdapat 2 query yang terlibat:
- Query yang diminta
- Query yang dapat dieksekusi
Query yang dapat dieksekusi, yang merupakan query yang pada akhirnya akan diselesaikan oleh server, dihasilkan dari penerapan transformasi pada query yang diminta, di antaranya penyertaan direktif @validate dan @resolveValueAndMerge untuk setiap field.

Misalnya, jika query yang diminta adalah sebagai berikut:
{
posts {
url
title @uppercase
content @include(if: $addContent)
}
}Maka query yang dapat dieksekusi akan menjadi seperti ini:
{
posts @validate @resolveValueAndMerge {
url @validate @resolveValueAndMerge
title @validate @resolveValueAndMerge @uppercase
content @validate @include(if: $addContent) @resolveValueAndMerge
}
}Di mana digunakan
Gato GraphQL menggunakan mekanisme ini untuk menghasilkan query yang dapat dieksekusi, dalam keadaan berikut:
- Menambahkan direktif bertipe sistem (seperti
@validatedan@resolveValueAndMerge) - Menambahkan direktif apa pun melalui IFTTT melalui direktif
- Mendefinisikan urutan eksekusi field yang ketat untuk Multiple Query Execution