2015-06-04 74 views
6

因此,我花了幾個小時瀏覽了所有關於Web API版本控制的真正奇妙的建議。一些我的最愛,對於那些有儘可能多的樂趣,因爲我,沒有特定的順序:構建用於版本控制的Web API棧

Best practices for API versioning?

Versioning REST API of an ASP.NET MVC application

http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html

http://www.pluralsight.com/courses/web-api-design

http://www.pluralsight.com/courses/implementing-restful-aspdotnet-web-api

所以所有這些建議對設計都非常有幫助基本上是API的「前端」。我們可以對API調用進行版本化...現在,我正在努力工作。

這是一個嚴重的數據驅動的應用程序,對於一個公司有幾個產品(這是一個新的)每月發佈。一些希望長期支持API調用的大客戶,以及一些希望獲得最新版本的小客戶。我們可以通過類似API的里程碑/長期支持版本進行管理。大。

但實際上這會變得非常混亂,非常快。我們一直努力將我們自己網站的各個層面,Beta內部/外部API,存儲庫層以及一個SDK引導出來。我們將每個版本分成不同的分支,但它是SAAS--我們託管數據庫。所以我們不僅能夠對API調用進行版本管理,而且還能夠對其下的所有內容進行版本管理。業務邏輯,存儲庫和數據庫。我們甚至不開始進行單元/集成測試。

所以,嘗試和可能失敗只能在這裏問一個問題。

是否有一個體面的模式來構建分層的,數據驅動的.NET應用程序來處理多個版本?

具體如何改變數據庫以及如何構建一個通用堆棧來完成它的版本。有些想法我已經包括:

  • 更新堆棧的舊的源控制分支,在同一項目中部署這些
  • 藏在心裏,但使用文件夾/命名空間下
  • 拆分項目進一步一路 - 因此API的解決方案有許多的「控制器」項目,具有類似概念的邏輯/回購層

我們有相當數量的開發商也不管我有多麼王牌文檔寫的,現實也只會是當有東西不能工作時閱讀。所以理想情況下,開發人員必須儘可能明顯地理解這一點。

回答

1

沒有適合所有情況的完美解決方案,不管數據驅動與否。

這真的很難回答。你最好的選擇是使用多個版本控制策略。

例如,如果數據庫更改僅僅是添加一個新列,則舊版本的API可以忽略新列。

如果數據庫更改意味着您必須完全重新編寫存儲庫層,那麼您可能希望創建一個新的存儲庫和新的控制器,而不僅僅是對API方法進行版本控制。然後在端點上,您可以對路由進行版本控制,或者消費者可以調用替換端點。

如果在API的所有級別都有顯着的變化,那麼在IIS上使用單獨的虛擬目錄進行版本控制可能是您的解決方案(並且這可能在源代碼控制中具有相應的分支或標籤,目的僅在於支持錯誤/修復)。

文件夾/命名空間的想法可能會讓開發人員感到困惑,所以我會避開它。路由(即[Route(「/ v4/Orders」)])可能是更好的處理方式。同樣,這取決於代碼的多少和變化的性質。