Tách biệt queries được yêu cầu và queries có thể thực thi
Gato GraphQL sử dụng một pipeline chỉ thị, một kiến trúc cho phép engine của server giải quyết, xác thực và thực thi queries. Để engine càng đơn giản càng tốt, mọi hành động liên quan đến việc giải quyết queries đều diễn ra trong pipeline, thông qua các chỉ thị.

Việc gọi resolver để xác thực và giải quyết một trường, rồi hợp nhất kết quả đầu ra vào phản hồi, được thực hiện thông qua một cặp chỉ thị đặc biệt: @validate và @resolveValueAndMerge. Các chỉ thị này thuộc một loại đặc biệt: chúng không được thêm vào bởi ứng dụng (dù trong queries hay trong schema) mà bởi chính engine. 2 chỉ thị này là ngầm định, và chúng luôn được thêm vào, trên mọi trường của mọi queries.
Từ chiến lược này, chúng ta có thể thấy rằng khi thực thi một query trên server GraphQL, thực chất có 2 queries liên quan:
- Queries được yêu cầu
- Queries có thể thực thi
Queries có thể thực thi, là queries cuối cùng được server giải quyết, được tạo ra bằng cách áp dụng các phép biến đổi lên queries được yêu cầu, trong đó có việc thêm các chỉ thị @validate và @resolveValueAndMerge cho mọi trường.

Ví dụ, nếu queries được yêu cầu là:
{
posts {
url
title @uppercase
content @include(if: $addContent)
}
}Thì queries có thể thực thi sẽ là:
{
posts @validate @resolveValueAndMerge {
url @validate @resolveValueAndMerge
title @validate @resolveValueAndMerge @uppercase
content @validate @include(if: $addContent) @resolveValueAndMerge
}
}Sử dụng ở đâu
Gato GraphQL sử dụng cơ chế này để tạo ra queries có thể thực thi trong các trường hợp sau:
- Thêm các chỉ thị loại hệ thống (như
@validatevà@resolveValueAndMerge) - Thêm bất kỳ chỉ thị nào thông qua IFTTT thông qua chỉ thị
- Xác định thứ tự thực thi trường nghiêm ngặt cho Multiple Query Execution