我正在为数据库构建 REST 接口(interface),但遇到了一个问题。
假设我有一个“Item”表,它有两列“id”和“user_id”,这是“User”表的外键。
当执行 PUT 请求(更改项目)时,如果 'user_id' 不存在于 'User' 表中,更新将失败。
我的问题是,这个响应应该是 400 还是 404?我的一部分认为是 400,因为它是请求者提供的错误数据。但从技术上讲是 404,因为找不到用户资源。
任何人都可以阐明这一点吗?
提前致谢!! :)
最佳答案
长见识
我倾向于 400
因为 - 根据您尝试提供/更改的信息,您不一定希望客户端知道该资源不存在,它只是给客户提供了太多信息。 404
表示您没有该资源,如果他们再尝试几次,他们可能会找到确实存在的资源。
400
我认为this是一篇关于 REST 状态的不错的小文章,它说(大约 400
s):
The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.
404
Wikipedia (并不是说我使用的是权威来源,只是说而已)说:
The requested resource could not be found but may be available again in the future. Subsequent requests by the client are permissible.
我的 2 美分*
我想 404
在传统意义上更有意义,因为它是 not found
,但是,有时您不想让客户端知道你的资源不存在,所以你尽量不要给它太多信息,如果我试图获取资源并且我得到一个 404
它告诉我如果我继续尝试我会获取一个确实存在的资源,但这个资源不存在。
对于大多数数据,您可以安全地使用 404
,但是如果您发现自己处在一个您试图对数据更加保守的地方,那么可能是 400
会做
放置
通常在 PUT
请求中,您希望改变资源,可能发生的主要错误是“未经授权的更改”、“未找到资源”或“无效值”。显然可能还有其他人,但我们假设目前是这种情况。
如果您尝试检索“未找到”的属性,但如果您尝试更改不存在的内容,我认为“错误请求”或 400
会更有意义。
*:对于 RESTful API,每个人都有自己的解释,我给了你我的 :)
祝你好运;)
关于rest - RFC - 404 或 400 用于在 PUT 请求中找不到实体的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31773088/