เมื่อบริการ Web API ถูกเผยแพร่สู่สาธารณะ แอปพลิเคชันไคลเอนต์ต่างๆ จะเริ่มใช้บริการ Web API ของเรา เมื่อธุรกิจเติบโตขึ้นและความต้องการเปลี่ยนแปลงไป เราอาจต้องเปลี่ยนบริการด้วยเช่นกัน แต่การเปลี่ยนแปลงในบริการควรทำในลักษณะที่ไม่ทำลายแอปพลิเคชันไคลเอ็นต์ที่มีอยู่
นี่คือเวลาที่การกำหนดเวอร์ชันของ Web API ช่วยได้ เราคงบริการที่มีอยู่ตามที่เป็นอยู่ เพื่อไม่ให้แอปพลิเคชันไคลเอนต์ที่มีอยู่เสียหาย และพัฒนาบริการเวอร์ชันใหม่ที่แอปพลิเคชันไคลเอนต์ใหม่สามารถเริ่มใช้งานได้
ทางเลือกหนึ่งในการใช้การกำหนดเวอร์ชันคือการใช้ URI ด้านล่างนี้คือตัวอย่างวิธีการนำไปใช้
ตัวอย่าง
ให้เราพิจารณาเวอร์ชัน 1 (V1) ของ sudent controller ซึ่งมีวิธีการดำเนินการดังต่อไปนี้
รุ่นนักศึกษา V1 −
namespace DemoWebApplication.Models{ public class StudentV1{ public int Id { get; set; } public string Name { get; set; } } }
ผู้ควบคุมนักเรียน V1 −
using DemoWebApplication.Models; using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class StudentV1Controller : ApiController{ List<StudentV1> students = new List<StudentV1>{ new StudentV1{ Id = 1, Name = "Mark" }, new StudentV1{ Id = 2, Name = "John" } }; [Route("api/v1/students")] public IEnumerable<StudentV1> Get(){ return students; } [Route("api/v1/students/{id}")] public StudentV1 Get(int id){ var studentForId = students.FirstOrDefault(x => x.Id == id); return studentForId; } } }
ในตัวอย่างข้างต้น เราได้ใช้ Attribute Routing เพื่อใช้งานการกำหนดเวอร์ชัน ผลลัพธ์ของตัวอย่างข้างต้นแสดงอยู่ด้านล่าง -
ในตอนนี้ ให้เราพูดในตัวควบคุมของนักเรียนว่า ธุรกิจได้เสนอการเปลี่ยนแปลงใหม่เฉพาะสำหรับผู้ใช้ใหม่และผู้ใช้ที่มีอยู่ควรใช้เวอร์ชัน 1 ดังนั้นในกรณีนี้ เราจึงต้องแนะนำเวอร์ชัน 2 (V2)
รุ่นนักศึกษา V2 −
ตัวอย่าง
namespace DemoWebApplication.Models{ public class StudentV2{ public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } }
ผู้ควบคุมนักเรียน V2 −
using DemoWebApplication.Models; using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class StudentV2Controller : ApiController{ List<StudentV2> students = new List<StudentV2>{ new StudentV2{ Id = 1, FirstName = "Roger", LastName = "Federer" }, new StudentV2{ Id = 2, FirstName = "Tom", LastName = "Bruce" } }; [Route("api/v2/students")] public IEnumerable<StudentV2> Get(){ return students; } [Route("api/v2/students/{id}")] public StudentV2 Get(int id){ var studentForId = students.FirstOrDefault(x => x.Id == id); return studentForId; } } }
ผลลัพธ์
ผลลัพธ์ของตัวอย่างด้านบนแสดงไว้ด้านล่าง