2

我们正在开发一个 Web API,它可能处理大量用户提交的内容,这意味着对我们的端点的调用可能不会立即返回结果。因此,我们正在考虑实现异步/非阻塞 API。目前我们的计划是让用户通过以下方式提交他们的内容:

POST /v1/foo

JSON 响应正文包含唯一的请求 ID(UUID),然后用户将其作为参数提交到同一端点上的后续轮询 GET 中:

GET /v1/foo?request_id=<some-uuid>

如果作业完成,则结果以 JSON 形式返回,否则返回状态更新(同样是 JSON)。

(除非它们在上述两个调用中都失败,否则只会返回“200 OK”响应。)

这是实现异步 API 的合理方式吗?如果不是,那么这样做的“正确”(和 RESTful)方式是什么?此处描述的模型建议创建一个临时状态更新资源,然后创建一个最终结果资源,但这对我来说似乎不必要地复杂。

4

1 回答 1

2

实际上,您提到的博客文章中描述的方式是处理异步操作的“正确”RESTful 方式。我已经实现了一个处理大文件上传和转换的 API,并以这种方式进行。在我看来,这并不过分复杂,而且肯定比延迟对客户的响应更好。

一些附加说明:如果任务失败,我还将返回200 OK任务资源的表示以及资源创建失败的信息。

于 2013-07-05T22:19:33.700 回答