我正在使用基于Hibernate的后端处理RESTful Web API。到目前为止,我们已经映射了一些错误代码。例如,当@Version验证失败时,我们的API会返回HTTP错误代码409。
现在,我们需要映射唯一验证失败时要返回的最佳错误代码。例如,我的API有一个业务规则,表明不能有两个具有相同名称的实体A实例。例如,如果我的数据库中有一个名为=" XYZ"的记录,我就无法在数据库中创建另一个具有相同名称的记录" XYZ"。在这种情况下,最好的返回代码是什么? 409以及?
我在" REST in Practice"中做过一些研究。书和谷歌,409似乎主要与@Version相关联,我无法对409使用唯一的验证进行任何引用。
非常感谢任何帮助!谢谢!
答案 0 :(得分:12)
我首先考虑422 Unprocessable Entity
:
422(不可处理实体)状态代码表示服务器
了解请求实体的内容类型,以及 请求实体的语法是正确的,但无法处理包含的 指令。
在这种情况下,包含的说明是"请创建这个新资源"。
经常使用 409 Conflict
,其论点是资源的存在与创建新资源的尝试相冲突:
409(冲突)状态代码表示请求不能 由于与目标的当前状态发生冲突而完成 资源。此代码用于用户可能的情况 能够解决冲突并重新提交请求。
此响应代码的其余解释是关于解决冲突,这在您的情况下是不可能的。这就是我偏离此响应代码的原因。
第三个选项是403 Forbidden:
403(Forbidden)状态代码表示服务器 了解该请求但拒绝授权。 [..]然而,一个 请求可能被禁止,原因与此无关 凭证。
大多数人都会因为身份验证而对这段代码感到害怕,但文中明确指出它在其他情况下是合适的。
如果没有关于您的系统的更多信息,没有人能够告诉您正确使用的代码。查看这些响应的定义,并选择最符合您需求的响应。无论您选择哪种响应代码,请确保响应实体明确概述问题,以便客户端可以更正它。