gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:33:55 27 4
gpt4 key购买 nike

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

假设我有一个 Controller 方法:

[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 的记录设置 State 为 1Status 为 0

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

最佳答案

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

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

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

中的 HTTP 结构

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

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

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

如果你有一个 GET 需要你查询状态和状态,我会做类似 /ServiceActivity?state=1&status=0 的事情来返回所有状态为 1 和状态为 0 的事件数。

可以找到一些关于 REST 的好资源 here , here , 和 here

希望这有帮助:)

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

关于c# - RESTful 设计是否更喜欢 [FromBody] 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41722802/

27 4 0