Alan/direktif tabanlı versiyonlama
Alanlar ve direktifler bağımsız olarak versiyonlanabilir ve kullanılacak versiyon, alan/direktif argümanı versionConstraint aracılığıyla sorguda belirtilebilir.
Alan/direktif için versiyonu seçmek amacıyla Gato GraphQL, Composer tarafından kullanılan semver versiyon kısıtlamalarıyla aynı kısıtlamaları kullanır.
Neden
GraphQL tarafından benimsenen evrim stratejisi bir sorun içermektedir: bir alan kullanımdan kaldırıldığında (daha yeni bir uygulamayla değiştirmek için), yeni alanın yeni bir alan adına sahip olması gerekecektir. Ardından, kullanımdan kaldırılan alan kaldırılamazsa (örneğin, bazı istemcilerin hâlâ eriştiği ve hiç revize edilmemiş queries'den dolayı), aynı işlevsellik için tüm bu alanlar şemada birikme eğilimi gösterir ve alanın yeni uygulaması en iyi ada sahip olmayacaktır (hatta kullanımdan kaldırılan alanın adından daha kötü olacaktır).
Yalnızca evrim, zamanla şemayı istenmeyen tanımlarla kirletme eğilimindedir. Şemayı alan/direktif bazında versiyonlamak bu sorunu çözebilir.
Sorgu aracılığıyla hedefli versiyonlama
versionConstraint argümanı aracılığıyla kısıtlamayı alana veya direktife geçirin:
# 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")
}
}