【问题标题】:How to provide an asynchronous RESTful API wrapping a synchronous API如何提供包装同步 API 的异步 RESTful API
【发布时间】:2012-05-23 00:15:55
【问题描述】:

我们正在 Django 中创建一个 Web 服务(RESTful API)。我们的 API 将包装我们自己的内部数据以及我们的 Web 服务层将访问的其他一些 API。

我们使用的其中一个 API 有一些长时间运行的调用,它们在大约一分钟内不返回 HTTP 响应。 API 有一个单独的 API 调用来获取当前操作的状态,但这意味着用户必须启动长时间运行的操作,然后有一个单独的进程轮询状态。我们不希望我们的 API 以这种方式工作,我们希望初始请求只返回一个表明它正在进行中的响应。

所以我们想要做的是,当我们收到一个长时间运行的请求时,我们会异步地向 API 发起一个我们自己的 HTTP 请求,然后返回一个响应。然后每次我们得到一个状态调查,我们只是通过它并用我们得到的响应来响应。当我们收到操作完成的回调时,下次我们收到状态轮询时,我们将响应操作完成并返回数据。这意味着我们需要处理传入状态请求的处理程序,以检查正在进行的长时间运行的请求列表以响应状态。

这似乎是解决此问题的合理方法吗?我们应该研究哪些 python 库来使这种事情变得更容易?我们不确定是使用像 eventlet 或 twisted 这样的低级别的东西,还是像芹菜这样重量更重的东西。芹菜似乎是这类东西的正常推荐,但我不能 100% 确定它的位置。

谢谢, 斯宾塞

【问题讨论】:

    标签: python api http


    【解决方案1】:

    几个月前我遇到了同样的情况,可能你已经解决了你的问题,但是对于其他面临同样情况的人,我会发布我当时所做的事情。

    基本上我使用http://www.celeryproject.org/库,以异步方式调度一个长时间运行的操作,返回成功的HTTP响应芹菜作业ID,异步操作将在sqlite数据库中注册状态和作业ID(对于什么来说已经足够了)我正在做),一个客户正在查询(使用休息)工作的状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      相关资源
      最近更新 更多