【问题标题】:Http response code for a mixed type of response payload containing both error and success messages包含错误和成功消息的混合类型响应负载的 Http 响应代码
【发布时间】:2018-09-27 07:27:05
【问题描述】:

我正在开发一个 API,它接受以下格式的多张图片上传请求:

    {
      "images"[
        {"url": 'www.xyz/image1.jpg', 'type': 'abc'}, 
        {"url": 'www.xyz/image2.jpg', 'type': 'def'}
      ]
    }

响应包含每个图像的成功和失败消息:

    {
      "error": {
        abc": "Error while downloading image: servname or nodename not known"
      },
      "success": {
        "def": "image got uploaded successfully"
      }
    }

现在我想知道我应该为这个响应返回什么状态代码,因为响应可能只包含成功、只包含错误或成功和错误消息的混合。是否应该有一个通用的状态代码,或者取决于响应是否只包含错误、成功或两者,状态代码应该不同?

【问题讨论】:

    标签: rest api http http-response-codes


    【解决方案1】:

    考虑在WebDAV RFC 中定义的[207 Multi-Status Response][1]

    多状态响应传达有关多种资源的信息 在多个状态代码可能合适的情况下。这 默认多状态响应正文是 text/xml 或 application/xml 具有“多状态”根元素的 HTTP 实体。其他元素 包含期间生成的 200、300、400 和 500 系列状态代码 方法调用。不应记录 100 系列状态码 在“响应”XML 元素中。

    【讨论】:

    • 虽然 WebDAV 是 HTTP 的扩展,但客户端可能无法理解 207 的含义。在 HTTP 客户端的互操作性方面,我只坚持使用 HTTP。有人可能会争辩说PATCH 也是 HTTP 的扩展,尽管这里客户端以请求为目标,如果服务器不支持PATCH,将根据 HTTP 规范接收适当的错误消息。但是,在这种情况下,客户端已经使用 HTTP 协议来发送请求。因此,返回 HTTP 之外的状态代码可能会破坏互操作性
    • @RomanVottner WebDAV HTTP。 207 在 IANA 注册表中。:iana.org/assignments/http-status-codes/http-status-codes.xhtml。我不反对它可能没有在中间服务器上正确实现,但说它不是 HTTP 的一部分是完全错误的。
    • 我只知道 WebDAV 建立在 HTTP 之上,但我不知道根据 IANA 它实际上是 HTTP。对我来说,它总是看起来像是 HTTP 的扩展,但它是一个单独的协议。实际上将不得不阅读它。我仍然不确定大多数客户端是否真的允许 WebDAV 特定请求,如 COPYLOCK 虽然
    • 支持是参差不齐的,充其量。
    【解决方案2】:

    您可以返回 HTTP 响应 200 并让响应正文包含更多详细信息。 此外,您应该有一种将请求映射到响应的方法,以便您知道哪个成功/错误消息对应于哪个请求。 您可以将请求发送为:

    {
      "images" : [
        {"key": "1", "url": 'www.xyz/image1.jpg', 'type': 'abc'}, 
        {"key": "2", "url": 'www.xyz/image2.jpg', 'type': 'def'},
        {"key": "3", "url": 'www.xyz/image3.jpg', 'type': 'abc'}
      ]
    }
    

    响应正文为 200 OK:

    {
      "images" : [
        {"key": "1", "status": "success", "message": "OK"}, 
        {"key": "2", "status": "failure", "message": "some specific error"},
        {"key": "3", "status": "failure", "message": "some specific error"}
      ]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      相关资源
      最近更新 更多