在POST上假设实体存在-什么是正确的响应



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

我的"问题"是:

当用户发布一个新节点,并且该节点已经存在时。我应该退回吗

  1. 400 bad request
  2. 409 conflict
  3. 200 and the existing node

我倾向于200,并返回现有的节点。但是如果你愿意的话,409然后让用户自己获得正确的节点似乎更"正确"。

对于RESTful api来说,这方面的"最佳实践"是什么?

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

200 OK

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

GET在回答

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

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


请求有什么问题吗?不。所以400坏请求也不太合适。


409冲突

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

用户是否能够解决冲突?是的,可能吧。例如,如果由于用户名已被占用而发生冲突,您可以将其作为错误消息返回给用户,以便他可以选择另一个用户名,从而解决冲突。

我会选择409。

最新更新