2012-10-11 84 views
1

可能重複:
How to version REST URIs最好的方法調用

我目前正在寫一個REST服務,我想獲得關於如何我的客戶的一些想法可以在提出請求時指定服務版本。

例如,當我升級我的REST服務器版本2,我不希望呼叫打破已實施我的服務的版本1的所有客戶端。

我看到別人在URL中添加的版本或指定某個標題中的版本。

有可能不是「最佳」的方式來實現這一點,但我希望關於這個問題的一些想法(親的和各等反對的......)

感謝

+0

你讀過嗎?很好的概述這個主題,以及一些有用的鏈接 - http://www.infoq.com/news/2010/03/rest-versioning-strategies。 – dash

+0

這聽起來像一個糟糕的主意,你不應該修改像這樣已經存在的功能(因此使用版本)。當創建一個公共服務/ api /無論你怎麼稱呼它 - 你有一個機會讓它正確! – Anders

回答

4

我們通過單獨做路線:

http://my.service.com/v1/user/1 

http://my.service.com/v2/user/1 

版本之間沒有變化的情況下,我們只映射到服務資源的V1版本控制器的路線。

是的,這的確創建多個URL對相同的資源,而靠不住的鐵桿REST evanginlists會開始哭,但這種方式可以很容易地管理您和您的用戶。我發現用戶甚至不能使用請求標頭設置內容類型之類的東西,從來不需要X-Path或類似的東西來處理版本控制......

如果你真的想避免重複資源問題,你可以通過一個get參數喜歡的版本:

http://my.service.com/user/1?version=1 

如果沒有版本,默認爲任意。這實際上完全是REST教條式的,但我認爲它會對API用戶產生很大影響。

你可以做一些用戶的查找表到版本之間的航線,如果你有一個方法來映射用戶或API密鑰版本,但是這是很瘋狂的開銷。

+0

該解決方案非常好,因爲它允許在不同版本中使用不同的URL模式。如果您要使用像'version = 1'這樣的URL參數,那麼您的路徑在各個API版本中需要保持一致。 – JasonWyatt

+1

@JasonWyatt查看我對url參數的編輯。希望您的資源位置在軟件版本中不會發生顯着變化......這是創建用戶API時要避免的最重要的事情之一。我知道他們這樣做,我知道v1,v2是一個變化,但其餘的資源路徑希望保持不變。我認爲當用戶準備使用新版本時,用戶會將v1更改爲v2。 – Ray

+0

@JasonWyatt在經過一定的時間讓老api的depricate之後,你可以將舊的v1轉到v2。 – Ray

0

我會通過接受/ Content-Type頭推薦版本。除非資源本身發生大的結構性變化,否則URI不應該跨版本更改。這裏是一個很好的解釋:Best practices for API versioning?

+0

由於客戶端指定accept頭來告訴服務器他喜歡哪種格式的響應,我認爲這是有道理的。但是如果特定的服務呼叫沒有響應,或者只有「成功更新」的200響應? ..這是有道理在這裏做的URL在版本。而不是在兩個地方都進行版本控制,這對我來說很簡單,只需保持簡單,然後版本化即可。 – RayLoveless