RESTful设计是否更喜欢[FromBody]标签?

时间:2017-01-18 15:07:08

标签: c# .net asp.net-mvc visual-studio rest

RESTful设计是否更喜欢网址或[FromBody]中的数据?

假设我有一个控制器方法:

[Route("ServiceActivity({serviceActivityGuid:guid})/State({serviceAppointmentState:int})/Status({statusCode:int})", Name = "ServiceActivityStateStatusPut")]
[HttpPut]
[NotNull]
public ServiceAppointment ServiceActivityStateStatusPut(int serviceAppointmentState, int statusCode, Guid serviceActivityGuid)
{
    return this.serviceActivityService.UpdateShowTimeAs(serviceAppointmentState, statusCode, serviceActivityGuid);
}

最好是这样做吗?

    [Route("ServiceActivity({serviceActivityGuid:guid})", Name = "ServiceActivityStateStatusPut")]
    [HttpPut]
    [NotNull]
    public ServiceAppointment ServiceActivityStateStatusPut([FromBody] myObject)
    {
        return this.serviceActivityService.UpdateShowTimeAs(myObject);
    }

这应该是当客户导航到:

时的行为
../ServiceActivity({serviceActivityGuid:guid})/State({serviceAppointmentState:int})/Status({statusCode:int})

具体是:

../ ServiceActivity(BF6ACF8D-8967-4D2B-BF53-E112D15A609B)/状态(1)/状态(0)

然后,应将主键BF6ACF8D-8967-4D2B-BF53-E112D15A609B的状态设置为1 ,将状态设置为0

RESTful设计是否更喜欢网址或[FromBody]中的数据?

1 个答案:

答案 0 :(得分:1)

REST就是资源。其背后的想法是您的接入点应该与资源具体相关。

在开始之前,要知道REST和HTTP不需要协同工作,因此RESTsul服务不需要使用HTTP,HTTP也不需要RESTful。

在你的例子中,我会说,我个人更喜欢[FromBody]只是因为你可以重新设计你的URL方案更加RESTful。 REST本身不喜欢[FromBody],因为它是ASP.NET

中的HTTP构造

例如,上述示例中的资源似乎是ServiceActivity,因此/ServiceActivity/{serviceActivityGuid:guid}方法的PUT之类的网址可能会更有意义。实际的例程看起来就像是你的第二个。

如果您的第一个示例是GET,那么我会说它更接近REST更喜欢的内容,但是因为它是PUT我不认为它有多大意义。我会解释第一个例子,说我们将更新服务活动状态的状态。所以,虽然你的第一个不一定是错的' 本身,它让我错误地了解了实际受影响的资源。

另外,我还会查看您的网址格式。在我看来,使用Resource({id})格式似乎并不符合REST与HTTP的通用做法。我会研究像/Resource/{id}/Subresource/{id}等格式。

如果你确实有GET要求你查询状态和状态我会做/ServiceActivity?state=1&status=0这样的事情来返回状态为1且状态为0的所有活动

可以找到一些关于REST的优秀资源hereherehere

希望这会有所帮助:)

编辑关于REST和HTTP的另一个good question并没有完全回答你的问题,但似乎是一个很好的资源。