Tôi đã xem Best practices for API versioning?, nhưng không hoàn toàn bị thuyết phục về câu trả lời, vì vậy tôi hỏi phần phiên bản một lần nữa với một ví dụ cụ thể hơn. Tôi đang có hai URI (một phiên bản là một phần của URI và một không có):REST api versioning (chỉ phiên bản đại diện, không phải bản thân tài nguyên)
http://xxxx/v1/user/123 -> favored solution in discussed thread
http://xxxx/user/123
Tôi đang nghi ngờ liệu liên kết đầu tiên có thể đưa ra ý tưởng về REST hay không. Tôi thấy http://xxxx/v1/user/123
gây nhầm lẫn vì nó cho thấy rằng sẽ có một phiên bản api cao hơn vào một ngày nào đó như http://xxxx/v2/user/123
. Nhưng điều này không có ý nghĩa trong các thuật ngữ REST, bản thân api là HTTP 1.0 hoặc 1.1, đã được gửi bên trong yêu cầu HTTP. Khung nhìn trung tâm tài nguyên REST này khác rất nhiều so với các giao diện api khác như SOAP hoặc giao diện Java (nơi mà thông thường có các phiên bản api trong các tên đủ điều kiện).
Tại REST điều duy nhất trong đó phiên bản có ý nghĩa là sự biểu diễn của tài nguyên đó (ví dụ: các trường mới được thêm hoặc xóa). phiên bản này thuộc về một phần của nội dung đàm phán như:
http://xxx/user/123 + HTTP 'Accept' Header -> Content negotation through header
http://xxx/user/123?v=1 -> for perma-links/hyperlinks
Người ta cũng có thể lập luận rằng đó là phiên bản nội dung đàm phán có thể là một phần của URI bên con đường, nhưng tôi thấy nó phản trực giác, bởi vì bạn có thể kết thúc với các URI khác nhau cho cùng một tài nguyên và phải duy trì chuyển hướng tại một số điểm.
Để tổng hợp: Trong các URI REST không có phiên bản api, chỉ phiên bản trình bày của tài nguyên. Phiên bản đại diện-thông tin thuộc về thương lượng nội dung (như queryParam hoặc HTTP 'Chấp nhận').
Bạn nghĩ sao? Bạn sẽ không đồng ý với những điều gì?
chỉ là một điều nhỏ cần thêm. chỉ showstopper với tôi và sử dụng ... v1/style là, khi bạn không có sự cân bằng tải dưới sự kiểm soát và không thể xác định hướng đến các máy chủ ứng dụng trên cơ sở tiêu đề HTTP trên frontmachines (-> thương lượng nội dung là một phần của tiêu đề HTTP). Thường thì tiêu chuẩn là sử dụng đường dẫn URL. và trong các khung công tác trên web, tôi có thể nghĩ rất khó để xác định các điểm cuối ánh xạ yêu cầu bên trong bộ điều khiển trên cơ sở tiêu đề HTTP thay vì đường dẫn. –