upsert(插入/更新)端点的HTTP状态代码

问题描述 投票:1回答:1

我有一个PUT端点,它创建/替换一个实体,不需要返回一个Location头或任何实体。

总是返回204(No Content)是否有意义,或者如果它是一个新实体,它应该是201吗?如果它取代了实体,它是204吗?

rest api http-status-codes
1个回答
5
投票

状态代码用于指示服务器尝试理解和满足请求的结果。这里有两种情况:

  • 如果作为请求的结果创建了资源,则返回201是有意义的。还可以返回Location头以标识新创建的资源。如果服务器未返回Location头,则客户端将假定新创建的资源由有效请求URI标识。
  • 如果已使用请求有效负载中发送的表示修改了资源,则204200是合适的状态代码。使用后者,您可以返回资源的新状态的表示。

来自RFC 7231的一些相关引用:

4.3.4. PUT

PUT方法请求使用请求消息有效负载中包含的表示定义的状态创建或替换目标资源的状态。 [...]

如果目标资源没有当前表示并且PUT成功创建了一个,那么源服务器必须通过发送201(Created)响应来通知用户代理。如果目标资源确实具有当前表示并且该表示根据所包含的表示的状态被成功修改,则源服务器必须发送200(OK)或204(No Content)响应以指示成功完成请求。 [...]

6.3.1. 200 OK

200(OK)状态代码表示请求已成功。在200响应中发送的有效负载取决于请求方法。对于本规范定义的方法,有效载荷的预期含义可归纳为:

[...]

PUTDELETE:表明行动的地位;

[...]

6.3.2. 201 Created

201(已创建)状态代码表示已完成请求并已导致创建一个或多个新资源。由请求创建的主要资源由响应中的Location头字段标识,或者如果没有接收到Location字段,则由有效请求URI标识。 [...]

6.3.5. 204 No Content

204(无内容)状态代码表示服务器已成功完成请求,并且在响应有效负载正文中没有要发送的其他内容。响应头字段中的元数据在应用请求的操作后引用目标资源及其选定的表示。 [...]

© www.soinside.com 2019 - 2024. All rights reserved.