2015-07-03 52 views
0

我的理解MVC應用和API控制器

架構基本MVC web應用程序的(以簡化的方式)

(MVC View -> MVC Controller) -> Biz layer -> Data Access Layer -> DB 

然後,我要支持的移動設備併爲他們提供特定片的信息。所以我只創建適當的API控制器來公開所需的數據。

Mobile device -> API Controller -> Biz layer -> Data Access Layer -> DB 

查詢和懷疑

我看到(或聽到)的下方被建議:

(MVC View -> MVC Controller) -> API Controller -> Biz layer -> Data Access Layer -> DB 

OR

MVC View -> API Controller -> Biz layer -> Data Access Layer -> DB 

的基本想法是,我們揭露整個應用程序功能(Biz層)通過服務。 MVC應用程序將使用API​​控制器。

問題1:API創建

由於這一點,我想只有當我有一些數據被暴露作爲服務(用於移動設備或像我的MVC的Web應用程序創建一個API控制器)。我是否缺少其他一些標準?

問題2:API使用

以上,要求從MVC視圖的API控制器似乎罰款,但不是必需的。但是爲什麼從MVC控制器調用API? (看來我錯了MVC的控制器可以跟直接BIZ層)

問題3:API的優勢

從API返回的數據將被編碼爲JSON並將其發送給客戶端。但是,我們總是可以從MVC控制器返回MVC視圖的JSONResult。在純粹的MVC應用程序中使用API​​控制器是否有優勢?

回答

0

我覺得很有道理,開始與最後一個問題

數據從API返回的將被編碼爲JSON並將其發送給客戶端。 但是,我們始終可以從MVC控制器返回JSONResult,以獲取MVC視圖的 。在純粹的 MVC應用程序中使用API​​控制器是否有優勢?

從功能的角度來看,你可以對MVC控制器做任何事情,你可以用API控制器做什麼,但有更多的編碼。我曾經瞭解一些使用API​​構建MVC控制器的項目,但那是在API控制器發佈之前。因此,如果您的控制器大多數情況下會返回HTML(呈現視圖),那麼構建API控制器以返回JSON來填充下拉列表是沒有意義的。但是,如果它是帶有胖客戶端的單頁應用程序(無論是否爲移動設備)或者只是由第三方客戶端使用的API,則您的選擇應該是API控制器。我建議您閱讀this article以瞭解何時應使用API​​控制器的更多信息。

上面,從MVC視圖調用API控制器似乎很好, 雖然不一定需要。但是爲什麼從MVC 控制器調用API? (看起來對我錯了,MVC控制器可以直接與biz 層對話)

你是對的,這是絕對錯誤的。還有一層不做任何事,只是將瀏覽器請求映射到API中,然後映射讓我們說JSON結果爲HTML,或者只是將它傳遞給doint。此外,還有一個冗餘的HTTP調用,從性能和維護角度來看,這可能是一個巨大的問題。

由於這一點,我會在我的MVC Web應用程序 創建API控制器只有當我有一些數據被暴露作爲服務( 移動設備等)。我是否缺少其他一些標準?

我想我已經回答了上面的問題。所以如果你只是需要公開一些移動設備,我認爲你可以使用相同的控制器,但使用不同的視圖(移動版本),或者爲移動設備構建單獨的UI層(視圖和控制器)。我不明白爲什麼你會想要去API控制器,除非你的移動用戶界面是一個傳統的單頁面應用程序。此外,如果您的目標是長期展示移動設備的所有功能,請查看響應式設計。這樣您將擁有所有設備的相同視圖和控制器。

希望它有幫助!

+0

@nikhil pinto是我的回答有用嗎? –