【问题标题】:Which HTTP code should return as status?哪个 HTTP 代码应该作为状态返回?
【发布时间】:2018-04-13 15:06:07
【问题描述】:

我需要创建 REST API 端点,但我不确定要返回哪个 HTTP 代码作为状态。

接下来是要求:
- 我的 API 应该接受 URL 作为参数
- 对第三方服务进行 API 调用(使用 URL),并获得响应
- 返回响应(从第三方服务获取的内容)

在某些情况下,一切正常。调用外部服务,返回内容和状态码 200。

但是,有时没有内容,它会返回 404。(重要的是,将来可能会提供内容。)
从我的系统来看,这是正常情况。

我应该返回哪个 HTTP 代码?
202 - 接受,
204 - 没有内容,
206 - 部分内容
还是别的什么?

【问题讨论】:

  • 服务器说 204,目前没有来自您传递的 URL 的响应,要么发送正确的 URL,要么稍后再试
  • 为什么不能返回404状态码?
  • @PapaStan 这是正常情况。可能没有内容
  • @djm.im 通过 http 代理请求不存在的页面会返回 404,即使代理完成了它的工作。这是同样的情况。
  • 您的服务听起来像一个简单的代理,那么您的服务与代理的不同之处在于,它可以证明不像代理那样转发 404 代码是合理的?

标签: javascript java rest api


【解决方案1】:

404 未找到

无法找到请求的资源,但将来可能可用。客户端的后续请求是允许的。

在 REST-API 中,请求和响应仅适用于当前的“调用”。如果内容当前不可用,它应该返回404 状态。 It(404) 是应该返回的确切状态。


但是,如果你想改变规则,204 状态码似乎更合适。我不建议你这样做。

204 无内容

服务器成功处理了请求,没有返回任何内容Link

【讨论】:

    【解决方案2】:

    创建一个临时资源,而不是创建实际资源。您可以发出 202(已接受)响应代码,而不是返回 201(已创建)HTTP 响应。这会通知客户端该请求已被服务器接受并理解,但资源尚未(尚未)创建。

    From: http://restcookbook.com/Resources/asynchroneous-operations/

    【讨论】:

    • 没有实际的资源创建,api只是充当代理。
    【解决方案3】:

    您应该返回第三方服务返回的任何 HTTP 状态代码,除非您的系统正在包装它并处理它并更改状态。

    【讨论】:

      猜你喜欢
      • 2013-08-16
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2019-09-05
      • 2016-12-18
      • 2014-02-08
      相关资源
      最近更新 更多