在POST上如果实体存在什么 - 什么是正确的响应

时间:2016-01-07 15:03:54

标签: rest asp.net-web-api http-post http-status-codes

我有一个RESTful API,其中一个可以GET节点和Post节点 - 基本内容。

我的问题"是这样的:

当用户发布新节点时,该节点已存在。 我应该回来吗

  1. 400 bad request
  2. 409 conflict
  3. 200 and the existing node
  4. 我倾向于200并返回现有节点。 但409然后让用户自己获得正确的节点似乎更多"正确"如果你愿意的话。

    什么是最佳实践"在这件事上,对于RESTful api来说?

1 个答案:

答案 0 :(得分:1)

POST的预期结果是创建 new 资源以及201 CREATED状态代码。返回200 OK是不合适的,因为请求不成功。另请参阅RFC:

200 OK

  

请求已成功。随响应返回的信息   取决于请求中使用的方法,例如:

     

获取与所请求资源相对应的实体   响应;

     

HEAD与所请求资源相对应的实体标头字段   在没有任何消息体的情况下在响应中发送;

     

POST 描述或包含操作结果的实体;

请求有问题吗?不,所以400 BAD REQUEST也不合适。

409 CONFLICT

  

由于与资源的当前状态发生冲突,无法完成请求。 此代码仅在预期用户可能能够解决冲突的情况下才允许并重新提交请求。响应主体应该包含足够的

用户是否能够解决冲突?应该是。如果出现冲突,例如因为已经使用了用户名,则可以将其作为错误消息返回给用户,以便他可以选择另一个用户名,从而解决冲突。

我会选择409。