想象一下,我们有一个API,可以通过POST来创建新的员工
www.example.com/api/employees
员工可以被描述为,
{
name: "John Smith",
tax_number: "ABC123"
}
税号对所有人来说都是独一无二的。如果创建了一个创建,并且已经存在一个名称和税号与现有记录匹配的记录,则可以安全地假设请求者想要返回该记录的引用(使用它的内部id和其他数据,客户端可能不会有,例如,创建于,更新于)。
返回该资源的HTTP状态代码是什么?我想重定向可以用于返回id,但我更喜欢将整个对象包含在响应中。
这种情况对于简单的重复错误是唯一的,因为如果尝试重复,则意味着您希望创建的记录已经存在 - 而不是与现有记录冲突。
答案 0 :(得分:19)
我认为如果您将资源发布到API,您希望代码201将声明资源已创建,并且正文将(可以)包含该资源。 否则,您首先必须检查资源是否已创建,但这需要两次调用。
否则,您的状态代码为409:
由于与资源的当前状态发生冲突,无法完成请求。
[编辑]阅读amundsen,Ruby和Richardson的Restfull Web Apis后
最好是使用409状态代码,该代码表明与服务器上存在的资源存在冲突。把那个"冲突的网址"响应的位置标头中的资源,并在正文中添加冲突消息
答案 1 :(得分:2)
有一个409 Conflict响应代码,通常用于让客户端知道服务器上已存在此类实体。解析错误响应的正文可能不是很直观,但如果在API文档中指定了这一点,则应该没有问题(将有关原始条目的信息放在响应正文中)。