异步任务的 HTTP 状态代码
HTTP status code for async tasks
我正在实施 REST API,其中涉及在服务器上创建 object。 object 创建涉及多个步骤,可能需要一段时间。我不希望用户等待它。我只是 return 一个 202 响应,带有客户端请求的唯一请求 ID,并在服务器上启动一些线程来创建 object。客户端应该在将来检查请求是否完成。流程是这样的:
- 客户端 POST object。
- 服务器响应 202 接受代码,位置 header
/my-app/<reqId>
- 客户端在
/my-app/<reqId>
上执行 GET
现在到了第三步,可能会出现这些情况:
- Object创建仍在进行中(客户端需要稍后再检查)。
- 发生了一些错误。
- Object创建成功。
现在我的 API /my-app/<reqId>
应该为以上三种情况响应什么 http 代码?
我可能会从一开始就做一些不同的事情。 Location
header 有一个 specific meaning,指向连接到请求的实际资源,基本上是请求的“结果”,而不是指示请求本身状态的资源。这可能是一个小差异,但以后可能会造成混淆。
此外,规范 says 202
应该 return 指示或 link 描述请求本身进度的“状态”资源的内容。
所以流程可能是:
- 客户
POST
- 服务器发送
202 Accepted
。 Location
header 指向所请求资源所在的 URI(这是 而不是 状态),这将是 404
直到处理完成完毕。此外,202
的内容可能包括“状态”表示。 Content-Location
header 具有此“状态”资源的 link。
- 客户端
GET
s 用于检查进度的状态资源。此资源始终存在,因此它始终 returns 200
.
- 如果状态指示成功,则
Location
指示的资源现在存在,否则永远不存在。状态资源将无限期地继续存在。
我正在实施 REST API,其中涉及在服务器上创建 object。 object 创建涉及多个步骤,可能需要一段时间。我不希望用户等待它。我只是 return 一个 202 响应,带有客户端请求的唯一请求 ID,并在服务器上启动一些线程来创建 object。客户端应该在将来检查请求是否完成。流程是这样的:
- 客户端 POST object。
- 服务器响应 202 接受代码,位置 header
/my-app/<reqId>
- 客户端在
/my-app/<reqId>
上执行 GET
现在到了第三步,可能会出现这些情况:
- Object创建仍在进行中(客户端需要稍后再检查)。
- 发生了一些错误。
- Object创建成功。
现在我的 API /my-app/<reqId>
应该为以上三种情况响应什么 http 代码?
我可能会从一开始就做一些不同的事情。 Location
header 有一个 specific meaning,指向连接到请求的实际资源,基本上是请求的“结果”,而不是指示请求本身状态的资源。这可能是一个小差异,但以后可能会造成混淆。
此外,规范 says 202
应该 return 指示或 link 描述请求本身进度的“状态”资源的内容。
所以流程可能是:
- 客户
POST
- 服务器发送
202 Accepted
。Location
header 指向所请求资源所在的 URI(这是 而不是 状态),这将是404
直到处理完成完毕。此外,202
的内容可能包括“状态”表示。Content-Location
header 具有此“状态”资源的 link。 - 客户端
GET
s 用于检查进度的状态资源。此资源始终存在,因此它始终 returns200
. - 如果状态指示成功,则
Location
指示的资源现在存在,否则永远不存在。状态资源将无限期地继续存在。