01 背景
在现代商业环境中,为了实现商业目标和利益的最大化,企业之间经常进行各种合作,例如供应链合作、销售渠道合作、技术合作等等。在这种背景下,对外合作成为了会员业务的重要组成部分,随着业务的发展,外部合作的需求越来越多,如何能高效完成与合作方的对接,成为了一个重要的课题。
02 合作方式介绍
对外合作主要是以接口方式对接,负责企业之间的数据交换和服务共享。合作方式分为以下2种:
1、合作方标准化:合作方制定接口的数据格式、传输协议、安全机制、状态码、错误处理等规范,爱奇艺按照合作方规范定制化开发,合作方没有开发工作量。
2、爱奇艺标准化:爱奇艺制定接口的规范,合作方按照爱奇艺的规范定制化开发,爱奇艺没有开发工作量。
我们最希望用第2种方式对接,没有开发工作量,但是很多合作方坚持用自己的标准,导致每个合作对接的需求都要定制开发,这种实现方式严重阻碍了业务的发展,需要找到一个通用设计方案提升对接的效率。
03 方案调研
我们从实际业务场景出发,分析一下合作方接口定制化对接的流程:
1、将内部系统数据对象转换为合作方约束的请求参数
2、将转换后的参数,按照合作方指定的规则生成签名
3、以合作方指定的方式完成接口调用
4、解析接口响应,获取对应的响应码及合作方侧返回的业务信息等
5、更新本地记录
不同合作方的对接流程是一样的,不同的是请求参数、签名规则、接口调用方式、响应报文格式,所以可以抽象标准流程,把不同的处理逻辑封装为组件,通过接口串联组件流程,达到组件配置即可完成接口对接的目的。实现思想如下:
经过组件化拆分后,各个组件的职责具有一定的独立性和复用性。开发同学只需要关注新组件的实现,不会影响其他组件的功能。随着组件的不断增加,最终合作方的对接都不需要开发,可以大幅提升接口对接的效率。
04 解决方案
整体流程
流程基本骨架和组件进行了拆分,组件由组件库统一管理,组件执行流程可配置。在接口逻辑执行过程中,组件流程可以动态加载。执行完成后,统一更新业务数据。交互流程如下图所示:
核心类图
CallerContext:请求上下文,封装流程执行的配置信息、参数信息
Caller:流程执行抽象接口
StandardCaller:Caller的标准实现,定义了目前对接方式的标准流程、负责调度下层各个组件的执行
IConvertParamComponent:参数转换组件接口,负责将内部标准参数转换为三方接口参数
ISignComponent:生成签名组件接口,负责对转换后参数进行签名计算
IExecuteComponent:调用三方接口组件,负责以指定方式完整对三方接口的调用
IParseResComponent:解析响应组件,负责对三方接口响应进行解析,识别调用结果是否出现异常等等
05 成果及展望
成果
目前系统已预置一部分组件,理论上可以支撑近千种对接方式,90% 以上的对接无需开发。在提效方面,节省了开发和测试时间,整体成本降低 86% 。
展望
后续将组件化设计思想抽象为组件平台,流程配置不局限在对外合作业务场景,可以支持任意的业务流程编排,组件上下线支持热插拔,无需服务安装部署。通过平台化的设计,可以支持更多的业务场景,助力公司的整体效能提升。