【问题标题】:REST API response in partial success部分成功的 REST API 响应
【发布时间】:2018-01-08 14:48:48
【问题描述】:

我有一个 API 可以执行一些批量处理任务。假设它对某些资源进行命名。

我批量通过了 7 个请求,其中 5 个更新成功,2 个失败。

我的问题是如何处理响应。使用 HTTP 我不能同时返回成功和错误。

有一个部分成功的 HTTP 代码,但我需要一次返回所有资源的单独响应。无论如何我们可以做到吗?

【问题讨论】:

  • 几乎无限的方式。这是您需要根据您的具体情况自行做出的设计决定。
  • 这根本不是 Go 问题,而是 HTTP/API 问题。你可以用无数种方法来处理这个问题,最好的方法取决于你的需求和可能的口味。

标签: rest http-response-codes


【解决方案1】:

您可以使用 207 MULTI-STATUS 获取 http 状态 在多个状态代码可能适用的情况下,多状态响应传达有关多个资源的信息。

默认的多状态响应正文是具有“多状态”根元素的 HTTP 实体。其他元素包含在方法调用期间生成的 200、300、400 和 500 系列状态代码。

您可以在响应正文中包含一组响应对象,这些对象可能有自己的状态代码

示例

HTTP 207

{
    "data": [
        {
            "messgage": "success",
            "resource": {
                "foo": "bar",
                "id": "1d1"
            },
            "status": 200
        },
        {
            "messgage": "Requested resource or subresource not found ",
            "resource": null,
            "status": 404
        },
        {
            "messgage": "success",
            "resource": {
                "foo": "bars",
                "id": "1d2"
            },
            "status": 200
        }
    ],
    "metadata": {
        "failure": 1,
        "success": 2,
        "total": 3
    }
}

【讨论】:

  • 你能举个例子吗?
  • @bandishankar 请检查此示例,它不涵盖所有可能性,但可作为基本示例
  • 此示例响应的有效性如何? relevant RFC 似乎表明响应是 XML 格式并遵循特定的结构,而示例响应没有这样做。
  • 相同的规范建议默认的多状态响应正文是文本/XML 或应用程序/xml。所以json 是有效的,只要内容类型是json
  • 我已经看到了对同一问题的其他答案,他们更愿意在这样的情况下给出200 OK 回复 - 但是这个答案似乎是更好的答案。它设计得更好,更合乎逻辑,信息量更大。这样 API 客户端就不必为 200 OK 响应做任何逻辑。此外,大多数 API 管理工具都会跟踪每个 API 响应代码的指标,最好单独跟踪这些指标以提供更好的信息。示例:您升级了 API 的数据库,现在在 API 管理工具中看到“207”响应代码出现峰值​​。现在你知道要调查了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 2020-12-01
  • 1970-01-01
  • 2014-03-01
  • 2016-11-03
  • 1970-01-01
相关资源
最近更新 更多