异步任务的HTTP状态代码

fal*_*con 5 rest http http-status-codes http-headers

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

  1. 客户端POST对象.
  2. 服务器使用带有Location标头的202 Accepted代码进行响应 /my-app/<reqId>
  3. 客户端进行GET操作 /my-app/<reqId>

现在,在第三步,这些事情可能会发生:

  1. 对象创建仍在进行中(客户端应该在一段时间后再次检查).
  2. 发生了一些错误.
  3. 对象已成功创建.

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

Rob*_*gam 5

我可能会从一开始就有点不同.的Location报头具有一个特定的含义,指向连接到所述请求的实际资源,基本上是"结果"被请求的任何的,而不是资源指示请求本身的状态.这可能是一个很小的差异,但可能会在以后混淆.

另外,规范202应该返回内容说明或链接到介绍请求本身的进步"国家"资源.

所以流程可能是:

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