首页 文章

异步任务的HTTP状态代码

提问于
浏览
4

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

  • 客户端POST对象 .

  • 服务器以202 Accepted代码响应,并带有Location头 /my-app/<reqId>

  • 客户端在 /my-app/<reqId> 上进行了GET

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

  • 对象创建仍在进行中(客户端应该在一段时间后再次检查) .

  • 发生了一些错误 .

  • 对象已成功创建 .

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

1 回答

  • 3

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

    规范says 202 也应该返回指示或链接到"state"资源的内容,该资源描述了请求本身的进度 .

    所以流程可能是:

    • 客户端 POST

    • 服务器发送 202 Accepted . Location 标头指向所请求资源所在的URI(这不是状态),这将是 404 ,直到处理完成 . 此外, 202 的内容可能包含"state"表示 . Content-Location 标头包含指向此"state"资源的链接 .

    • Client GET 是检查进度的状态资源 . 此资源始终存在,因此始终返回 200 .

    • 如果状态指示成功,则 Location 中指示的资源现在存在,否则它将永远不存在 . 国家资源继续无限期存在 .

相关问题