2012-05-15 97 views
1

我們正在Django中創建一個Web服務(RESTful API)。我們的API將包裝我們自己的內部數據以及我們的Web服務層將訪問的一些其他API。如何提供一個包裝同步API的異步RESTful API

我們正在使用的API之一有一些長時間運行的調用,它們在一分鐘內不返回HTTP響應。 API具有單獨的API調用來獲取當前操作的狀態,但這意味着用戶必須啓動長時間運行的操作,然後進行單獨的進程輪詢狀態。我們不希望我們的API以這種方式工作,我們希望最初的請求只返回一個響應,說它正在進行中。

所以我們想要做的是當我們得到一個長時間運行的請求時,我們會異步啓動我們自己的HTTP請求到API,然後返回一個響應。然後,每次我們進行狀態調查時,我們都會通過並回復我們得到的回覆。當我們收到操作完成的回調時,下次我們進行狀態輪詢時,我們只會迴應操作已完成並返回數據。這意味着我們需要處理傳入狀態請求的處理程序來檢查正在進行的長時間運行的請求的列表以響應狀態。

這似乎是一個合理的方式來處理這個?我們應該考慮哪些python庫使這種事情更容易?我們不確定是否要使用低級別的事件或扭曲的東西,或者像芹菜那樣重一點的東西。芹菜似乎是這種事情的正常建議,但我不能100%確定它的位置。

感謝, 斯賓塞

回答

0

我幾個月前面臨同樣的情況,很可能你已經解決了你的問題,但對於面臨同樣的情況我會後我做了什麼,當時其他人。

基本上我使用了http://www.celeryproject.org/庫,以異步方式調度一個長時間運行的操作,返回一個成功的HTTP響應celery作業ID,異步操作將在sqlite數據庫中註冊狀態和作業ID(足夠用於我正在做),一位客戶正在查詢(使用休息)工作的狀態。