百木园-与人分享,
就是让自己快乐。

Gateway接口转发维护

接口转发调用

问题描述

在开发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后台维护去,哈哈哈哈哈哈。


来源:https://www.cnblogs.com/yangchaojie/p/16284723.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Gateway接口转发维护

相关推荐

  • 暂无文章