我正在实现一个REST API,它涉及在服务器上创建一个对象。对象创建涉及多个步骤,可能需要一段时间。我不希望用户等待它。我只返回202响应,其中包含客户端请求的唯一请求ID,并在服务器上启动一些线程来创建对象。客户应该在将来检查请求是否完成。流程如下:
/my-app/<reqId>
/my-app/<reqId>
现在第三步,可能会发生以下情况:
现在,对于上述三种情况,我的API /my-app/<reqId>
应该响应哪些http代码?
答案 0 :(得分:5)
我可能会从一开始就有点不同。 Location
标头有specific meaning,指向连接到请求的实际资源,基本上是请求的“结果”,而不是指示请求本身状态的资源。这可能是一个很小的差异,但可能会在以后混淆。
同样规范says 202
应该返回指示或链接到描述请求本身进度的“状态”资源的内容。
所以流程可能是:
POST
202 Accepted
。 Location
标头指向所请求资源所在的URI(这是不是状态),这将是404
,直到处理完成。此外,202
的内容可能包括“州”表示。 Content-Location
标头具有指向此“状态”资源的链接。GET
是检查进度的状态资源。此资源始终存在,因此始终返回200
。Location
中指示的资源现在存在,否则它将永远不存在。国家资源继续无限期存在。