2013-01-25 58 views
0

我使用ASP.NET WebAPI構建RESTful API,我需要支持不同的API版本。 我知道基於URL(api/v1/style)或基於自定義HTTP頭實現控制器選擇的方法。通過這種方式,我將在不同的API版本的不同名稱空間中使用不同的控制器。不過,我還有另一個問題需要考慮。如果我的模型在v1和v2之間變化會怎樣?我如何讓我的v1 API改變它的序列化輸出?我使用的是實體框架代碼優先的方法,所以模型更改很容易實現,但這可能會破壞我的v1 API。確保每個API版本保持一致的最佳方法是什麼?版本控制WebAPI - 模型更改

回答

2

我不明白實體框架與它有什麼關係。我希望你不是直接序列化你的EF模型,是嗎?如果你這樣做,那麼你確實有問題。

您應該改用視圖模型。這些視圖模型隨後可以與您對控制器進行版本控制相同的方式進行版本控制。對於不同版本的控制器,您將擁有不同的視圖模型。

通過這種方式,您可以完全控制通過電線進行序列化的內容。現在,您可以儘可能多地在內部更改EF模型。有一天,你甚至可能會決定放棄EF(因爲它可能會吸引人,並且可能會有一個新的孩子),並將其替換爲完全不同的東西,這種改變將不會反映在你的Web API上,以及暴露給外面只是因爲你正在曝光視圖模型。

+0

我正在序列化我的EF模型,它們只是POCO類 - 當我切換到Hibernate時,我可以使用這些類,例如,我只需要連接一些映射。 –

+0

http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-with-entity-framework/using-web-api-with-entity-framework,-part- 1 本教程似乎也可以。 –

+0

是的,除了那個你觸摸那些實體的時候,你打破了所有的客戶端,因爲你的API依賴於它們。這正是你問這個問題的原因。我對此的回答非常簡單:**從不**連載您的域實體。 **總是**使用視圖模型。您在此鏈接的教程只是如何開始使用Web API的基本示例。當你想要設計一個真實世界的應用程序時,你需要考慮很多事情,而大多數*入門*教程都沒有涉及。其中之一就是版本控制。 –