我有一個REST api,它將通過自定義HTTP頭或請求參數接受版本。我這樣做,因爲我不想讓URI包含的版本類似del.icio.us .eg http://server/api/v1/ ...如果我有多個版本的REST api,應該使用什麼默認版本?
現在在我的設計中,HTTP頭具有比要求更高的優先級PARAM。 如果用戶根本不提供任何版本,會發生什麼? 我應該默認爲最早的版本,還是默認爲最新版本?
我有一個REST api,它將通過自定義HTTP頭或請求參數接受版本。我這樣做,因爲我不想讓URI包含的版本類似del.icio.us .eg http://server/api/v1/ ...如果我有多個版本的REST api,應該使用什麼默認版本?
現在在我的設計中,HTTP頭具有比要求更高的優先級PARAM。 如果用戶根本不提供任何版本,會發生什麼? 我應該默認爲最早的版本,還是默認爲最新版本?
根本不要對URI進行版本化。相反,只是版本的表示。這樣客戶就可以決定他們想要使用哪個版本的API,並且它的性能會降低。
實施例:
GET /contacts/3 HTTP/1.1
Accept: application/myapp-v2+xml
HTTP/1.1 200 OK
Content-Type: application/myapp-v2+xml
爲什麼不簡單地製作所需的版本,並拋出一個錯誤,如果它不在那裏?
如果這不是一個選項,那麼你必須使用最舊的版本,否則如果你升級並不保持向後兼容性,你會打破現有的客戶端。
當然,如果您不介意打破現有客戶端,使用最新版本可能會更方便。
如果您的API定義特定的URI或URI命名約定用於訪問資源,你的API是未RESTful的。對於任何REST API,URI構造的版本控制都不是問題。請參閱http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven瞭解更多信息。
我不想拋出錯誤,如果它丟失。該應用程序應該優雅地退化。我想你已經說服我去用最古老的版本。 – 2009-04-22 08:16:46