呼叫後端介面 / 介面適配

天笑發表於2017-02-05

介面適配

在上例中,假定了後端介面相容筋斗雲介面規範,例如返回格式為[0, jsonData][非0, 錯誤資訊]。 如果介面協議不相容,則需要做介面適配。

介面適配的目標是通過callSvr函式更加簡練地呼叫後臺介面,同時達到:

  • 呼叫出錯統一處理,例如未認證錯跳轉到登入頁,其它錯誤彈出錯誤提示框等。
  • 寫程式碼時只需要處理呼叫成功後返回的資料,不用每次呼叫都處理各種錯誤。

[任務]

適配以下介面協議規範,約定介面返回格式為:{code, msg, data}, 例如上例中的hello介面,呼叫成功時返回:

{
    "code":"0",
    "msg":"success",
    "data":"jdcloud"
}

失敗返回:

{
    "code":"99",
    "msg":"對不起,伺服器爆炸了"
}

這時需要對callSvr進行適配,可以在app.js中,設定 MUI.callSvrExt如下:

    MUI.callSvrExt['default'] = {
        makeUrl: function(ac) {
            return 'http://hostname/lcapi/' + ac;
        },
        dataFilter: function (data) {
            if ($.isPlainObject(data) && data.code !== undefined) {
                if (data.code == 0)
                    return data.data;
                if (this.noex)
                    return false;
                app_alert("操作失敗:" + data.msg, "e");
            }
            else {
                app_alert("伺服器通訊協議異常!", "e"); // 格式不對
            }
        }
    };

我們在mockdata.js中設定好模擬資料用於測試:

MUI.mockData = {
    "User.get": {code: 0, msg: "success", data: user},
    "hello": {code: 0, msg: "success", data:"myworld"}
    ...
}

上例中,User.get介面在顯示首頁是會呼叫,所以和"hello"介面一併模擬下。

測試介面呼叫:

callSvr("hello", console.log);
或
callSvrSync("hello");

callSvrSynccallSvr的同步呼叫版本,它直接等到呼叫完成才返回,且返回值就是呼叫成功返回的資料。

可以動態修改模擬資料:

MUI.mockData["hello"] = {code: 99, msg: "對不起,伺服器爆炸了"}

在介面適配完成後,應用層程式碼不用去做任何修改。 進入頁面看看,是不是和上節的執行結果是一樣的。

相關文章