我們將爲我們的API代碼實現一個版本控制系統,該系統建立在sinatra上,並且會有一個默認的API版本,客戶端將能夠選擇添加HTTP Accept Header的特定版本。你的模型應該知道你的API版本嗎?
現在我想了解您是否嚴格保持控制器中的API版本信息,或者允許api版本以某種方式在您的模型中傳遞。如果將它保存在控制器中,那麼在模型中傳播API版本有什麼缺點?
我們將爲我們的API代碼實現一個版本控制系統,該系統建立在sinatra上,並且會有一個默認的API版本,客戶端將能夠選擇添加HTTP Accept Header的特定版本。你的模型應該知道你的API版本嗎?
現在我想了解您是否嚴格保持控制器中的API版本信息,或者允許api版本以某種方式在您的模型中傳遞。如果將它保存在控制器中,那麼在模型中傳播API版本有什麼缺點?
在RESTful API設計中,版本控制是通過選擇媒體類型完成的,我相信這是您正在嘗試執行的操作。如果我正確理解了第二段,那麼您是在問版本信息是否也應該在已傳遞的響應中(即文檔模型的一部分)?
這樣的決定是任意的,但是許多格式在它們自身內部攜帶版本信息,以防它們通過可能丟失元數據(例如版本信息)的有損系統。出於這個原因,我建議將它放在你的模型中。
版本化您的API並不意味着您的控制器在內部處理版本控制,然後與內部處理版本控制的模型進行通信。相反,這意味着您應該擁有基於請求中的API版本在運行時交換的控制器和模型的不同版本。
現在,我認爲從提及Sinatra,你正在使用Ruby。我對Sinatra或Ruby知之甚少,但I answered a similar question for ASP.NET MVC 4並且討論了由Sebastiaan Dammann編寫的版本框架。
也許看看Ruby是否已經存在類似的框架。
有什麼好處?我不明白這對你有什麼幫助 - 如果你正在對API進行集成測試(不模擬模型!),並且它們通過了,那麼需要什麼?模型支持API或者它們不支持。除非我誤解,否則@Nicholas的答案是好的。 – iain