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]中的数据?
答案 0 :(得分:1)
REST就是资源。其背后的想法是您的接入点应该与资源具体相关。
在开始之前,要知道REST和HTTP不需要协同工作,因此RESTsul服务不需要使用HTTP,HTTP也不需要RESTful。
在你的例子中,我会说,我个人更喜欢[FromBody]
只是因为你可以重新设计你的URL方案更加RESTful。 REST本身不喜欢[FromBody]
,因为它是ASP.NET
例如,上述示例中的资源似乎是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的优秀资源here,here和here
希望这会有所帮助:)
编辑关于REST和HTTP的另一个good question并没有完全回答你的问题,但似乎是一个很好的资源。