目前一個頁面給前端提供了多個介面,但每個介面之間是獨立的.不可能合并在一起.
前端想一次請求,擷取到多個介面裡的資料.因此想設計個網關.供前端使用.
功能是:傳入多個請求介面.一次把每個介面裡的資料群組裝個數組返回到前端.
目前的想法是在中間加個 node 層.
請求大家有什麼指教嗎?謝謝
ps:介面合并冗餘,改動都很大~而且不利於擴充.因此目前拋棄了這種方式
回複內容:
目前一個頁面給前端提供了多個介面,但每個介面之間是獨立的.不可能合并在一起.
前端想一次請求,擷取到多個介面裡的資料.因此想設計個網關.供前端使用.
功能是:傳入多個請求介面.一次把每個介面裡的資料群組裝個數組返回到前端.
目前的想法是在中間加個 node 層.
請求大家有什麼指教嗎?謝謝
ps:介面合并冗餘,改動都很大~而且不利於擴充.因此目前拋棄了這種方式
合并介面資料需要考慮到一旦合并資料後資料量的問題。
如果本身不需要考慮這種情況,那麼可以直接在後端多開一個介面,直接返回前端想要的所有資料。這樣就沒必要在中間多加個node層了
是可以實現的, 並且對前端的ajax進行改裝, 如改裝jQuery的ajax
要實現的是前端自動合并, 邏輯是這樣:
#1. 每當發起一個ajax請求時, 會暫存隊列等待, 比如20ms#2. 期間如果又發起了一個ajax請求, 該請求也會被放入隊列, 等待下一個ajax()調用, 而20ms內沒有ajax()調用, 則會拼接隊列中的請求資料, 向服務端發起合并請求.#3. 當然, 第一個ajax發起後, 會有個等待逾時如80ms, 防止不停的等待, 第一個請求遲遲發不出#4. GET和POST的隊列分開#5. 合并的請求資料結構, 如:$.ajax({ url: "http://mydomain.com/ajax_package", dataType:"text", // 資料類型為text, 需要分割解析, 把結果分配到指定請求回調 data:{ "actions":[ // 當然, 這個參數要json化, jQuery自動會urlencode { "callback": "pkg_callback_234244", // 建立回調handle "url": "ajax1_url", // 請求1的url "data": "ajax1_data" // 請求1的data }, { "callback": "pkg_callback_424234", // 建立回調handle "url": "ajax2_url", // 請求2的url "data": "ajax2_data" // 請求2的data } // 更多合并的請求資料 ] }, success:function(res){ dispatch(res); // 對響應內容進行資料提取並回調 }});
設定後台打包介面返回的資料規範,如:
>>>pkg_callback_234244{"status":0, "error":null, "data":[1,2,3,4]}<<<>>>pkg_callback_424234{"status":0, "error":null, "data":{"logined":true}}<<<
也就是每個包的結構在這裡定義為 >>>{callback}n{data}n<<<
callback是我們在隊列處理時, 添加在jQuery對象上的, 如
jQuery.pkg_callback_424234 = { success: fucntion(data){}, // 等於或封裝了原ajax請求的success方法回調 error: function(err){}}
提取到data, 和 callback, 就可以執行
jQuery.pkg_callback_424234.success.call(xhr, JSON.parse(data) );// 移除回調delete jQuery['pkg_callback_424234'];
合并介面,把所有資料一次性給他??