Tôi đã tìm kiếm trước tiên trong stackoverflow & Tôi không thể tìm ra bất kỳ câu trả lời nào liên quan đến câu hỏi của mình. Tất cả những gì tôi có thể tìm thấy là những câu hỏi liên quan đến thiết kế REST uri.Cách tốt nhất để xử lý phiên bản URI REST API JAX-RS
Câu hỏi của tôi ở phía bên phụ trợ. Giả sử chúng ta có hai phiên bản khác nhau của REST uri của
http://api.abc.com/rest/v1/products
http://api.abc.com/rest/v2/products
là gì phương pháp tốt nhất để làm theo ở phía backend (mã phía máy chủ) cho việc định tuyến thích hợp, quản lý & tái sử dụng hiện tại lớp học trên hai bộ dựa trên phiên bản của api?
Tôi đã nghĩ về cách tiếp cận để xác định các lớp tài nguyên với các chú thích @Path khác nhau cho ví dụ: có một gói cho v1 v2 & riêng & trong ProductsResource lớp của gói phần mềm đó, xác định
package com.abc.api.rest.v1.products;
@Path("/rest/v1/products")
public class ProductsResource {...}
package com.abc.api.rest.v2.products;
@Path("/rest/v2/products")
public class ProductsResource {...}
& sau đó có logic thực hiện dựa trên các phiên bản. Các vấn đề với cách tiếp cận này là khi chúng ta chỉ thay đổi một api tài nguyên cụ thể từ tập hợp các api, chúng ta cũng phải sao chép các lớp khác vào gói v2. Chúng ta có thể tránh nó?
Cách viết chú thích tùy chỉnh cho biết @Version & có giá trị của các phiên bản mà nó hỗ trợ không? Bây giờ cho dù đó là v1 hay v2, cả hai yêu cầu sẽ đi đến cùng một lớp tài nguyên.
Nói ví dụ:
package com.abc.api.rest.products;
@Path("/rest/{version: [0-9]+}/products")
@Version(1,2)
public class ProductsResource {...}
UPDATE:
Có một API versioning gợi ý bởi Jarrod để xử lý phiên bản trong tiêu đề. Đó cũng là một cách để thực hiện điều đó, tuy nhiên, tôi mong đợi các phương pháp hay nhất để sử dụng khi chúng tôi theo dõi phiên bản dựa trên URI
thực tiễn tốt nhất là ** không ** đặt thông tin phiên bản api trong URL –
Đây là một câu hỏi hay, tôi rất ngạc nhiên vì thiếu phản hồi. Có hàng trăm người tranh luận và chống lại phiên bản URI nhưng tất cả các trang web lớn đều làm điều đó vì nó rõ ràng và dễ dàng cho khách hàng sử dụng. @ Deepesh M - bạn đã sử dụng giải pháp nào cuối cùng? – arcseldon
chỉ vì nhiều người làm những việc không chính xác không làm cho nó thành một ý tưởng tốt! nó chỉ có nghĩa là nhiều người đang làm điều đó không chính xác. –