内容简介:每当看到成千上万个这种接口时,总是感觉菊花一紧一紧的;这些接口里隐藏着让你深深蛋疼的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接口生成和调用 图文详解
- 数据一致性(一) - 接口调用一致性
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Mining
Jiawei Han、Micheline Kamber、Jian Pei / Morgan Kaufmann / 2011-7-6 / USD 74.95
The increasing volume of data in modern business and science calls for more complex and sophisticated tools. Although advances in data mining technology have made extensive data collection much easier......一起来看看 《Data Mining》 这本书的介绍吧!