Gateway介面轉發維護

来源:https://www.cnblogs.com/yangchaojie/archive/2022/05/18/16284723.html
-Advertisement-
Play Games

介面轉發調用 問題描述 在開發BI系統的時候,出現了這樣一個不方便的地方。 BI報表所展示的數據是從WMS系統通過API獲取的,而BI系統也有自己的後臺實現了用戶許可權之類的。 那麼現在如果WMS開發了一個新的介面,我就要在BI系統手動寫一個介面,實在很不方便。解決的方法也很簡單,BI系統開發一個AP ...


介面轉發調用

問題描述

在開發BI系統的時候,出現了這樣一個不方便的地方。

BI報表所展示的數據是從WMS系統通過API獲取的,而BI系統也有自己的後臺實現了用戶許可權之類的。

那麼現在如果WMS開發了一個新的介面,我就要在BI系統手動寫一個介面,實在很不方便。解決的方法也很簡單,BI系統開發一個API管理的功能,將WMS介面手動維護進去,包括URL Method Params 等。

BI系統提供一個統一的WMS介面入口,我叫gateway。

前端只請求gateway介面,帶上介面代碼和公司代碼。

Vue Gateway 代碼

const api = {
  gateway (api, params) {
    const formData = new FormData()
    formData.append('params', JSON.stringify(params))
    return new Promise((resolve, reject) => {
      request({
        url: '/gateway/dispatch/' + store.getters.getCompanyCode + '/' + store.getters.getCompanyCode + '-' + api,
        method: 'post',
        data: formData
      })
        .then((resp) => {
          // eslint-disable-next-line no-prototype-builtins
          if (resp.data.hasOwnProperty('ErrorMessages')) {
            window.CIEMIS.$emit('SERVER_ERROR', {
              text: resp.data.ErrorMessages[0]
            })
          }
          resolve(resp.data)
        })
        .catch((err) => {
          // eslint-disable-next-line no-prototype-builtins
          reject(err)
        })
    })
  }
}
 

BI不止為一個公司服務,因此公司代碼是動態獲取的,不同的公司可以動態切換。

BI 後臺實現

    @RequestMapping("/dispatch/{companyCode}/{api}")
    @ResponseBody
    public ResponseData gateway(@PathVariable String companyCode, @PathVariable String api, String params) {
        Company company = companyRepository.findCompanyByCode(companyCode);
        Gateway gateway = gatewayRepository.findGatewayByCode(api);
        if (Objects.isNull(company)) {
            throw new NullPointerException("公司異常");
        }
        if (Objects.isNull(gateway)) {
            throw new NullPointerException("沒有維護API");
        }

        String url = company.getWebAddress() + gateway.getUrl();
        Map<String, String> paramsMap = new HashMap<>();
        // 驗證介面參數一致性
        JSONArray array = JSONArray.parseArray(gateway.getParams());
        JSONObject paramsObj = JSONObject.parseObject(params);
        for (int i = 0; i < array.size(); i++) {
            String paramName = array.getJSONObject(i).getString("name");
            if (Objects.isNull(paramsObj.getString(paramName))) {
                throw new ServiceException(500, "gateway參數校驗失敗");
            }
            paramsMap.put(paramName, paramsObj.getString(paramName));
        }
        String result;
        try {
            if (gateway.getMethod().equals("POST")) {
                result = OkHttpUtil.sendPostRequest(url, paramsMap).body().string();
            } else {
                result = OkHttpUtil.get(url, paramsMap).body().string();
            }
        } catch (IOException e) {
            throw new ServiceException(500, "gateway IO Exception: " + e.getMessage());
        }
        Object o = JSON.parse(result);
        if (o instanceof JSONArray) {
            return ResponseData.success(200, "OK", JSON.parseArray(result));
        } else {
            return ResponseData.success(200, "OK", JSON.parseObject(result));
        }
    }
 

實際使用

api.gateway('BIScrapActions', {
  PlantCode: 'P01',
  RptType: 'Scrap'
}).then((resp) => {
  this.data = resp
  this.initCharts()
})
 

這樣就完成了。

POSTMAN 參數自動格式化

  this.params_table = val.split(' ').map((item) => {
    return {
      name: item.split(':')[0],
      value: item.split(':')[1]
    }
  })
},
 

提供介面測試

在介面維護的時候會填寫參數KV,值為測試值,可以在網頁測試介面是否通過。在實際調用中會對參數進行匹配。

最後吐個槽,要不是老是改介面煩死了,估計我也不會這麼想,不得不說程式員得學會偷懶。

這不就把活丟給別人做了嗎,WMS有新的介面了自己去BI後臺維護去,哈哈哈哈哈哈。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 什麼是隱藏類 隱藏類,是一種不能被其他類直接使用的類。引入隱藏類的主要目的是給框架來使用,使得框架可以在運行時生成類,並通過反射間接使用它們。可能有點抽象,不要緊,下麵我們通過一個例子來直觀的認識它! 隱藏類案例 第一步:先創建一個普通的Java類 public class JEP371Hidden ...
  • 下麵介紹的是JUC包下一些線程安全類的一些簡單使用和一些小demo。 Semaphore 信號量,即可以同時使用的線程數,tryrequire就是將信號量減一,release就是信號量+1,當等於0就會阻塞,大於零才會喚醒。 當需要控制線程訪問數量,可以使用信號量來做控制,比較簡單。 下麵是使用信號 ...
  • Spring Ioc源碼分析系列--Ioc容器註冊BeanPostProcessor後置處理器以及事件消息處理 前言 上一篇分析了BeanFactoryPostProcessor的作用,那麼這一篇繼續在refresh()方法里游蕩,相信對Spring熟悉點的朋友,在看完BeanFactoryPost ...
  • 大家好,這篇文章分享了C程式設計(譚浩強)第五版第十章課後題答案,所有程式已經測試能夠正常運行,如果小伙伴發現有錯誤的的地方,歡迎留言告訴我,我會及時改正!感謝大家的觀看!!! ...
  • 高精度 運算:加法、減法、階乘、乘法 翻轉: 這些運算都是從小位開始,所以一般需要翻轉。以字元串儲存:reverse(a.begin(),a,end())。以數組儲存: for (int i1 = lena1 - 1; i1 >= 0; i1--) { a1[lena1-1-i1] = a[i1] ...
  • 大家好,這篇文章分享了C程式設計(譚浩強)第五版第九章課後題答案,所有程式已經測試能夠正常運行,如果小伙伴發現有錯誤的的地方,歡迎留言告訴我,我會及時改正!感謝大家的觀看!!! ...
  • 回溯法(98條消息) (新手向)遞歸與回溯演算法學習(一)——n位逐位整除數_TripleGold.的博客-CSDN博客 演算法思想: (通用的解題法)窮舉的搜索嘗試過程,主要是在搜索嘗試過程中尋找問題的解,當發現不滿足求解條件時就回退,嘗試其他路徑 回溯法的解題步驟: 針對給定問題確定問題的解空間樹, ...
  • 大家好,這篇文章分享了C程式設計(譚浩強)第五版第八章課後題答案,所有程式已經測試能夠正常運行,如果小伙伴發現有錯誤的的地方,歡迎留言告訴我,我會及時改正!感謝大家的觀看!!! ...
一周排行
    -Advertisement-
    Play Games
  • Github / Gitee QQ群(1群) : 813100564 / QQ群(2群) : 579033769 視頻教學 介紹 MiniWord .NET Word模板引擎,藉由Word模板和數據簡單、快速生成文件。 Getting Started 安裝 nuget link : https:// ...
  • Array.Sort Array類中相當實用的我認為是Sort方法,相比起冗長的冒泡排序,它的出現讓排序更加的簡化 結果如下: 還可以聲明一個靜態方法用來專門調用指定數組排序,從名為 array 的一維數組中 a 索引處開始,到 b 元素 從小到大排序。 註意: a + b 不能大於 array 的 ...
  • 前言 在上一篇文章CLR類型系統概述里提到,當運行時掛起時, 垃圾回收會執行堆棧遍歷器(stack walker)去拿到堆棧上值類型的大小和堆棧根。這裡我們來翻譯BotR里一篇專門介紹Stackwalking的文章,希望能加深理解。 順便說一句,StackWalker在中文里似乎還沒有統一的翻譯,J ...
  • 使用過 nginx 的小伙伴應該都知道,這個中間件是可以設置跨域的,作為今天的主角,同樣的 反向代理中間件的 YARP 毫無意外也支持了跨域請求設置。 有些小伙伴可能會問了,怎樣才算是跨域呢? 在 HTML 中,一些標簽,例如 img、a 等,還有我們非常熟悉的 Ajax,都是可以指向非本站的資源的 ...
  • 什麼是Git Git 是一個開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的項目。 Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟體。 Git 與常用的版本控制工具 CVS, Subversion 等不同,它採用了分散式版本庫的 ...
  • 首先CR3是什麼,CR3是一個寄存器,該寄存器內保存有頁目錄表物理地址(PDBR地址),其實CR3內部存放的就是頁目錄表的記憶體基地址,運用CR3切換可實現對特定進程記憶體地址的強制讀寫操作,此類讀寫屬於有痕讀寫,多數驅動保護都會將這個地址改為無效,此時CR3讀寫就失效了,當然如果能找到CR3的正確地址... ...
  • 說明 onlyoffice為一款開源的office線上編輯組件,提供word/excel/ppt編輯保存操作 以下操作均基於centos8系統,officeonly鏡像版本7.1.2.23 鏡像下載地址:https://yunpan.360.cn/surl_y87CKKcPdY4 (提取碼:1f92 ...
  • 二叉樹查找指定的節點 前序查找的思路 1.先判斷當前節點的no是否等於要查找的 2.如果是相等,則返回當前節點 3.如果不等,則判斷當前節點的左子節點是否為空,如果不為空,則遞歸前序查找 4.如果左遞歸前序查找,找到節點,則返回,否繼續判斷,當前的節點的右子節點是否為空,如果不為空,則繼續向右遞歸前 ...
  • ##Invalid bound statement (not found)出現原因和解決方法 ###前言: 想必各位小伙伴在碼路上經常會碰到奇奇怪怪的事情,比如出現Invalid bound statement (not found),那今天我就來分析以下出現此問題的原因。 其實出現這個問題實質就是 ...
  • ###一、背景知識 爬蟲的本質就是一個socket客戶端與服務端的通信過程,如果我們有多個url待爬取,只用一個線程且採用串列的方式執行,那隻能等待爬取一個結束後才能繼續下一個,效率會非常低。 需要強調的是:對於單線程下串列N個任務,並不完全等同於低效,如果這N個任務都是純計算的任務,那麼該線程對c ...