2012-09-10 53 views
0

我有一個ASP.NET MVC 4應用程序需要使用現有的API到不同的服務。很明顯,ApiController的返回數據和那個常規控制器的返回視圖ASP.NET MVC操作和Javascript需要調用相同的API

我需要某種形式的RESTful API來連接到外部API,用於Javascript功能,但我的動作(呈現視圖)需要調用外部API。總之,我的控制器動作 JavaScript調用的API需要調用一個公共的外部API。

我的問題是這樣的:我該如何設計這個,以便我的操作和JS API使用通用接口進行調用?

我的兩個想法而已:

  1. 爲每個實體ApiController。這些ApiController然後調用外部API。然後,我的Javascipt可以調用這些ApiController,並且在我的操作中,我可以根據需要創建每個ApiController的一個實例並調用它們的方法(GET,POST,PUT等)。這聽起來是否令人討厭?
  2. 將所有業務邏輯放入模型對象,然後調用外部API。要向Javascript公開某些方法,請提供一些HTTP端點,並且JavaScript傳遞要調用的操作的名稱,然後調用Model方法,然後調用外部API。

這些聽起來比另一個更「正確」嗎?或者這只是另一種過度擔憂的情況,並且「做任何你想要的事情」?這裏的目標僅僅是以我的控制器操作可以訪問的Javascript 的通用方式調用一些外部API。

回答

1

我會創建一個API控制器,它將充當您的域和外部Web服務之間的橋樑。現在,您的標準MVC控制器和JavaScript都將使用此API控制器。這裏的問題是,你是否可以使這個API控制器是通用的,以避免你需要爲每個實體創建一個API控制器,但使用相同的控制器。它會避免重複。這是否可能取決於你的確切情況。

0

我如何建築師這個讓我的行動和JS API讓他們的電話有一個共同的接口

我會引入一個低級別的ApiController這確實你的外部API之間的所有底層通信和您的MVC應用程序返回數據。然後在您的View控制器中更新操作以處理通過AJAX訪問它的場景,或者不通過例如

public ActionResult MyAction(...) 
{ 
    // contact middle-ware controller 
    ... 
    // handle response 
    if (Request.IsAjaxRequest()) { 
     return Json(...); // JS specific response 
    } else { 
     return View() // view specific response 
    } 
} 

這使您的API在客戶端&服務器端保持一致。你可以用一個自定義屬性來巧妙地做一些事情,它可以處理響應的類型,從而減少所有操作中代碼的重複。

相關問題