Restful Web API VS常规控制器

时间:2013-10-30 13:16:25

标签: rest asp.net-mvc-4 asp.net-web-api

我正在做一些似乎是一个非常令人困惑的话题的R& D,我也读了很多其他的SO问题,但我觉得我的问题可能足够独特,值得我提问。我们从未使用纯WebAPI开发应用程序。

我们正在尝试编写SPA风格的应用,后端与前端代码完全分离

假设我们的服务不知道访问/使用它的人:

WebAPI似乎是提供数据的逻辑路径,而不是使用标准MVC控制器,并通过操作结果提供数据并将其转换为JSON。这对我来说至少看起来像是一个MC设计......这似乎很奇怪,而不是MVC的意思。 (看妈妈......没有看法)

在执行动作(y)调用方面,什么是正常约定?

我的感觉是我对WebAPI的理解不正确。

我认为WebAPI的方式是它意味着在CRUD意义上使用,但如果我想做类似的事情:“InitialiseMonthEndPayment”......我是否需要创建一个名为InitialiseMonthEndPaymentController的WebAPI控制器,然后执行POST ...看起来有点奇怪,而不是MVC控制器,我可以在MonthEnd控制器上添加一个名为InitialisePayment的新动作。

或者这是否需要在设计方面转变心态?

关于这个主题的任何进一步链接都非常有用,因为我担心我们会实施一些可能会很奇怪的东西,以后可能变成编码/维护问题?

2 个答案:

答案 0 :(得分:2)

如果您计划将服务设为RESTful,则控制器应代表资源。在您的示例中,资源为Payment,因此控制器将被称为PaymentController

您可以在同一个控制器中拥有多个POST方法。在您的场景中,我会调用操作方法PostMonthlyPayment或类似的东西。 URL(路由)看起来像http://server.com/api/payment/monthly,而正文(假设JSON)将是这样的:

{
   user: user@internet.com,
   month: 10,
   year: 2013,
   // any additional data
}

如果付款通过,最好将HTTP错误代码201和包含URL的位置HTTP标头返回到付款GET方法。如果正文中的任何数据有误,请返回错误代码400.如果用户已付款,则冲突代码409可以正常工作。

答案 1 :(得分:0)

对于SPA,您肯定需要REST Web服务。我的建议是尝试servicestack而不是WebApi