Sau khi dịch vụ API Web được đặt ở chế độ công khai, các ứng dụng khách khác nhau sẽ bắt đầu sử dụng các dịch vụ API Web của chúng tôi. Khi doanh nghiệp phát triển và các yêu cầu thay đổi, chúng tôi cũng có thể phải thay đổi các dịch vụ, nhưng các thay đổi đối với dịch vụ phải được thực hiện theo cách không phá vỡ bất kỳ ứng dụng khách hiện có nào.
Đây là khi lập phiên bản API Web hữu ích. Chúng tôi giữ nguyên hiện trạng của các dịch vụ hiện có, vì vậy chúng tôi sẽ không phá vỡ các ứng dụng khách hiện có và phát triển phiên bản dịch vụ mới mà các ứng dụng khách mới có thể bắt đầu sử dụng.
Một trong những tùy chọn để triển khai lập phiên bản là sử dụng URI. Dưới đây là một ví dụ về cách triển khai tương tự.
Ví dụ
Chúng ta hãy xem xét phiên bản 1 (V1) của bộ điều khiển sudent có các phương thức hành động sau.
Mô hình sinh viên V1 -
namespace DemoWebApplication.Models{ public class StudentV1{ public int Id { get; set; } public string Name { get; set; } } }
Bộ điều khiển sinh viên 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; } } }
Trong ví dụ trên, chúng tôi đã sử dụng Định tuyến thuộc tính để triển khai lập phiên bản. Đầu ra của ví dụ trên được hiển thị bên dưới -
Bây giờ chúng ta hãy nói trong bộ điều khiển sinh viên, doanh nghiệp đã đề xuất một thay đổi mới chỉ dành cho người dùng mới và những người dùng hiện tại vẫn nên sử dụng Phiên bản 1. Vì vậy, trong trường hợp này, chúng tôi phải giới thiệu Phiên bản 2 (V2).
Mẫu sinh viên V2 -
Ví dụ
namespace DemoWebApplication.Models{ public class StudentV2{ public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } }
Bộ điều khiển sinh viên 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; } } }
Đầu ra
Kết quả của ví dụ trên được hiển thị bên dưới.