【问题标题】:HTTP status code for resource that is not available yet尚不可用的资源的 HTTP 状态代码
【发布时间】:2022-11-03 02:20:44
【问题描述】:

我有一个带有report_url 列的数据库表。一旦后端完成填充和存储报告,它就会使用 S3 链接填充该列。如果报告尚未存储,则列值默认为 NULL。我还有一个 Pyramid API,其中一个端点被声明为返回带有报告内容正文的响应。因此,每当用户提出请求时,将触发相应的控制器以获取报告链接并下载文件并将其返回给用户。但是,如果报告尚未完成(report_url 为 NULL),我需要以某种方式通知用户。在这种情况下,前端应该收到 HTTP 状态 400,但我还没有弄清楚这是否最合适。或者也许 503 更适合这里?

【问题讨论】:

标签: http web backend


【解决方案1】:

看看可用的http status codes

您可能想要的是 404,特别是因为这一行:

在 API 中,这也可能意味着端点是有效的,但 资源本身不存在。:

详细描述:

404 未找到

服务器找不到请求的资源。在浏览器中,这 表示无法识别 URL。在 API 中,这也可能意味着 端点有效,但资源本身不存在。服务器 也可以发送此响应而不是 403 Forbidden 以隐藏 存在来自未经授权的客户端的资源。这个回应 代码可能是最知名的,因为它经常出现在 网络。

如果服务器正在努力获取报告,则 102 将获得荣誉奖:

102 处理 (WebDAV)

此代码表示服务器已收到并正在处理请求,但还没有可用的响应。

它不是标准的一部分,它是一个扩展,WebDAV。

400 个状态码用于让用户知道他们所做的某些事情不起作用。当服务器发生某些事情时,使用 500 个状态代码。反正我是这么理解的。

这样,如果这是 API/程序的“正常”执行,也许 200 状态代码就可以了。例如。只需定义端点以返回 {"report_url": null} 如果它还没有准备好,否则 {"report_url": "an actual url"} 然后在每种情况下给出 200。接收方根据它是否为空来处理它。这种方法的优点是,现在用户可以知道它绝对是一个正确的端点(而不是 url 拼写错误,也会给出 404)。但是,您可以制作自己的 404 页面,例如说“报告尚未准备好”或“报告不存在”。这种 200 方法的缺点是一些速度损失,因为您必须发送不必要的响应正文。

免责声明:我根本不是 web/http 专家。

【讨论】:

    【解决方案2】:

    正确的 HTTP 状态代码是 202 - Accepteddocumentation 说:

    202(Accepted)状态码表示请求已被接受处理,但处理尚未完成。

    ..

    与此响应一起发送的表示应该描述请求的当前状态并指向(或嵌入)一个状态监视器,该监视器可以为用户提供对何时完成请求的估计。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-25
      • 2017-03-23
      • 2012-01-21
      • 2016-05-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 2015-05-26
      相关资源
      最近更新 更多