2008-11-10 42 views
9

Tôi có một dịch vụ web RESTful được triển khai tại http://example.com/v1/SomeResource. Một ngày, phiên bản giao thức mới (không tương thích ngược) được triển khai thành http://example.com/v2/SomeResource. Từ khách hàng xem, nâng cấp này có thể xảy ra bất cứ lúc nào giữa hai yêu cầu HTTP.Dịch vụ RESTful phiên bản?

Máy chủ chỉ ra cho khách hàng biết rằng máy chủ không còn hỗ trợ các cuộc gọi v1 và máy khách dự kiến ​​sẽ nâng cấp lên phiên bản 2 bằng cách nào? Có mã phản hồi thích hợp mà tôi có thể sử dụng không?

tôi muốn cung cấp cho khách hàng các thông tin sau:

nơi
  1. Một nâng cấp không phù hợp đã thực hiện. Không có cách nào để khách hàng sử dụng dịch vụ mới vì giao thức có thể hoàn toàn khác.
  2. URL của phần mềm ứng dụng khách mới.
  3. Thông báo giải thích cho người dùng rằng họ phải nâng cấp.
+2

Đối với những gì nó có giá trị, tôi thấy bài Darrel của (trong một câu hỏi riêng biệt) để được khai sáng: http://stackoverflow.com/questions/972226/how-to-version-rest-uris/975394 # 975394 – Gili

+0

Bản sao có thể có của [Các phương pháp hay nhất cho phiên bản API?] (https://stackoverflow.com/questions/389169/best-practices-for-api -versioning) – Helen

Trả lời

8

Thực hành tốt nhất:

Đây có thể là tốt hơn để giữ cho các phiên bản ra khỏi URL và để làm nguồn năng lượng mới tương thích ngược với cái cũ.

Tương thích ngược:

Nếu bạn phải giữ v1 trong URL, và đang làm cho URL v2, sau đó bạn phải quyết định xem bạn muốn hỗ trợ cả hai định dạng, hoặc làm cho người già v1 lỗi thời. Nếu bạn quyết định làm cũ v1 lỗi thời thì tôi khuyên bạn nên trả lại 303 hoặc 401 cho bất kỳ ai yêu cầu URL v1.

Làm URL cũ lỗi thời:

tôi sẽ khuyên bạn sử dụng 303 Xem khác. Hoặc nếu không có chuyển hướng liên quan, sau đó sử dụng 410 Gone.

Source

303 Xem Khác

Việc đối phó với yêu cầu có thể được tìm thấy dưới một URI khác nhau và NÊN được lấy ra bằng cách sử dụng phương thức GET trên tài nguyên đó. Phương pháp này tồn tại chủ yếu để cho phép đầu ra của tập lệnh kích hoạt POST để chuyển hướng tác nhân người dùng đến tài nguyên đã chọn. URI mới không phải là tài liệu tham khảo thay thế cho tài nguyên được yêu cầu ban đầu. Phản hồi 303 PHẢI KHÔNG được lưu trong bộ nhớ cache, nhưng phản hồi yêu cầu (chuyển hướng) thứ hai có thể là có thể lưu vào bộ nhớ cache.

URI khác nhau NÊN được cung cấp bởi trường Vị trí trong phản hồi. Trừ khi phương thức yêu cầu là HEAD, đối tượng của câu trả lời NÊN chứa ghi chú siêu văn bản ngắn với liên kết tới URI mới.

Lưu ý: Nhiều tiền HTTP/1.1 tác nhân người dùng không hiểu trạng thái 303 . Khi khả năng tương tác với khách hàng như là một mối quan tâm, mã 302 tình trạng có thể được sử dụng thay vào đó, vì hầu hết các đại lý người dùng phản ứng đến một phản ứng 302 như đã mô tả ở đây cho 303.

tài liệu tất cả mọi thứ:

Điều chính cần quan tâm là bất cứ điều gì bạn chọn để trả lại, chỉ cần ghi lại nó trong tài liệu của bạn. Bạn có thể quyết định cách bạn muốn dịch vụ của mình hoạt động, những người khác muốn sử dụng dịch vụ đó sẽ tuân theo tài liệu.

0

Tôi sẽ đề xuất thay vì sử dụng 301 (301 đã chuyển vĩnh viễn). Đọc why.

Hy vọng nó sẽ giúp, Bruno Figueiredo

+1

Tôi không chắc rằng SEO có liên quan đến các dịch vụ RESTful (được tiêu thụ bởi máy móc, không phải người). – Gili

4

Tôi nghĩ bạn không nên làm điều này ở nơi đầu tiên, nhưng có lẽ nó đã quá muộn.

URI cũng nên tĩnh để khi tài nguyên thay đổi hoặc thực hiện những thay đổi dịch vụ, vào liên kết vẫn như cũ. Điều này cho phép đánh dấu trang. Điều quan trọng là mối quan hệ giữa các tài nguyên được mã hóa trong các URI vẫn là độc lập với cách các mối quan hệ được thể hiện trong đó chúng được lưu trữ.

Từ bài viết RESTful Web services: The basics.

+0

Có, trong một thế giới lý tưởng bạn muốn nói đúng, nhưng tôi đang nói về việc phải làm gì khi bạn phải phá vỡ tính tương thích ngược. Nếu tôi có thể duy trì tính tương thích ngược thì tôi sẽ cố giữ các URI giống như bạn đã đề xuất. – Gili

Các vấn đề liên quan