异步任务的HTTP状态代码

时间:2016-04-05 09:01:56

标签: rest http http-headers http-status-codes

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

  1. 客户端POST对象。
  2. 服务器使用带有位置标题/my-app/<reqId>
  3. 的202 Accepted代码进行响应
  4. 客户端在/my-app/<reqId>
  5. 上进行GET

    现在第三步,可能会发生以下情况:

    1. 对象创建仍在进行中(客户端应该在一段时间后再次检查)。
    2. 发生了一些错误。
    3. 已成功创建对象。
    4. 现在,对于上述三种情况,我的API /my-app/<reqId>应该响应哪些http代码?

1 个答案:

答案 0 :(得分:5)

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

同样规范says 202应该返回指示或链接到描述请求本身进度的“状态”资源的内容。

所以流程可能是:

  1. 客户端执行POST
  2. 服务器发送202 AcceptedLocation标头指向所请求资源所在的URI(这是不是状态),这将是404,直到处理完成。此外,202的内容可能包括“州”表示。 Content-Location标头具有指向此“状态”资源的链接。
  3. 客户端GET是检查进度的状态资源。此资源始终存在,因此始终返回200
  4. 如果状态表示成功,则Location中指示的资源现在存在,否则它将永远不存在。国家资源继续无限期存在。