REST API响应部分成功

ban*_*kar 8 rest http-response-codes

我有一个API来执行一些批量处理任务.让我们说它确实命名了一些资源.

我批量传递了7个请求,其中5个成功更新,2个失败.

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

有一个部分成功的HTTP代码,但我需要立即返回所有资源的个别响应.反正我们能做到吗?

Sar*_*lai 12

您可以使用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
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 此示例响应的有效性如何?[相关 RFC](https://tools.ietf.org/html/rfc4918#section-13) 似乎表明响应采用 XML 格式并遵循特定结构,样本响应没有做。 (2认同)
  • 我见过同一问题的其他答案,这些答案更喜欢针对这样的场景给出“200 OK”响应 - 然而这个答案似乎是更好的答案。它设计得更好、更符合逻辑、信息更丰富。这样,API 客户端就不必为“200 OK”响应执行任何逻辑。此外,大多数 API 管理工具将跟踪每个 API 响应代码的指标,并且单独跟踪这些指标可以更好地提供信息。示例:您升级了 API 数据库,现在在 API 管理工具中看到“207”响应代码激增。现在你知道要调查了。 (2认同)