【问题标题】:What HTTP status code should I use for a REST response that only contains part of the answer?对于仅包含部分答案的 REST 响应,我应该使用什么 HTTP 状态代码?
【发布时间】:2020-03-15 16:00:34
【问题描述】:

假设我正在构建一个服务于旧杂志内容的 API。客户可以在给定日期之前请求最新版本的内容,例如:

GET /magazines/<some_magazine_id>?date=2015-03-15

响应包括有关杂志的一般数据,例如它的名称、发行国家、创建日期...,如果我的数据库有内容可用于给定日期之前的版本,它也会返回它.

如果客户端在我有任何可用数据之前请求某个日期的数据,我应该使用什么 HTTP 状态代码?当我扩展数据库的内容时,我将来可能会有数据。所以这是一种暂时的故障,但还不清楚它可能需要多长时间才能修复。

基于onotherquestions,我觉得:

  • 404 不对:在某些情况下,我根本没有关于杂志的数据,in which case 我会返回 404。但这是不同的。我希望用户获取部分数据,但表明它只是部分数据。
  • 4xx 是客户端错误。我觉得客户没有做错什么。
  • 206 Partial Content 似乎在返回 range 的内容时显示,但不是全部。
  • 30x 我曾考虑使用 302 或类似版本,并指出最接近的可用版本,但我再次不确定这是否正确,因为我现在指向的内容与所提出的问题在语义上有所不同。
  • 5xx 会出错,我认为不应该包含任何数据。

我的最佳猜测是 2xx No Details Available (Yet) 表示请求“有点成功”,但我在 the list 中找不到任何似乎正确的内容。

【问题讨论】:

  • 对我来说听起来像是一个简单的200 OK

标签: rest api http http-status-codes


【解决方案1】:

我会选择 200 OK。您确实找到了该杂志,并且您正在返回有关它的数据。虽然您的数据并不像它可能的那样完整,但它是一个可以理解的完整响应。大概您正在返回一个空数组或一个 nil 引用,其中版本本来是?

许多更具体的响应的问题在于它们实际上是针对更底层的东西。您不是返回部分内容,而是返回全部内容。只是更高级别的应用程序数据并不像您希望的那样完整(未找到旧版本)。在 REST/HTTP 级别上,响应很好。

【讨论】:

  • 这很有意义。我想我试图将更高级别的应用程序逻辑与 REST 混为一谈。感谢您澄清这方面。
猜你喜欢
  • 2015-01-03
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 2018-02-09
  • 2020-01-18
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
相关资源
最近更新 更多