2011-10-01 55 views
5

我正在使用Django來實現一個私有的類似休息的API,我不確定如何在後端處理不同版本的API。如何實現具有多個版本的API的後端

含義,如果我有2個版本的API,我的代碼是什麼樣的?我應該有不同版本的應用程序嗎?不同的功能應處理不同的版本?或者我應該只使用if語句來表示一個版本與另一個版本不同?

我打算在頭文件中聲明版本。

謝謝

回答

3

您不需要對REST API進行版本化。使用REST,版本控制可以在運行時通過人們可能稱之爲「必須忽略的有效負載擴展規則」或通過內容協商進行。

「必須忽略的有效負載擴展規則」指的是你在消息設計中所建立的一個方面。 「必須忽略」意味着處理給定格式的消息的軟件必須忽略任何未知的語法結構。這就是我們從HTML中知道的,以及如何在HTML頁面中插入各種各樣的花哨標籤而不會解析器窒息的原因。

'必須忽略'允許您通過向您發送的內容添加內容來發展您的服務功能,而不必考慮僅瞭解舊版本的客戶端。

內容協商是指協商HTTP服務器在運行時發送給給定客戶端的實際表示的內置機制。典型的情況是這樣的:客戶端在請求中發送Accept頭部以通告他們有能力並且服務器根據這些能力選擇表示來發回。但也有這個主題的變化(詳情請看這裏:http://www.w3.org/Protocols/rfc2616/rfc2616-sec12.html)。

內容協商允許不兼容的更改,這意味着我可以將我的服務發展爲能夠發送不兼容的舊版本和新版本,並且基於Accept標頭,我的服務將發送適當的更改。底線:使用這兩種方法,您的API保持不變。不需要在API級別進行任何版本控制 - 特別是不會在URI中包含版本標識符(請記住,您在此處執行REST,而不是SOAP!)中包含版本標識符。

+0

如何處理後退不兼容的數據庫/模型更改,同時還允許較舊/部署的客戶端在過渡期間繼續工作? –

相關問題