2013-01-25 51 views
1

我們將爲我們的API代碼實現一個版本控制系統,該系統建立在sinatra上,並且會有一個默認的API版本,客戶端將能夠選擇添加HTTP Accept Header的特定版本。你的模型應該知道你的API版本嗎?

現在我想了解您是否嚴格保持控制器中的API版本信息,或者允許api版本以某種方式在您的模型中傳遞。如果將它保存在控制器中,那麼在模型中傳播API版本有什麼缺點?

+0

有什麼好處?我不明白這對你有什麼幫助 - 如果你正在對API進行集成測試(不模擬模型!),並且它們通過了,那麼需要什麼?模型支持API或者它們不支持。除非我誤解,否則@Nicholas的答案是好的。 – iain

回答

0

在RESTful API設計中,版本控制是通過選擇媒體類型完成的,我相信這是您正在嘗試執行的操作。如果我正確理解了第二段,那麼您是在問版本信息是否也應該在已傳遞的響應中(即文檔模型的一部分)?

這樣的決定是任意的,但是許多格式在它們自身內部攜帶版本信息,以防它們通過可能丟失元數據(例如版本信息)的有損系統。出於這個原因,我建議將它放在你的模型中。

+0

我認爲你所說的關於在響應中保留版本的建議是正確的,但我認爲它們是從MVC模式引用數據模型中的模型。可能:) – iain

+0

這是什麼被寫入磁盤/套接字,所以它是同樣的事情,不是嗎? –

+0

我會說HTTP響應和模型(在MVC中)並不相同,儘管響應將在某種程度上包含模型的表示,但我認爲(對於我)OP需要澄清它們是什麼我正在談論。 – iain

0

版本化您的API並不意味着您的控制器在內部處理版本控制,然後與內部處理版本控制的模型進行通信。相反,這意味着您應該擁有基於請求中的API版本在運行時交換的控制器和模型的不同版本。

現在,我認爲從提及Sinatra,你正在使用Ruby。我對Sinatra或Ruby知之甚少,但I answered a similar question for ASP.NET MVC 4並且討論了由Sebastiaan Dammann編寫的版本框架。

也許看看Ruby是否已經存在類似的框架。