1.0版本是从原开发平台剥离出来的,经过近一个月的重构与优化,正式发布2.0版本。
2.0实现了开发平台内嵌,可以做到独立运行,开箱即用,并完善了系统介绍与开发环境搭建,详见https://gitee.com/popsoft/common-interface-platform
参照淘宝开放平台思路实现的一个通用接口平台,适用于将某套系统自身作为服务和数据中心,由平台对外提供一套标准的Rest风格的API服务作为服务接口,相关方系统通过这些API服务进行数据查询或数据更新。 同时,为了规避相关方系统需要定时轮询来获取数据变动的弊端,使用基于netty实现的消息通知服务。
由平台技术框架部分,承担通用的逻辑实现,如数据验证、服务分发与调用、权限、日志、异常,而具体的业务API服务和业务系统的开发,仅需关注业务逻辑的实现即可。
首先简单聊下背景,大概是几年前,工作中遇到这么一个复杂的应用场景,大型企业中的物流系统,需要跟众多的内外部系统交互,对接的系统达到十几个,接口数量在50个左右,并且后续还会大量增加新的对接方,并且很多对接方是类似的,例如跟汽运物流厂商的运输管理系统TMS,进行运输委托、运力反馈、运费结算、签收回传等交互。
如何还是按照传统模式去做点对点集成,会消耗大量成本,包括时间和费用,并且上线后还会搭上大量的运维成本。同时,伴随的问题,当业务发生变更时,接口的升级更新,也是大麻烦,往往涉及到多方协调、开发、联调、上线。
基于这个背景,思考一种优雅的解决方案,能低成本、高效率解决这个难题。
最终思路是实现一套物流系统的接口开放平台,由平台对外提供一套标准的Rest风格的API服务作为服务接口,相关方系统通过这些API服务进行数据查询或数据更新。
同时,为了规避相关方系统需要定时轮询来获取数据变动的弊端,另外提供一套服务的消息服务机制,接口开放平台作为消息服务中心,接收物流系统作为生产者产生的业务消息,如委托单创建、车辆入厂、用户签收,然后查找订阅该消息主题的相关方系统,实时以消息推送的方式通知相关方系统。
由平台技术框架部分,承担通用的逻辑实现,如数据验证、服务分发与调用、权限、日志、异常,而具体的业务API服务和业务系统的开发,仅需关注业务逻辑的实现即可。
总结下,也就是依托面向对象设计理念,对接口和消息进行组织:功能模块->业务实体->功能接口及消息
API服务接口实现具体功能,消息服务接口实现消息通知。
该平台主要由两部分组成,API服务和消息服务。
API服务:物流接口平台对外提供统一的数据接口服务,其他应用系统通过调用API服务,一方面,可以查询权限范围内的物流数据,另一方面,可以将自身系统产生的数据推送至物流系统。
消息服务:物流接口平台提供消息服务,主动将物流系统的数据的变化以消息的形式推送给其他系统。消息服务基于Socket技术,调用方系统与物流接口平台建立长连接,实时接收消息通知,避免调用方定时轮询,提高API调用效率,降低双方服务器负荷。
这样做,最大的优点就是实现了标准化,相关方来对接时,如果现有的API能满足需求,只需提供标准化的服务接口,做简单的初始化配置(账号、密钥、权限、角色等)即可,最多加一点技术支持(解答疑问、联调);如果现有的API服务不能满足需求,则只需要设计和实现新的业务API服务就行了,并且新服务开发发布后,以后还能复用。
项目为前后端分离模式,前端为vue+element ui,基于开源的vue-element-admin框架,进行了深度调整与整合,完全开源。
后端是基于开发平台后实现通用接口平台,将通用接口平台视为一套业务系统。
开发平台提供系统框架,包括组织机构、人员、角色、权限、数据字典,认证、缓存、日志等内核功能,以及附件、通知公告、门户、任务调度等扩展功能,该部分以jar包方式提供,使通用接口平台可以开箱即用。
通用接口平台主体是cip模块,包括三部分功能:
1.服务端的api,即通常说的数据接口
2.消息服务服务端
3.接口平台自身管理,如应用(对接系统)管理、接口服务、消息主题、数据权限、日志。
此外,提供了一个消息客户端的demo模块,名称为message-client,该模块相当于给对接方系统使用,有独立的库表,未实现前端管理功能,建议与原业务系统整合。
message-common模块是提取消息服务端及客户端公用内容形成的。
需预装MySql数据库和Redis
执行common-interface-platform\backend\cip\src\main\resources\init\01database目录下init.sql,创建cip系统的数据库,该数据包括开发平台自身库表和通用接口平台的业务库表。
因jar未上传到maven中央仓库,因此采用提供jar包,本地安装模式,具体如下:
进入common-interface-platform\backend\cip\src\main\resources\init\02install-loclal-jar
将该目录拷贝到自己的maven本地私库根路径下
注:此处使用mvn install命令,测试发现jar能安装,但pom文件会丢失,导致无法使用,因此变更为直接拷贝方式。
调整application-dev.yml中文件中相应属性值
执行common-interface-platform\client\backend\message-client\src\main\resources目录下init.sql,创建message_clien的数据库
位于common-interface-platform\frontend\web目录,使用vscode打开,在npm脚本中运行dev即可启动,默认端口9080
默认账号:admin 默认密码:12345678
注:系统的下拉数据源,也即数据字典使用redis缓存,按上述步骤构建后,部分查询界面不显示中文名称,可在系统登录后,访问系统管理-》系统维护菜单下的“重建缓存”按钮,系统会自动将数据库的字典数据写入到redis中。