เมื่อบริการ 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;
}
}
} ผลลัพธ์
ผลลัพธ์ของตัวอย่างด้านบนแสดงไว้ด้านล่าง

