RFC-404或400用于在PUT请求中找不到的实体关系

时间:2015-08-02 14:52:47

标签: rest http rfc

我正在为数据库构建一个REST接口,我遇到了一个问题。

想象一下,我有'Item'表,它有两列'id'和'user_id',它是'User'表的外键。

在执行PUT请求(更改项目)时,如果“用户”表中不存在“user_id”,则更新将失败。

我的问题是,这个回复应该是400还是404?我的一部分认为400,因为它是请求者提供的不良数据。但从技术上讲,404是因为无法找到用户资源。

任何人都可以对此有所了解吗?

提前致谢!! :)

1 个答案:

答案 0 :(得分:1)

TLDR

我倾向于400因为 - 根据您尝试提供/更改的信息,您不一定希望客户端知道资源不存在,它只是给予客户端信息太多了。 404表示您没有该资源,如果他们再尝试几次,他们可能会找到确实存在的资源。

400

我认为this是关于REST状态的一篇很好的小文章,它说(关于400 s):

  

由于语法格式错误,服务器无法理解该请求。客户不应该在没有修改的情况下重复请求。

404

Wikipedia(不是我使用的是一个明确的来源,但只是说')说:

  

找不到请求的资源,但可能会再次提供   在将来。客户的后续请求是允许的。

我的2美分*

我认为404在传统意义上更有意义,因为它是not found,但是,有时你不希望客户知道你的资源不存在,所以你尽量不给它太多的信息,如果我想获得一个资源,我得到一个404它告诉我,如果我继续尝试,我会得到一个确实存在的资源,但是这个没有。

对于大多数数据,您可以安全地使用404,但如果您发现自己处于一个对数据更加保守的地方,那么400可能会这样做

PUT

通常在PUT请求您要求改变资源的情况下,可能发生的主要错误是“未经授权的更改”,“未找到资源”或“无效值”。显然可能还有其他人,但让我们假设现在就是这种情况。

如果您正在尝试检索属性“未找到”,但如果您尝试更改不存在的内容,我认为“错误请求”或400会更有意义

*:使用RESTful API,每个人都有自己的解释,我给了你我的:)

祝你好运;)