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

时间:2019-03-13 21:46:16

标签: rest api http-status-codes

我只有一个PUT端点,可以创建/替换实体,而无需返回Location标头或任何实体主体。

总是返回204(无内容)还是有意义的(如果它是一个新实体,应该返回201,如果它是一个替换实体,应该返回204)吗?

1 个答案:

答案 0 :(得分:5)

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

  • 如果根据请求结果创建了资源,则返回201是有意义的。还可以返回Location标头以标识新创建的资源。如果服务器未返回任何Location标头,则客户端将假定有效请求URI标识了新创建的资源。

  • 如果使用请求有效负载中发送的表示对资源进行了修改,则204200是合适的状态代码。使用后者,您可以返回资源新状态的表示形式。

RFC 7231中的一些相关引号:

  

4.3.4. PUT

     

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

     

如果目标资源没有当前表示形式,并且PUT成功创建了一个表示形式,则原始服务器务必通过发送201(已创建)响应来通知用户代理。如果目标资源确实具有当前表示形式,并且该表示形式已根据所包含表示形式的状态被成功修改,则原始服务器务必发送200(确定)或204(否内容)响应,表明请求已成功完成。 [...]

  

6.3.1. 200 OK

     

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

     

[...]

     

PUTDELETE:表示操作状态; <​​/ p>      

[...]

  

6.3.2. 201 Created

     

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

  

6.3.5. 204 No Content

     

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