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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...