2013-07-05 78 views
2

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

POST /v1/foo 

的JSON响应体包含一个唯一的请求ID(一个UUID),该用户随后提交在随后的轮询参数会在同一端点:

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

如果作业完成,结果返回为JSON,否则返回状态更新(再次JSON)。

(除非他们没有上述两种调用简单地返回一个“200 OK”响应。)

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

回答

2

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

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

+0

非常感谢,抱歉不早回复。博客文章中概述的模型确实似乎是实现此目的的最佳方式。 – ChrisM