【问题标题】:Relevant HTTP Status code on the Rest APIRest API 上的相关 HTTP 状态码
【发布时间】:2019-12-15 01:06:53
【问题描述】:

我有一个场景,通过在 Path 变量中传递无效数据来从数据库中获取数据。由于提供的数据无效,因此它从数据库中触发“500 内部服务器错误”,因为找不到数据。 并将 HTTP 状态自定义为 404(NOT_FOUND),因为未找到数据。

想了解,对于这种情况,除了 404 之外,最好的 HTTP 状态代码是什么?

【问题讨论】:

    标签: rest http-status-codes


    【解决方案1】:

    HTTP 是一种应用协议,其应用领域是通过网络传输文档(Jim Webber, 2011)。我们在响应中使用的状态码是来自文档传输域的元数据——也就是说,我们关心消息的含义,而不是我们的实现发送它的原因。

    特定于您的域的信息(将问题的详细信息传达给客户端)属于响应的消息正文。状态码在那里,因此不知道您的域细节的通用组件可以“做正确的事情”——正确的事情受到 HTTP 语义的约束。

    Michael Kropat published 流程图,可能有助于选择正确的状态代码。或者,您可以查看 HTTP Status Code Registry,其中包含定义每个代码语义的标准的链接。

    一般来说,如果问题出在请求上,那么我们使用来自4xx消息类的一些消息;请求中的问题是客户端错误。 404 专门将客户端的注意力引导到目标 uri。

    所以如果请求是错误的,因为编码到路径段中的信息不正确,那么 404 是正确的选择,因为它告诉客户端到哪里寻找问题。您会寻找其他地方的唯一原因是 404 语义的某些其他部分是否不适合您的情况。

    【讨论】:

      【解决方案2】:

      想了解除404 之外的最佳 HTTP 状态代码是什么?

      如果您正在寻找 404 以外的其他内容,则可以查看更通用的 400。来自RFC 7231

      6.5.1. 400 Bad Request

      400 (Bad Request) 状态码表示服务器不能或不会处理请求,因为某些原因被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性请求路由)。

      但请记住,404 状态码本身就适合这种情况。请参阅RFC 7231 中的以下引用:

      6.5.4. 404 Not Found

      404(未找到)状态代码表示源服务器没有找到目标资源的当前表示或不愿意透露存在的表示。 [...]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-08
        • 1970-01-01
        • 2014-06-22
        • 2021-04-20
        相关资源
        最近更新 更多