什么是"@unique"违规的最佳回报代码?

fel*_*cao 13 rest http

我正在开发一个带有Hibernate驱动的后端的RESTful Web API.到目前为止,我们已经映射了一些错误代码.例如,当@Version验证失败时,我们的API会返回HTTP错误代码409.

现在,我们需要映射唯一验证失败时要返回的最佳错误代码.例如,我的API有一个业务规则,表明不能有两个具有相同名称的实体A实例.例如,如果我的数据库中有一个名为"XYZ"的记录,则无法在数据库中创建具有相同名称"XYZ"的另一条记录.在这种情况下,最好的返回代码是什么?409还有?

我已经在"REST in Practice"一书中对谷歌进行了一些研究,409似乎主要与@Version有关,我没有任何关于409的引用与唯一验证一起使用.

任何帮助是极大的赞赏!谢谢!

Eri*_*ein 17

我首先会考虑422 Unprocessable Entity:

422(不可处理实体)状态代码表示服务器
理解请求实体的内容类型,并且请求实体的
语法正确但无法处理包含的指令.

在这种情况下,包含的说明是"请创建此新资源".

409 Conflict 也经常使用,其论点是资源的存在与创建新资源的尝试相冲突:

409(冲突)状态代码表示由于与目标资源的当前状态冲突而无法完成请求.此代码用于用户可能能够解决冲突并重新提交请求的情况.

此响应代码的其余解释是关于解决冲突,这在您的情况下是不可能的.这就是我偏离这个响应代码的原因.

第三种选择是403 Forbidden:

403(禁止)状态代码表示服务器理解请求但拒绝授权.[..]但是,出于与凭证无关的原因,可能会禁止请求.

大多数人都会因为auth的影响而对这段代码感到害怕,但文中明确指出它在其他情况下是合适的.

如果没有关于您的系统的更多信息,没有人能够告诉您正确使用的代码.查看这些响应的定义,并选择最符合您需求的响应.无论您选择哪种响应代码,请确保响应实体明确概述问题,以便客户端可以更正它.