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

时间:2014-07-29 12:41:50

标签: rest http

我正在使用基于Hibernate的后端处理RESTful Web API。到目前为止,我们已经映射了一些错误代码。例如,当@Version验证失败时,我们的API会返回HTTP错误代码409。

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

我在" REST in Practice"中做过一些研究。书和谷歌,409似乎主要与@Version相关联,我无法对409使用唯一的验证进行任何引用。

非常感谢任何帮助!谢谢!

1 个答案:

答案 0 :(得分:12)

我首先考虑422 Unprocessable Entity

  

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

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

经常使用

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

  

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

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

第三个选项是403 Forbidden

  

403(Forbidden)状态代码表示服务器   了解该请求但拒绝授权。 [..]然而,一个   请求可能被禁止,原因与此无关   凭证。

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

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