2011-11-30 68 views
1

我想構建一個作爲API前端的網站。基本上,前端需要一些用戶輸入並使用它來查詢API並檢索結果。當檢索結果時,會顯示它們。這一切都是異步完成的。API前端架構

我的問題是:

  1. 我是否使用類似芹菜處理API在後臺查詢?
  2. 假設我使用AJAX(我會),我有不同的URL來處理用戶輸入和檢索查詢結果嗎?
  3. 我是否使用類似長輪詢的方式來獲取並顯示JavaScript結果?
  4. 考慮到檢索結果可以進一步過濾,我正在考慮使用memcached作爲存儲。這是否合適?

如果有什麼我錯過了,或者如果有更好的方法,我很樂意聽到它。

編輯:我意識到我以一種錯誤的方式解釋了需求,所以我會嘗試改正。 基本上,我的網站是基於我無法控制的API。所以,有第三方API,我的應用程序在後端使用Django,前端使用JavaScript,CSS和HTML。

這就是爲什麼我將芹菜引入混合的原因。在我看來,應用程序的流程就是這樣。用戶在我的網頁上輸入所需的信息,並在用戶提交數據時,將其異步發送到我的後端。現在,Celery用於向第三方API發送請求並檢索數據。同時,我的前端不斷地查詢數據的後端,並在收到數據時開始顯示。

回答

2

你錯過了這裏的一些觀點。根據你的要求,我假設你想要構建一個查詢(RESTful)API的前端(html + javascript),它只是一個「說」HTTP的服務器。

因此,您的API查詢與您的服務器有關,也就是說,在Apache上使用Django或使用Tornado或.. Celery不能「處理」您的查詢,但它可以用於後臺任務。

在客戶端,您的AJAX調用將觸發一些映射到某些URL的服務器端視圖。你如何定義它們取決於你。查看一些流行的API(twitter),瞭解它們的結構。

長輪詢與您的「業務」邏輯有關,它定義瞭如何在稍後向客戶端呈現數據的方法。另外,緩存與您的服務器端性能有關,我們鼓勵您使用類似memcached或redis的內容。

編輯(編輯):你的方法沒有錯。 Celery是從外部API獲取數據的正確工具,然後將結果保存到數據庫中,當然還可以使用一些緩存。然後從客戶端進行一些輪詢以獲得結果。但是,存在一個更優化的,非阻塞的,優雅的做法。您可以使用Tornado從外部API獲取數據,當這些數據準備就緒時,將它們發送給客戶端。沒有芹菜,沒有長期投票。一個偉大的代碼片段here

+0

您的回答讓我意識到我錯誤地解釋了我的問題。我已經更新了我的解釋(希望它更清楚)。 – elbear