2013-10-30 50 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