Tôi đã đọc về các chiến lược phiên bản dành cho API ReST và thứ gì đó không có trong số chúng xuất hiện để giải quyết là cách bạn quản lý mã cơ sở bên dưới.Làm cách nào để bạn quản lý codebase cơ bản cho API được phiên bản?
Giả sử chúng tôi đang thực hiện một loạt các thay đổi đối với API - ví dụ: thay đổi tài nguyên Khách hàng của chúng tôi để trả về các trường forename
và surname
riêng thay vì một trường name
. (Đối với ví dụ này, tôi sẽ sử dụng giải pháp phiên bản URL vì dễ hiểu các khái niệm có liên quan, nhưng câu hỏi cũng có thể áp dụng cho thương lượng nội dung hoặc tiêu đề HTTP tùy chỉnh)
Hiện tại chúng tôi có điểm cuối tại http://api.mycompany.com/v1/customers/{id}
và một điểm khác điểm cuối không tương thích tại http://api.mycompany.com/v2/customers/{id}
. Chúng tôi vẫn đang phát hành các bản sửa lỗi và cập nhật bảo mật cho API phiên bản 1 nhưng tính năng phát triển tính năng mới giờ đây tập trung vào v2. Làm cách nào để viết, thử nghiệm và triển khai các thay đổi đối với máy chủ API của chúng tôi? Tôi có thể thấy ít nhất hai giải pháp:
Sử dụng chi nhánh/thẻ kiểm soát nguồn cho codebase v1. v1 và v2 được phát triển và được triển khai độc lập với các sửa đổi kiểm soát được sử dụng khi cần thiết để áp dụng cùng một lỗi cho cả hai phiên bản - tương tự như cách bạn quản lý các mã nguồn cho ứng dụng gốc khi phát triển phiên bản chính mới trong khi vẫn hỗ trợ phiên bản trước.
Làm cho chính codebase nhận thức được các phiên bản API, vì vậy bạn kết thúc với một mã đơn lẻ bao gồm cả biểu diễn khách hàng v1 và đại diện khách hàng v2. Coi phiên bản như một phần của kiến trúc giải pháp của bạn thay vì vấn đề triển khai - có thể sử dụng một số kết hợp của không gian tên và định tuyến để đảm bảo yêu cầu được xử lý bởi phiên bản chính xác.
Ưu điểm rõ ràng của mô hình chi nhánh là nó tầm thường để xóa các phiên bản API cũ - chỉ dừng triển khai các chi nhánh/thẻ thích hợp - nhưng nếu bạn đang chạy một số phiên bản, bạn có thể kết thúc với một thực sự phức tạp cấu trúc nhánh và đường ống triển khai. Mô hình "codebase thống nhất" tránh được vấn đề này, nhưng (tôi nghĩ vậy?) Sẽ làm cho nó khó khăn hơn nhiều trong việc loại bỏ các tài nguyên không được chấp nhận và các điểm cuối khỏi codebase khi chúng không còn cần thiết nữa. Tôi biết điều này có lẽ chủ quan vì không có khả năng là một câu trả lời đúng, nhưng tôi tò mò muốn hiểu cách các tổ chức duy trì các API phức tạp trên nhiều phiên bản đang giải quyết vấn đề này.
Cảm ơn bạn đã đặt câu hỏi này! Tôi KHÔNG THỂ tin rằng nhiều người hơn không trả lời câu hỏi này !! Tôi bị bệnh và mệt mỏi vì mọi người đều có ý kiến về việc các phiên bản tham gia vào một hệ thống như thế nào, nhưng không ai có thể giải quyết được vấn đề khó khăn trong việc gửi các phiên bản tới mã thích hợp của họ. Bởi bây giờ nên có ít nhất một loạt các "mẫu" được chấp nhận hoặc "giải pháp" cho vấn đề này dường như phổ biến. Có một số câu hỏi điên rồ về SO liên quan đến "phiên bản API". Quyết định cách chấp nhận các phiên bản là FRIKKIN SIMPLE (tương đối)! Xử lý nó trong codebase một khi nó được vào, là HARD! – arijeet