Kiến trúc
Kiến trúcPhân phiên bản theo trường/chỉ thị

Phân phiên bản theo trường/chỉ thị

Các trường và chỉ thị có thể được phân phiên bản độc lập, và phiên bản cần dùng có thể được chỉ định trong query thông qua đối số trường/chỉ thị versionConstraint.

Để chọn phiên bản cho trường/chỉ thị, Gato GraphQL sử dụng cùng các ràng buộc phiên bản semver được Composer sử dụng.

Lý do

Chiến lược phát triển được GraphQL áp dụng có một vấn đề: khi một trường bị đánh dấu lỗi thời (để thay thế bằng một triển khai mới hơn), trường mới sẽ cần có tên mới. Khi đó, nếu trường đã lỗi thời không thể bị xóa (chẳng hạn vì một số client vẫn đang truy cập nó từ các queries chưa bao giờ được xem xét lại), thì tất cả các trường cho cùng một chức năng đó sẽ dần tích lũy trong schema, và tên của triển khai mới sẽ không phải là tên tối ưu (thực ra sẽ tệ hơn tên của trường đã lỗi thời).

Chỉ dựa vào phát triển theo thời gian sẽ làm schema bị ô nhiễm bởi các định nghĩa không mong muốn. Phân phiên bản schema theo từng trường/chỉ thị có thể giải quyết vấn đề này.

Phân phiên bản có mục tiêu thông qua query

Truyền ràng buộc vào trường hoặc chỉ thị thông qua đối số versionConstraint:

# Selecting version for fields
query {
  #This will produce version 0.1.0
  firstVersion: userServiceURLs(versionConstraint: "^0.1")
  # This will produce version 0.2.0
  secondVersion: userServiceURLs(versionConstraint: ">0.1")
  # This will produce version 0.2.0
  thirdVersion: userServiceURLs(versionConstraint: "^0.2")
}
 
# Selecting version for directives
query {
  post(by: { id:1 }) {
    titleCase: title @makeTitle(versionConstraint: "^0.1")
    upperCase: title @makeTitle(versionConstraint: "^0.2")
  }
}