Kiến trúc
Kiến trúcTách biệt queries được yêu cầu và queries có thể thực thi

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

Pipeline 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@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@resolveValueAndMerge cho mọi trường.

Quy trình nội bộ trong server GraphQL

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: