การกำหนดเวอร์ชันตามฟิลด์/ไดเรกทีฟ
ฟิลด์และไดเรกทีฟสามารถกำหนดเวอร์ชันได้อย่างอิสระ และสามารถระบุเวอร์ชันที่ต้องการใช้ได้ภายใน query ผ่านอาร์กิวเมนต์ versionConstraint ของฟิลด์/ไดเรกทีฟ
ในการเลือกเวอร์ชันสำหรับฟิลด์/ไดเรกทีฟ Gato GraphQL ใช้ semver version constraints แบบเดียวกับที่ Composer ใช้
เหตุใดจึงต้องกำหนดเวอร์ชัน
กลยุทธ์การพัฒนา ที่ GraphQL นำมาใช้มีปัญหา กล่าวคือ เมื่อต้องการเลิกใช้ฟิลด์หนึ่งและแทนที่ด้วยการนำไปใช้งานใหม่ ฟิลด์ใหม่จะต้องมีชื่อฟิลด์ใหม่ด้วย จากนั้น หากฟิลด์ที่เลิกใช้แล้วไม่สามารถลบออกได้ (เช่น เพราะยังมีบางไคลเอนต์เข้าถึงอยู่ จาก queries ที่ไม่เคยได้รับการแก้ไข) ฟิลด์ต่าง ๆ สำหรับฟังก์ชันเดียวกันก็จะสะสมอยู่ใน schema และฟิลด์ที่มีการนำไปใช้งานใหม่จะไม่มีชื่อที่เหมาะสม (อันที่จริง จะด้อยกว่าชื่อฟิลด์ที่เลิกใช้แล้ว)
การพัฒนาเพียงอย่างเดียว เมื่อเวลาผ่านไป มีแนวโน้มทำให้ schema เต็มไปด้วยนิยามที่ไม่ต้องการ การกำหนดเวอร์ชัน schema ในระดับฟิลด์/ไดเรกทีฟสามารถแก้ปัญหานี้ได้
การระบุเวอร์ชันเป้าหมายผ่าน query
ส่งค่า constraint ไปยังฟิลด์หรือไดเรกทีฟผ่านอาร์กิวเมนต์ 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")
}
}