当前位置: 首页 > 知识库问答 >
问题:

对于非HTTP错误使用HTTP状态代码是否合适?

祁远
2023-03-14

我知道有人正在编写一个API,并希望使用HTTP状态代码来报告查询的结果。例如,如果用户调用example.com/api/product_info?product_id=X,并且产品不存在,它将返回HTTP状态400:错误请求。我认为,因为这是一个有效的调用(即实际的HTTP请求没有格式错误),它应该返回一个200code响应,并且只需要响应的主体类似于{状态:'错误';消息:'没有这样的产品'}

所以我的问题是,,

1) 使用HTTP状态码来传递非HTTP程序状态是否合适,如上面的示例所示?

2)是否有一些标准规范,或者至少是广泛使用的规范,描述什么时候HTTP状态代码适合使用?

共有1个答案

孔安阳
2023-03-14

我前几天还在说这个http://blogs.mulesoft.org/api-best-practices-response-handling/

您的状态代码应该反映API的响应,因为200是“OK”,并且应该用于成功返回的数据。但是,201应该用于创建的项。

如前所述,在用户尝试呼叫但失败的情况下(即:用户/?id=5)服务器可以返回400来通知用户这是一个坏请求,如果资源不存在,则返回404。

这也取决于操作——如果他们正在搜索一个用户,但是没有响应,我不会返回一个错误,只是一个没有找到结果的200。然而,如果他们试图对不存在的用户进行PUT或补丁,我会告诉他们一个错误——因为他们的应用程序中的某个地方有问题。

在上面发布的链接中,您会发现更多的状态代码,但使用状态代码的最大优点之一是,它会通知客户机服务器的实际情况。这允许他们进行相对快速的(低内存)检查,而不必对正文进行反序列化,并在数组中循环查找错误键。

本质上,你是在给他们提供工具,让他们快速、轻松地理解正在发生的事情——我认为每个(理智的)开发人员都会欣赏这一点。

希望这有帮助迈克

 类似资料:
  • 我希望为每个状态代码显示不同的错误消息,例如: < li>400错误请求 < li>403禁止 < li>500内部服务器错误 < li>404未找到 < li>401未授权 如何在新的ASP。NETMVC6应用程序?我可以使用内置的UseErrorHandler方法执行此操作吗? 另外,我注意到,即使使用上述处理程序,输入不存在的URL(例如/this-page-不存在)也会导致来自IIS的丑陋

  • 问题内容: 我现在将脚本更改为jquery。这是我的旧javascript: 我现在想将其更改为jquery-ajax: 像在旧脚本中一样,如何测试请求返回的状态码(和responseText)? 问题答案: 试试这个: 要么:

  • 我使用Spring中的webClient从GraphQL WebService中获取数据。此代码位于一个泛型方法中,该方法将响应体解码为不同类型的对象。如果响应是预期的类型,则它运行良好。 现在我想处理来自WebService的错误。因此,我的问题与此非常相似:Spring Webflux:Webclient:Get body on error我发现建议使用onStatus,但我的问题是,即使re

  • 主要内容:1 1xx:信息,2 2xx:成功,3 3xx:重定向,4 4xx:客户端错误,5 5xx:服务器错误当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。 HTTP状态码的英文为HTTP Status Code。下面是常见的HTTP状态码:  1xx - 这意味着已收到请求,并且该过程正在继续。 2xx - 这意味着已成功接收,理解并接受了该

  • 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。 HTTP状态码的英文为HTTP Status Code。 下面是常见的HTTP状态码: 200 - 请求成功 301 - 资源(网页等)被永久转移到其它URL 404 - 请求的资源(网页等)不存在

  • HTTP 1xx消息 这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应。 这些状态码代表的响应都是信息性的,标示客户应该采取的其他行动。 100-客户端应当继续发送请求 101-切换协议 102-处理将被继续执行