内容简介:每当看到成千上万个这种接口时,总是感觉菊花一紧一紧的;这些接口里隐藏着让你深深蛋疼的x个未知方法;对业务做修改和扩展时,是否有过一个类一个类翻注释看捋业务代码的经历?
- 维护性较差
- 可控性性差
- 适用性良好
维护性差: 因需求与日俱增,接口的数量也变得繁多而不可控,接口调用关系复杂;可读性差,学习及维护成本大; 可控性差: 无法细粒度控制到方法,无法动态管理接口、方法(如权限校验、流控、降级容错、方法隔离)等; 适应性好:就是说想怎么写就怎么写,无拘无束,无需考虑太多; 复制代码
- 接口现状举例
- Trans001001Facade - Trans002001Facade - Trans003001Facade - Trans004001Facade - Trans005001Facade - Trans006001Facade - 成百上千个Facade向你袭来 ........ 复制代码
每当看到成千上万个这种接口时,总是感觉菊花一紧一紧的;
这些接口里隐藏着让你深深蛋疼的x个未知方法;
对业务做修改和扩展时,是否有过一个类一个类翻注释看捋业务代码的经历?
接口改造设计
- 通用性
- 扩展性
- 维护性
- 可控性
扩展性: 接口可以适应突如起来的业务变更,而不对外部产生任何影响; 维护性: 业务易读、易维护、可动态调整;编码者只需关注业务实现即可,快速迭代开发; 可控性: 控制权交给控制台,跟踪方法执行,动态调整方法(添加权限,报警,日志等),无需修改代码、上下线; 复制代码
-
控制台样例展示
因工作比较忙,工程处于开发阶段
详细设计因公暂不能公开
-
设计思路
设计离不开场景,切记
- 维护性:便于管理, 采用统一接口调用方式, 对外部服务只暴露一个接口, 接口业务参数统一采用Json格式, 以接口文档约定开发规则;
- 可控性:为加强对接口、方法的管理控制; 方法和接口由签名做映射关系、由spring容器或自定义容器来管理、操作;
- 扩展性:因对外部接口暴露的是签名, 那么可以控制签名的状态来对访问做控制和隔离; 对容器里的实例做拦截链; 动态的为业务增加功能;
- 适用性:约定大于俗称; 开发人员只需关注业务代码开发, 内部服务联调接口只需配置即可启用, 无需再为接口字段变更和接口名变更而忧愁, 加快开发进度;
- 易读性:采用Spring容器管理和反射原理做基础实现, 通俗易懂;
- 难点:分布式下,应用集群、同城、异地机房部署集群的接口、方法管理;
接口文档demo
接口说明
- 统一调用接口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调用接口设计》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- XRPC之接口双向调用
- C#动态调用WCF接口
- python调用接口数据写入hive
- 撮合平台 1.0.1 发布 暴露远程调用接口
- Java WebService接口生成和调用 图文详解
- 数据一致性(一) - 接口调用一致性
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
TCP/IP详解 卷1:协议
W.Richard Stevens / 范建华 / 机械工业出版社 / 2000-4-1 / 45.00元
《TCP/IP详解卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者W.Richard Stevens用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 《TCP/IP详解卷1:协议》适合作为计算机专业学......一起来看看 《TCP/IP详解 卷1:协议》 这本书的介绍吧!