三方联调之网关接口设计

394 阅读2分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。

日常业务开发过程中,常常有对接第三方接口,此时会用到网关。所谓网关又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。

网关的实现是通过指定接口发出请求,再进入指定接口接收请求,随后将请求转发为实际请求服务器的接口上。

通过网关请求的接口往往也要加密,要加密钥一起请求。

网关存在的原因:

解决微服务技术架构下,请求管理功能

解决微服务技术架构下,多客户端的适配,采用单一入口,完成协议适配

网关的基本实现如下:

  /**
     * 网关约定出入参都要加密加签,因此参数格式可以使用到的是json串
     */
    public Response execute(String url, String jsonStr) {
        Response resp = null;
        String Path = getPath(url);
        String requestId = UUID.randomUUID().toString();
        try {
            log.info("reqId: {}, requestCode: {}, params: {}", requestId, Path, json);
            GateTestClient      client  = new GateTestClient(appId, appKey, url, testKey, publicKey);
            HTestRequest request = new HTestRequest(Path, json);
            request.setRequestId(requestId);
            client.setRequestEncrypt(rtest);
            client.setResponseSign(SignTest);
            client.setConnectTimeout(10000);
            resp = client.do(request);
            log.info("gateway response, reqId: {}, requestCode: {}, result: {}", requestId, Path, JSON.toJSONString(resp));
        } catch (Exception e) {
            log.error(" reqId: {}, requestCode: {}, errMsg: {}",  requestId, rawPath, e.getMessage(), e);
            alarm(e.getMessage());
        }
        return resp;
    }

设计网关的时候最好是每个环境都有一个路由,分别是开发环境、测试环境、预发环境、线上环境,均有对应的路由,然后在每个环境联调的时候就可以开启路由,保证配置的路由正确,这个可以通过分发机制去实现。

如何将实现层的接口放入到网关中,请看下面的代码实例。