我们正在实现一个基于REST的Web服务,我们对一些用例有一些疑问。
考虑有一个包含一些信息的唯一帐户(例如添加到购物车信息(
- 如果不存在购物车信息,我们应该返回什么响应代码(例如 0(。 我们的理解是返回 200 并返回空响应。
- 用户将购物车信息添加到其帐户,但购物车已被管理员删除。
应使用什么 HTTP 状态码?
对于情况 1,有两个选项:
- 购物车是空的。我会返回
200 OK
返回一个空集合。 - 购物车不存在。正确的情况是 404。
对于情况 2,它实际上是一样的。唯一的潜在区别是,如果您在情况 1 中返回404
,您可以选择410 gone
,因为它表明购物车以前在这里,但现在它已经消失了。
无论您选择哪种方式,我都建议您对这两种情况采取相同的策略。 例如:为两者返回 2xx 代码,或为两者返回 4xx 代码。
如果管理员通过执行DELETE
请求删除了购物车,则 404/410 状态代码更合适。
请参阅此博客。它很好地解释了它。
博客对204的评论摘要:
- 204 无内容作为响应代码不是很有用 浏览器(尽管根据HTTP规范浏览器确实需要 将其理解为"不更改视图"响应代码(。
- 204 没有内容对于 ajax Web 服务非常有用,这些服务可能希望指示成功而不必返回 东西。(特别是在删除或开机自检等情况下,没有 需要反馈(。
因此,您的问题的答案是在您的情况下使用 404。 204 是一个专门的响应代码,您不应该经常返回到浏览器以响应 GET。
其他响应代码甚至不如 204 和 404 合适。
- 200 应与您成功获取的任何内容的正文一起返回。当您要提取的实体不存在时,则不合适。
- 当服务器已经开始处理对象但对象尚未完全准备就绪时,将使用 202。这里当然不是这样。您尚未开始,也不会开始构建用户 9 以响应 GET 请求。这打破了各种规则。
- 400 用于响应格式不正确的 HTTP 请求(例如格式错误的 HTTP 标头、错误排序的段等(。这几乎肯定会由您使用的任何框架处理。除非您从头开始编写自己的服务器,否则您不必处理此问题。编辑:较新的 RFC 现在允许将 400 用于语义无效的请求。
维基百科对HTTP状态代码的描述特别有用。您还可以在 HTTP/1.1 RFC2616 文档中查看定义 www.w3.org