【问题标题】:Does RESTful design prefer [FromBody] tag?RESTful 设计是否更喜欢 [FromBody] 标签?
【发布时间】:2017-01-18 15:07:08
【问题描述】:

RESTful 设计是否更喜欢 URL 或 [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)/State(1)/Status(0)

然后它应该将 State 设置为 1 并将 Status 设置为 0 以使用 主键 BF6ACF8D-8967-4D2B-BF53-E112D15A609B 的记录。

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

【问题讨论】:

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


    【解决方案1】:

    REST 是关于资源的。其背后的想法是您的访问点应该与特定的资源相关联。

    在开始之前,知道REST和HTTP不需要一起工作,所以RESTsul服务不需要使用HTTP,HTTP也不需要是RESTful。

    在您的示例中,我个人更喜欢[FromBody],因为您可以重新设计您的 URL 方案以使其更加 RESTful。 REST 本身不喜欢[FromBody],因为这是ASP.NET 中的HTTP 构造

    例如,上例中的资源似乎是ServiceActivity,因此PUT 方法使用/ServiceActivity/{serviceActivityGuid:guid} 之类的URL 可能更有意义。实际的例程看起来像您的第二个例程。

    如果您的第一个示例是 GET,那么我会说它更接近 REST 的偏好,但由于它是 PUT,我认为它没有多大意义。我会将第一个示例解释为我们将更新服务活动状态的状态。因此,虽然您的第一个不一定是“错误”本身,但它让我对实际受到影响的资源有错误的认识。

    顺便说一句,我还会查看您的 URL 格式。在我看来,使用Resource({id}) 格式似乎并不符合 REST 和 HTTP 的常见做法。我会研究/Resource/{id}/Subresource/{id} 等格式。

    如果您确实有 GET 要求您查询状态和状态,我会执行类似 /ServiceActivity?state=1&status=0 的操作来返回状态为 1 和状态为 0 的所有活动。

    可以在 hereherehere 找到一些关于 REST 的好资源

    希望这会有所帮助:)

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

    【讨论】:

      猜你喜欢
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多