2008-11-10 157 views
9

我有一個RESTful Web服務部署在http://example.com/v1/SomeResource。有一天,一個新的協議版本(不向下兼容)部署到http://example.com/v2/SomeResource。從客戶端來看,這種升級可能發生在兩個HTTP請求之間的任何時候。版本控制RESTful服務?

服務器如何向客戶端指示不再支持v1調用,並且客戶端需要升級到v2?有沒有適合我使用的迴應碼?

我想提供以下信息客戶端:

  1. 不兼容的升級已經發生。客戶端無法使用新服務,因爲協議可能完全不同。
  2. 新客戶端軟件的URL。
  3. 向用戶解釋必須升級的消息。
+2

對於它的價值,我覺得達雷爾的帖子(在一個單獨的問題)是啓發:http://stackoverflow.com/questions/972226/how-to-version-rest-uris/975394#975394 – Gili 2010-02-23 04:39:57

+0

[API版本控制的最佳實踐?]的可能重複(https://stackoverflow.com/questions/389169/best-practices-for-api - 版本) – Helen 2017-10-10 22:45:46

回答

8

最佳實踐:

它可能會更好,以保持版本出來的URL,並作出新的資源後向兼容舊的兼容。

向後兼容:

如果你必須保持V1的URL,並正在V2的URL,那麼你必須決定是否要支持這兩種格式,或使舊V1過時。如果您決定讓舊版v1過時,那麼我建議您爲請求v1網址的任何人返回303或401。

使舊網址已過時:

我會建議使用303查看其它。或者如果沒有關聯重定向,則使用410 Gone。

Source

303查看其它

於所述請求的響應可以根據不同的URI被 發現並且應該 使用GET方法上 該資源進行檢索。此方法主要用於允許 POST激活的腳本的輸出將 用戶代理重定向到選定的資源。對於最初請求的資源,新的URI不是替代參考 。 不得高速緩存303響應, ,但對第二個 (重定向)請求的響應可能是可緩存的 。

不同的URI應該由 響應中的位置字段給出。 除非請求方法是HEAD, 響應的實體SHOULD 包含一個短超文本註釋和一個 超鏈接到新的URI。

注意:許多pre-HTTP/1。1個用戶代理不瞭解303 的狀態。當與這樣的客戶的互操作性是一個問題,在 302狀態碼可以替代地使用,因爲大多數用戶代理如這裏描述的用於303

文獻一切反應 到302響應:

主要關心的是您選擇返回的任何內容,只需在文檔中記錄它即可。你可以決定你的服務如何工作,其他想要使用它的人會遵循文檔。

0

我會推薦使用301(301 Moved Permanently)。閱讀why

希望它能幫助, 布魯諾·菲格雷多

+1

我不確定搜索引擎優化是否與RESTful服務相關(被機器使用,而不是人)。 – Gili 2008-11-10 20:14:31

4

我想你不應該擺在首位做到這一點,但可能爲時已晚。

的URI還應該是靜態的,這樣 當資源的變化或 實施服務變更, 鏈接保持不變。這允許 書籤。同樣重要的是,在URI中編碼的資源 之間的關係仍然是 ,而與 關係被表示的方式無關,其中 被存儲。

來自文章RESTful Web services: The basics

+0

是的,在一個理想的世界中,你會是對的,但我正在談論當你不得不打破向後兼容性時該怎麼做。如果我可以保持向後兼容性,那麼我會盡量保持你所建議的相同的URI。 – Gili 2008-11-11 19:45:39