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

Vis*_*ean 2 rest http-post http-status-codes asp.net-web-api

我有一个 RESTful API,可以在其中添加GET节点和Post节点 - 基本的东西。

我的“问题”是这样的:

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

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

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

对于 RESTful api 来说,在这个问题上的“最佳实践”是什么?

Tim*_*Tim 5

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

200 好

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

GET 在响应中发送与所请求资源相对应的实体;

HEAD 与所请求资源相对应的实体头字段在响应中发送,不带任何消息主体;

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


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


409 冲突

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

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

我会选择409。