我们正在开发一个 Web API,它可能处理大量用户提交的内容,这意味着对我们的端点的调用可能不会立即返回结果。因此,我们正在考虑实现异步/非阻塞 API。目前我们的计划是让用户通过以下方式提交他们的内容:
POST /v1/foo
JSON 响应正文包含唯一的请求 ID(UUID),然后用户将其作为参数提交到同一端点上的后续轮询 GET 中:
GET /v1/foo?request_id=<some-uuid>
如果作业完成,则结果以 JSON 形式返回,否则返回状态更新(同样是 JSON)。
(除非它们在上述两个调用中都失败,否则只会返回“200 OK”响应。)
这是实现异步 API 的合理方式吗?如果不是,那么这样做的“正确”(和 RESTful)方式是什么?此处描述的模型建议创建一个临时状态更新资源,然后创建一个最终结果资源,但这对我来说似乎不必要地复杂。