RPC调用接口设计

栏目: 服务器 · 发布时间: 6年前

内容简介:每当看到成千上万个这种接口时,总是感觉菊花一紧一紧的;这些接口里隐藏着让你深深蛋疼的x个未知方法;对业务做修改和扩展时,是否有过一个类一个类翻注释看捋业务代码的经历?
  • 维护性较差
  • 可控性性差
  • 适用性良好
维护性差: 因需求与日俱增,接口的数量也变得繁多而不可控,接口调用关系复杂;可读性差,学习及维护成本大;
     
     可控性差: 无法细粒度控制到方法,无法动态管理接口、方法(如权限校验、流控、降级容错、方法隔离)等;
     
     适应性好:就是说想怎么写就怎么写,无拘无束,无需考虑太多;
     
     
复制代码
  • 接口现状举例
- Trans001001Facade
          - Trans002001Facade
          - Trans003001Facade
          - Trans004001Facade
          - Trans005001Facade
          - Trans006001Facade
          - 成百上千个Facade向你袭来  ........
      
复制代码

每当看到成千上万个这种接口时,总是感觉菊花一紧一紧的;

这些接口里隐藏着让你深深蛋疼的x个未知方法;

对业务做修改和扩展时,是否有过一个类一个类翻注释看捋业务代码的经历?

RPC调用接口设计

接口改造设计

  • 通用性
  • 扩展性
  • 维护性
  • 可控性
扩展性: 接口可以适应突如起来的业务变更,而不对外部产生任何影响;
        
        维护性: 业务易读、易维护、可动态调整;编码者只需关注业务实现即可,快速迭代开发;
        
        可控性: 控制权交给控制台,跟踪方法执行,动态调整方法(添加权限,报警,日志等),无需修改代码、上下线;
        
     
复制代码
  • 控制台样例展示

    因工作比较忙,工程处于开发阶段

    详细设计因公暂不能公开

RPC调用接口设计
  • 设计思路

    设计离不开场景,切记

    • 维护性:便于管理, 采用统一接口调用方式, 对外部服务只暴露一个接口, 接口业务参数统一采用Json格式, 以接口文档约定开发规则;
    • 可控性:为加强对接口、方法的管理控制; 方法和接口由签名做映射关系、由spring容器或自定义容器来管理、操作;
    • 扩展性:因对外部接口暴露的是签名, 那么可以控制签名的状态来对访问做控制和隔离; 对容器里的实例做拦截链; 动态的为业务增加功能;
    • 适用性:约定大于俗称; 开发人员只需关注业务代码开发, 内部服务联调接口只需配置即可启用, 无需再为接口字段变更和接口名变更而忧愁, 加快开发进度;
    • 易读性:采用Spring容器管理和反射原理做基础实现, 通俗易懂;
    • 难点:分布式下,应用集群、同城、异地机房部署集群的接口、方法管理;

接口文档demo

RPC调用接口设计

接口说明

  • 统一调用接口commonFacade.process(Request req);
  • 接口统一入参Request
  • 统一出参Result
  • 入参出参按接口文档约定进行交互
  • 示例
@Test
    public void testTransQuery(){
        Request trans = remoteRequest("small.pay","trans.small.pay.query","{}");
        Result process = commonFacade.process(trans);
        log.info(process.toString());
    }



    private Request remoteRequest(String bizType,String operateType,String json) {
        return Request.builder()
                .bizType(bizType)
                .operateType(operateType)
                .paramJson(json)
                .requestTime(new Date())
                .systemId("TRANS")
                .traceId(UUID.randomUUID().toString())
                .build();
    }

复制代码
  • 接口参数Request

通信方式 Hessian

序号 字段 描述
1 CLEARING 组标识号
2 small.batch.pay 小额批付业务
3 clearing.bank.code.add 小额批付新增行名行号
4 requestTime 请求时间new Date()
5 traceId 链路ID
6 paramJson 业务参数(见参数明细)
  • 参数明细

格式Json类型 若数据量大,建议分批请求

序号 字段 长度 是否可空 描述
1 bankCode Text(24) 参与机构行号
2 bankType Text(8) 参与机构类别
3 category Text (8) 行别代码
4 drctBankCode Text(16) 所属直参行号
5 lglPrsn Text(32) 所属法人
6 highOrg Text (128) 本行上级参与机构
7 ineffectiveDate TimeStamp 失效日期
8 createdBy Text (32) 创建人
9 updatedBy Text (32) 更新人
  • 出参
## Result<String> result = new Result();
## String 值为下行代码

JSON.toJSONString(Boolean.TRUE);

复制代码

以上所述就是小编给大家介绍的《RPC调用接口设计》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python编程无师自通

Python编程无师自通

[美] 科里·奥尔索夫(Cory Althoff) / 宋秉金 / 人民邮电出版社 / 2019-1-1 / 59

畅销Python编程类入门书,美国亚马逊Kindle编程类排行榜榜一。 作者从文科毕业,通过自学编程转行为专业程序员,在硅谷工作多年后成功技术创业。本书不仅教读者如何使用Python语言编程,还会介绍其他书中所忽略的、编程初学者应该了解并掌握的其他所有知识点。 本书作者是一名自学成才的程序员,经过一年的自学,掌握了编程技能并在eBay找到了一份软件工程师的工作。本书是作者结合个人经验写......一起来看看 《Python编程无师自通》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具