2013-10-30 52 views
1

我正在做一些R & D這似乎是一個非常令人困惑的話題,我也讀過其他一些SO問題,但我覺得我的問題可能足夠獨特以保證我問。我們從未開發過使用純WebAPI的應用程序。Restful WebAPI VS常規控制器

我們試圖寫一個SPA風格的應用程序,在後端完全從前端代碼

脫鉤假設我們的服務不知道誰在訪問/消耗任何東西:

WebAPI似乎是服務數據的邏輯路線,與使用標準MVC控制器相反,並通過操作結果提供數據並將其轉換爲JSON。這對我來說至少看起來像一個MC設計......這看起來很奇怪,而不是MVC的意思。 (看媽媽...沒有看法)

什麼會考慮正常的約定在執行行動(y)電話?

我的感覺是,我對WebAPI的理解是不正確的。

我覺得WebAPI的方式是它的意思是用在CRUD的意義上,但是如果我想做類似如下的事情:「InitialiseMonthEndPayment」....我需要創建一個WebAPI控制器,叫做InitialiseMonthEndPaymentController,然後執行POST ...看起來有點奇怪,與MVC控制器相反,我可以在MonthEnd控制器上添加一個名爲InitialisePayment的新操作。

或者這是否需要設計方面的心態轉變?

關於這個主題的任何進一步的鏈接將是非常有用的,因爲我的恐懼是我們實現了一些可能會奇怪的事情,可能會變成後面的編碼/維護問題?

+0

視圖移動到Javascript模塊。看看[Hot Towel SPA示例](http://www.johnpapa.net/hottowel/),瞭解它的工作原理。 – jfrankcarr

回答

2

如果您打算讓您的服務成爲RESTful,那麼控制器應代表資源。在你的例子中,資源是Payment,所以控制器將被稱爲PaymentController

您可以在同一個控制器中擁有多個POST方法。在你的場景中,我會調用動作方法PostMonthlyPayment或類似的東西。該URL(路由)會是什麼樣子http://server.com/api/payment/monthly和身體(假設JSON)會是這樣的:

{ 
    user: [email protected], 
    month: 10, 
    year: 2013, 
    // any additional data 
} 

如果支付經歷,一個好的做法是返回HTTP錯誤代碼201,幷包含位置HTTP頭付款GET方法的網址。如果正文中有任何數據錯誤,請返回錯誤代碼400.如果用戶已經付款,則可以使用衝突代碼409。

+0

我喜歡這個建議。將在概念證明中嘗試。但似乎這個問題的確是我們如何進行設計/編程的轉變。 –

+0

只是出於興趣,如果我更新rouer允許我提供另一個額外的參數,例如「每月」,有沒有辦法做到這一點特定於此控制器?(例如,並非所有的控制器現在都可以訪問額外的參數,例如「持續時間」(其中持續時間是每月)) –

+1

您需要使用自定義路由。 Web Api 2.0/MVC 5支持基於屬性的路由。 –

0

對於SPA,您肯定會需要REST Web服務。我的建議是嘗試使用servicestack而不是WebApi