异步任务的 HTTP 状态代码

HTTP status code for async tasks

我正在实施 REST API,其中涉及在服务器上创建 object。 object 创建涉及多个步骤,可能需要一段时间。我不希望用户等待它。我只是 return 一个 202 响应,带有客户端请求的唯一请求 ID,并在服务器上启动一些线程来创建 object。客户端应该在将来检查请求是否完成。流程是这样的:

  1. 客户端 POST object。
  2. 服务器响应 202 接受代码,位置 header /my-app/<reqId>
  3. 客户端在 /my-app/<reqId>
  4. 上执行 GET

现在到了第三步,可能会出现这些情况:

  1. Object创建仍在进行中(客户端需要稍后再检查)。
  2. 发生了一些错误。
  3. Object创建成功。

现在我的 API /my-app/<reqId> 应该为以上三种情况响应什么 http 代码?

我可能会从一开始就做一些不同的事情。 Location header 有一个 specific meaning,指向连接到请求的实际资源,基本上是请求的“结果”,而不是指示请求本身状态的资源。这可能是一个小差异,但以后可能会造成混淆。

此外,规范 says 202 应该 return 指示或 link 描述请求本身进度的“状态”资源的内容。

所以流程可能是:

  1. 客户POST
  2. 服务器发送 202 AcceptedLocation header 指向所请求资源所在的 URI(这是 而不是 状态),这将是 404 直到处理完成完毕。此外,202 的内容可能包括“状态”表示。 Content-Location header 具有此“状态”资源的 link。
  3. 客户端 GETs 用于检查进度的状态资源。此资源始终存在,因此它始终 returns 200.
  4. 如果状态指示成功,则Location指示的资源现在存在,否则永远不存在。状态资源将无限期地继续存在。