api - 由于存在匹配资源导致资源创建 POST 失败时的 HTTP 响应代码

标签 api rest http post http-status-codes

假设我们有一个 API,可以通过 POST 来创建一个新的 Employee

www.example.com/api/employees

员工可以描述为,

{
  name: "John Smith",
  tax_number: "ABC123"
}

税号对所有人来说都是独一无二的。如果进行了创建,并且名称和税号与现有记录相匹配的记录已经存在,则可以安全地假设请求者希望返回对该记录的引用(及其内部 ID 和客户可能不希望的其他数据)例如,创建于、更新于)。

返回该资源的 HTTP 状态代码是什么?我想重定向可以与仅返回 ID 一起使用,但我更愿意将整个对象包含在响应中。

这种情况是简单重复错误所特有的,从某种意义上说,如果尝试重复,则意味着您要创建的记录已经存在,而不是与现有记录冲突。

最佳答案

我认为如果您将资源发布到 API,您会期望代码 201 表明资源已创建,并且正文将(可以)包含该资源。 否则,您首先必须检查资源是否已创建,但这需要两次调用。

否则,您的状态码为 409:

The request could not be completed due to a conflict with the current state of the resource.

[编辑] 在阅读了 amundsen、Ruby 和 Richardson 的 Restfull Web Apis 之后

最好使用 409 状态代码,表明与服务器上存在的资源存在冲突。将那个“冲突”资源的 url 放在响应的位置 header 中,并在正文中添加冲突消息

关于api - 由于存在匹配资源导致资源创建 POST 失败时的 HTTP 响应代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25541203/

相关文章:

C# 作为用户界面调用 Prolog 作为推理模块

Java 后端和 iOS 客户端 - RESTful

api - NestJS API 接受请求正文中的一种或其他类型

c - 如何包装 C 库以便可以从 Web 服务调用它

c# - 如何使用 TFS API 2013 获取所有迭代路径

javax.ws.rs.NotFoundException : RESTEASY003210: Could not find resource for full path: using RestEASY, Intellij IDEA 16.1,Tomcat 8.0.33

java - 如何捕获 javax.ws.rs.NotAllowedException?

java - Jersey(Java 的 REST 框架)在生产中广泛使用吗?

http - 使用 HTTP 恢复上传?

java - 在 java : HTTP response code 414 中通过 http 读取文件