我正在研究在ASP.NET MVC 3中開發應用程序,並且希望同時提供一個公共API。ASP.NET MVC應用程序的版本控制REST API
從環顧四周,似乎有兩種方法可以解決這個問題。要麼創建一個API區域並使控制器返回json/xml。或者使用動作過濾器和一組前端控制器,並根據請求頭返回json/xml/html。
我想要做的更晚,但我想知道如果你走這條路線你怎麼可以去版本化你的api?
如果你走的第一條路線,你可以很容易地創建一個v1/v2控制器,但如果你以後做,你怎麼能版本?
我正在研究在ASP.NET MVC 3中開發應用程序,並且希望同時提供一個公共API。ASP.NET MVC應用程序的版本控制REST API
從環顧四周,似乎有兩種方法可以解決這個問題。要麼創建一個API區域並使控制器返回json/xml。或者使用動作過濾器和一組前端控制器,並根據請求頭返回json/xml/html。
我想要做的更晚,但我想知道如果你走這條路線你怎麼可以去版本化你的api?
如果你走的第一條路線,你可以很容易地創建一個v1/v2控制器,但如果你以後做,你怎麼能版本?
您可以選擇兩條路線之一 - 您可以在路線中包含API(而不是http://app.lication/category/1
,您將擁有類似http://app.lication/api/v1/category/1
的東西),也可以包含custom HTTP header。
兩者都將允許您區分正在調用哪個版本。
版本控制是一個相當複雜的問題。以下是我之前看過的方式:
許多建議選擇4,雖然它並不總是可行的。大多數這些選項需要額外的工作才能使用ASP.NET MVC。
如果您有興趣的方法#1(我的偏好),然後看看這個NuGet包和對應的代碼/ GitHub上的例子:https://www.nuget.org/packages/VersionedRestApi/1.0.0.2 – jakejgordon 2015-11-07 15:05:28
對進場# 2(我的偏好),用戶代理將是這種方法(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43)右頭。 「該字段可以包含多個產品標記(第3.8節)以及標識代理的註釋以及構成用戶代理的重要部分的任何子產品」 示例爲:User-Agent:YOUR_API_ID/2.0 – 2015-11-18 15:29:00
我不同意使用用戶代理版本API。規範是指客戶端產品。例如,連接到HTTP服務器的瀏覽器。當客戶端的應用程序開發人員使用User-Agent指定其客戶端時,它具有更多的好處,以便我們可以從客戶端角度跟蹤API使用情況。 AppX/1.1在對MyAPI v1.1的某些調用失敗時非常有用,但AppX/1.2不支持。你會失去那種跟蹤。 – bloudraak 2015-12-06 05:54:59
關於選項1 - 你能詳細點嗎?在執行OP所要做的事時,如何做到這一點並不明顯 - 根據請求頭返回json/xml/html的一組控制器。因爲大概他不想在他的html網址中使用'/ v1'。 – 2012-02-08 17:12:39
@GabeMoothart - 你會使用ASP.Net路由(http://msdn.microsoft.com/en-us/library/cc668201.aspx)來定義/提取URL參數。將API作爲路徑的一部分並不意味着您需要爲每個API都有一個控制器(如果這些API完全不同,也不排除它)。 – 48klocs 2012-02-08 18:21:07