首頁  >  文章  >  後端開發  >  javascript - 請問API介面閘道怎麼設計?

javascript - 請問API介面閘道怎麼設計?

WBOY
WBOY原創
2016-12-01 01:27:331422瀏覽

目前一個頁面給前端提供了多個接口,但每個接口之間是獨立的.不可能合併在一起.
前端想一次請求,獲取到多個接口裡的數據.因此想設計個網關.供前端使用.
功能是:傳入多個請求接口.一次把每個接口裡的數據組裝個數組返回到前端.
目前的想法是在中間加個node 層.
請求大家有什麼指教嗎?謝謝

ps:介面合併冗餘,改動都很大~而且不利於擴充.因此目前拋棄了這種方式

回覆內容:

目前一個頁面給前端提供了多個接口,但每個接口之間是獨立的.不可能合併在一起.
前端想一次請求,獲取到多個接口裡的數據.因此想設計個網關.供前端使用.
功能是:傳入多個請求接口.一次把每個接口裡的數據組裝個數組返回到前端.
目前的想法是在中間加個node 層.
請求大家有什麼指教嗎?謝謝

ps:介面合併冗餘,改動都很大~而且不利於擴充.因此目前拋棄了這種方式

合併介面資料需要考慮一旦合併資料後資料量的問題。
如果本身不需要考慮這種情況,那麼可以直接在後端多開一個接口,直接返回前端想要的所有資料。這樣就沒必要在中間多加個node層了

是可以實現的, 並且對前端的ajax進行改裝, 如改裝jQuery的ajax

要實現的是前端自動合併, 邏輯是這樣:

<code>#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); // 对响应内容进行数据提取并回调
    }
});</code>

設定後台打包介面回傳的資料規格,如:

<code>>>>pkg_callback_234244
{"status":0, "error":null, "data":[1,2,3,4]}
<<<
>>>pkg_callback_424234
{"status":0, "error":null, "data":{"logined":true}}
<<<</code>

也就是每個套件的結構在這裡定義為 >>>{callback}n{data}ncallback是我們在隊列處理時, 添加在jQuery物件上的, 如

<code>jQuery.pkg_callback_424234 = {
    success: fucntion(data){}, // 等于或封装了原ajax请求的success方法回调
    error: function(err){}
}</code>

提取到data, 和 callback, 就可以執行

<code>jQuery.pkg_callback_424234.success.call(xhr, JSON.parse(data) );
// 移除回调
delete jQuery['pkg_callback_424234'];</code>

合併接口,把所有資料一次給他? ?

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn