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

标签 rest http rfc

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

假设我有一个“Item”表,它有两列“id”和“user_id”,这是“User”表的外键。

当执行 PUT 请求(更改项目)时,如果 'user_id' 不存在于 'User' 表中,更新将失败。

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

任何人都可以阐明这一点吗?

提前致谢!! :)

最佳答案

长见识

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

400

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

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/

相关文章:

php - laravel - 使用请求类或输入类

java - 如何在有状态操作的情况下定义幂等行为?

javascript - 使用 JavaScript 发布数组数据

javascript - 在 Couchdb ( iriscouch ) POST 请求中添加新文档失败,状态为 500

ssl - 为什么部署 TLS 对许多客户端开发人员来说是一个重大障碍

azure - 如何使用 Rest API 管理 Azure DevOps 组权限

java - 了解 Postman 请求是如何在 java 中构造和复制的

http - Wordpress: "HTTP Error."上传文件时

http - 什么时候应该在 HTTP URL 中对星号进行编码?

email - 电子邮件地址本地部分的最大长度究竟是多少?