2014-06-30 26 views
0

我正在開發一個具有移動應用程序的MVC項目,所以有一點很清楚,我們必須使用Web API才能在移動應用程序中使用它。我們應該在相同的解決方案中從MVC應用程序調用Web API嗎?

在我們開始開發Web站點時創建了API之後,我們感到困惑並討論了是使用API​​還是直接訪問Business對象。而且我們最終意見形成了更有經驗的開發人員來消費Web API,而不是直接使用Business對象。

我對此解決方案結構感到困惑。

1)爲什麼我們應該使用的Web API,使HTTP請求(這是費時)獲取或放置數據,而不是業務對象直接是在同一個解決方案。

2)有了參數後,他們說如果客戶想要在不同的雲服務器上託管API和web,並且只在API上應用縮放,或者他想要有不同的URL來訪問API和Web(這是一些什麼邏輯)。那麼在這種情況下,我們應該使用相同的解決方案從MVC應用程序調用Web API?

3)如果我們在不同的主機上託管API和Web,這意味着我們的Web將使用WebClient並在每個導航上都有HTTP調用。這樣對嗎?

4)如果我們將業務對象的形式既API和Web託管不同的服務器上,然後如果BL什麼變化將需要更新構建兩個服務器上。

5)或者,我們應該創建只有一個API項目,並可以添加視圖或HTML頁面開發Web界面,以便通過這種方式,我們可以直接從AJAX調用API。

根據我的知識#5是最好的解決方案或API僅用於第三方訪問。如果我們在相同的解決方案中有DB,EF,數據層和業務層,那麼我們不應該使用API​​來進行HTTP調用並直接訪問業務對象。 (如果我錯了,請糾正我)當移動應用程序或桌面或任何人想訪問應用程序時需要API,以便我們可以擁有相同的存儲庫和數據層。

在我的情況我已經創建API,因爲我們也有移動應用,並在項目API方面,我們稱爲業務層(單獨的項目)和業務層通信,數據訪問層(單獨的項目)。所以我的問題是,如果我們將API和Web託管到不同的服務器,那麼調用API是一個HTTP請求,可能需要更長的時間,而不是使用來自業務層的方法,因爲我們創建項目,而且我們有.dll的業務層。在API控制器中,我們只是將我們的業務轉換爲json格式。

我在互聯網上搜索,但沒有得到令人信服的答案。我發現博客http://odetocode.com/blogs/scott/archive/2013/07/01/on-the-coexistence-of-asp-net-mvc-and-webapi.aspx討論同樣的觀點,但在博客中,我的問題是爲什麼我們需要考慮場景#3?

回答

3

我想你已經回答了書面你自己的問題,但實際上這完全歸結爲你的要求是什麼,也許更重要的是,您的應用程序的策略是什麼。

首先,使用Web API時,訪問業務對象直接(通過我想你的意思通過的ViewModels等)纔有意義,如果你正在控制數據客戶端的訪問。

如果您只需要在特定應用程序中從客戶端使用數據,那麼在相同項目中託管Web API是有道理的。有時,例如,在構建SPA或富客戶端Web應用程序時,在同一項目內使用Web Api就足夠了,因爲它們只能用於該應用程序。

如果您看到了不同版本的同一應用(手機,平板電腦,網絡等)的要求,那麼網絡API移動到一個單獨的項目是有道理的,因爲每個應用程序可以再訪問相同的API。該Web Api將包含您的數據訪問和業務邏輯層。這使您的項目完全分離的話,並提供最大的可重用性,並確保在不同版本的項目之間的數據一致性。顯然,這種設置,你的Web API層是獨立的,並且可以測試/部署/縮放分開。

因此,在總結,你需要考慮你的要求和評估提供給你實現目標的技術。使用上面的內容,我希望你瞭解Web Api的適用範圍以及它可以提供什麼。

+0

謝謝!在我的情況我已經創建API,因爲我們也有移動應用,並在項目API方面,我們稱爲業務層(單獨的項目)和業務層通信,數據訪問層(單獨的項目)。所以我的問題是,如果我們將API和Web託管到不同的服務器,那麼調用API是一個HTTP請求,可能需要更長的時間,而不是使用來自業務層的方法,因爲我們創建項目,而且我們有.dll的業務層。在API控制器中,我們只是將我們的業務轉換爲json格式。 –

相關問題