我正在为数据库构建一个REST接口,我遇到了一个问题。
想象一下,我有'Item'表,它有两列'id'和'user_id',它是'User'表的外键。
在执行PUT请求(更改项目)时,如果“用户”表中不存在“user_id”,则更新将失败。
我的问题是,这个回复应该是400还是404?我的一部分认为400,因为它是请求者提供的不良数据。但从技术上讲,404是因为无法找到用户资源。
任何人都可以对此有所了解吗?
提前致谢!! :)
答案 0 :(得分:1)
我倾向于400
因为 - 根据您尝试提供/更改的信息,您不一定希望客户端知道资源不存在,它只是给予客户端信息太多了。 404
表示您没有该资源,如果他们再尝试几次,他们可能会找到确实存在的资源。
我认为this是关于REST状态的一篇很好的小文章,它说(关于400
s):
由于语法格式错误,服务器无法理解该请求。客户不应该在没有修改的情况下重复请求。
Wikipedia(不是我使用的是一个明确的来源,但只是说')说:
找不到请求的资源,但可能会再次提供 在将来。客户的后续请求是允许的。
我认为404
在传统意义上更有意义,因为它是not found
,但是,有时你不希望客户知道你的资源不存在,所以你尽量不给它太多的信息,如果我想获得一个资源,我得到一个404
它告诉我,如果我继续尝试,我会得到一个确实存在的资源,但是这个没有。
对于大多数数据,您可以安全地使用404
,但如果您发现自己处于一个对数据更加保守的地方,那么400
可能会这样做
通常在PUT
请求您要求改变资源的情况下,可能发生的主要错误是“未经授权的更改”,“未找到资源”或“无效值”。显然可能还有其他人,但让我们假设现在就是这种情况。
如果您正在尝试检索属性“未找到”,但如果您尝试更改不存在的内容,我认为“错误请求”或400
会更有意义
*:使用RESTful API,每个人都有自己的解释,我给了你我的:)
祝你好运;)