“的HTTP状态代码”;“无可用数据”;来自外部数据源

“的HTTP状态代码”;“无可用数据”;来自外部数据源,http,rest,http-status-codes,Http,Rest,Http Status Codes,场景: 发送POST请求以处理订单,该订单将导致从外部数据源检索数据 有三种可能的结果: 数据源为请求返回了数据 没有可用于请求的数据(这被视为错误) 无法访问数据源(可能因维护而关闭) 1的一个明显响应是200:OK或201:Created(根据该请求创建实体) 什么状态代码适用于2和3 我考虑过的身份代码: 503:数据源关闭时服务不可用 500:数据源关闭时出现内部服务器错误 502:“无可用数据”时网关不正确 404:在“无可用数据”时未找到 403:当“无可用数据”时禁止 412:当

场景:

发送
POST
请求以处理订单,该订单将导致从外部数据源检索数据

有三种可能的结果:

  • 数据源为请求返回了数据
  • 没有可用于请求的数据(这被视为错误)
  • 无法访问数据源(可能因维护而关闭)
  • 1的一个明显响应是
    200:OK
    201:Created
    (根据该请求创建实体)

    什么状态代码适用于2和3

    我考虑过的身份代码:

    • 503:数据源关闭时服务不可用
    • 500:数据源关闭时出现内部服务器错误
    • 502:“无可用数据”时网关不正确
    • 404:在“无可用数据”时未找到
    • 403:当“无可用数据”时禁止
    • 412:当“无可用数据”时,前置条件失败
    2)回顾这一点,我同意它可能是一个204 No Content,也可能是一个200,其主体表示根据返回的结构,找不到任何记录或资源。 404通常在资源URI不存在或者在restful服务中找不到URI中的资源时使用

    3) 503服务不可用

    由于服务器临时过载或维护,服务器当前无法处理请求。这意味着,这是一种暂时的情况,延迟一段时间后会得到缓解。如果已知,延迟的长度可以在Retry After标头中指示。如果没有在之后重试,客户端应该像处理500响应一样处理响应

      Note: The existence of the 503 status code does not imply that a
      server must use it when becoming overloaded. Some servers may wish
      to simply refuse the connection.
    
    3) 我同意503的说法

    2) 坦白地说,我认为在案例2中使用204是一个很好的理由,您可以在标题中包含metainfo,以明确指出“出错”的地方。这实际上取决于你认为这个案例在API级别上是一个错误。

    如果API本身的功能符合预期,并且请求是由经过身份验证和授权的用户发送到有效端点的,并且没有导致服务器出现故障,那么400或500系列错误中几乎没有应用

    例如,404通常意味着您调用的URI不存在,如果它确实存在,那么使用该代码至少会误导IMHO

    服务器已完成请求,但不需要返回 实体主体,并且可能希望返回更新的元信息。这个 响应可能包括以下形式的新的或更新的元信息: 实体标题,如果存在,则应与 请求的变体

    如果客户端是用户代理,则不应更改其文档视图 从导致发送请求的。这一回应是正确的 主要目的是允许输入操作,而无需 导致更改用户代理的活动文档视图,但 任何新的或更新的元信息都应应用于文档 当前在用户代理的活动视图中

    204响应不能包括消息体,因此总是 由标题字段后的第一个空行终止


    HTTP 404-带有您自己的错误消息,如“未找到数据”

    Twitter使用404。 参考:

  • 数据源为请求返回了数据
  • 没有可用于请求的数据(这被视为错误)
  • 无法访问数据源(可能因维护而关闭)
  • 在此处找到最常用的状态代码:

    200 – OK Everything is working, The resource has been fetched and is transmitted in the message body. 201 – CREATED A new resource has been created 204 – NO CONTENT The resource was successfully deleted, no response body 304 – NOT MODIFIED This is used for caching purposes. It tells the client that the response has not been modified, so the client can continue to use the same cached version of the response. 400 – BAD REQUEST The request was invalid or cannot be served. The exact error should be explained in the error payload. 401 – UNAUTHORIZED The request requires user authentication. 403 – FORBIDDEN The server understood the request but is refusing it or the access is not allowed. 404 – NOT FOUND There is no resource behind the URI. 500 – INTERNAL SERVER ERROR API If an error occurs in the global catch blog, the stack trace should be logged and not returned as a response. 200–好的 一切正常,资源已被提取并在消息体中传输。 201–创建 已创建一个新资源 204–无内容 已成功删除资源,没有响应正文 304–未修改 这用于缓存目的。它告诉客户端响应尚未修改,因此客户端可以继续使用响应的相同缓存版本。 400–错误请求 请求无效或无法送达。准确的错误应在错误有效载荷中解释。 401–未经授权 请求需要用户身份验证。 403–禁止 服务器理解该请求,但拒绝该请求或不允许访问。 404–未找到 URI后面没有资源。 500–内部服务器错误API 如果全局捕获日志中发生错误,则应记录堆栈跟踪,而不是作为响应返回。
    在我看来,最好的处理方法是使用200个无结果对象

    为什么?

    你有一个反应,你可以做一些事情没有很多麻烦。我搜索了一下,一切正常,但数据库中没有任何东西可以给出结果。因此,
    result=null
    和一条消息解释了这一点。如果在网络呼叫中发现此问题,则不存在安全风险

    如果您担心安全风险,那么204可能是最好的方法

    res.status(200)。发送({
    结果:空,
    消息:“没有结果”
    });
    
    您是否尝试使用POST请求查询数据?您不应该使用GET方法吗?
    GET
    不合适,因为这些数据查询既不安全也不幂等(它们可能会导致货币交换等)。对于
    2.
    我将分为多种情况。如果没有提供post数据,我们应该抛出一个
    400错误请求
    。如果未设置必填字段,但其他数据正确,则引发
    412先决条件失败
    。如果此资源的服务器接受请求,但没有可返回的数据,则404毫无意义。不幸的是,我不认为有一个明确的状态代码在这里有意义,但我倾向于更倾向于towa
    200: OK/201: CREATED
    Because everything is working as expected
    
    400: BAD REQUEST
    The request was invalid or cannot be otherwise served. An accompanying error message will explain further inside the body.like:
    HTTP 400
    {
    response: null,
    code: "USER_101", //should be used customized error codes here
    error: "User details not found"
    }
    
    404: Resource/URI NOT FOUND
    The URI requested or resource is invalid
    Like: https://www.lipsum.com/list-page
    **/list-page** is not defined/found
    
    200 – OK Everything is working, The resource has been fetched and is transmitted in the message body. 201 – CREATED A new resource has been created 204 – NO CONTENT The resource was successfully deleted, no response body 304 – NOT MODIFIED This is used for caching purposes. It tells the client that the response has not been modified, so the client can continue to use the same cached version of the response. 400 – BAD REQUEST The request was invalid or cannot be served. The exact error should be explained in the error payload. 401 – UNAUTHORIZED The request requires user authentication. 403 – FORBIDDEN The server understood the request but is refusing it or the access is not allowed. 404 – NOT FOUND There is no resource behind the URI. 500 – INTERNAL SERVER ERROR API If an error occurs in the global catch blog, the stack trace should be logged and not returned as a response.