一、代理产生的需求分析
当有客户需要定制ai、bi产品的大屏、报警时,需要调用ai、bi等数据的api,但是直接调用ai、bi的api是不能够获取数据的,因为,调用接口的时候,需要通过验证才可以,否则调用接口就是返回的是401状态(未授权的状态),所以,就需要定制一款产品,可以直接调用代理所提供的api获取ai的数据。在代理产生之前都是通过定制ai产品,对外提供开放的api提供数据,这样的做法操作起来比较繁琐,而且效率较低,所以,我们就使用了代理的方式获取ai数据。
二、代理系统原理
根据ai、bi等产品的特性,在每一次调用dv的api时,请求的url的请求头中都会携带一些登陆验证的信息,对接用户中心的产品和没有对接用户中心的产品,登陆认证的方式是不同。
1、对接用户中心
对接用户中心时,登陆时访问的接口为:/account/sessionId.do 请求方法:get
在访问其他接口之前,都会先调用这个接口获取用户的登陆信息,然后,再调用其它接口之前,每次请求的url的头信息中都会携带登陆接口所返回的认证信息,这样就可以正常访问ai、bi等产品的其他接口了。
2、无对接用户中心
当是部署单独的产品时,登陆时访问的接口为:/tpm/account/login 请求方法:post
剩下的具体的操作过程是和 对接用户中心 的步骤是一样的,区别是,两个登陆接口所返回的值是不同的。
3、代理的优化处理
具备了基本的核心功能,后续就需要有许多优化的处理,这个工作目前已知的需要优化的部分 完成情况为:
3.1 请求参数的处理(已完成)
3.2 常量字段处理(已完成)
3.3 请求流程的简化(正在进行...)
3.4 数据请求接口化(正在进行...)
3.5 多线程请求数据功能的实现(需要对接Ai5.0)
三、代理的模块化分析
1. 开发环境配置
1.1 IDE及周边设置
software requirements:
JDK (Oracle Hotspot JDK version >= 1.8.0_45)
Intellij IDEA
Git
Maven (version >= 3.2.0)
lombok (version >= 0.11.8)
1.2 代码风格
MetaMx Java Code.xml (在idea中设置代码风格)
2. 项目和代码说明
2.1 项目结构
|----pivot-ai (ai代理模块)
|----pivot-bi (bi代理模块)
|----pivot-dm (data manager, 模型管理模块)
|----pivot-util (data util, 工具类集合)
|----pivot-install (安装包项目)
```
类似proxy-ai和proxy-bi模块可根据需求添加或删除
技术栈
目前我们使用 SpringBoot + MyBatis + MySQL
2.2 代码提交规范与jira使用
1. 请确保对源代码的每一行修改(包括配置)都有对应的jira issue;
2. 提交修改时comment内容如下格式: `git commit -m "JIRA-NUM: your commit comment goes here"`;其中`JIRA-NUM`为对应的jira号;
3. commit提交到远程代码仓库后,即时更新jira issue,添加注释;注释内容为:
* **每一个**commit的gitlab链接地址,如` http://git.oneapm.me/tps/tps/commit/8be09dd228eccab1d81fa0baaae5c438928670a0`;
* 如果建立了远程分支,请写明分支名称;
* 请在注释中写明修改的内容;如有必要,尽量阐明bug原因或者新功能的内容或者修改对系统的重大影响等;
4. 功能开发完成,或者bug修改结束,需要通知测试同事测试;
5. 测试通过,在gitlab页面,创建pull request,并提交给相关同事审核,审核通过后由审核同事负责merge;
6. 开发过程中请更新对应的jira状态;
7. bug修改的分支名,以`fix/`作为前缀;新功能分支名以`feature/`作为前缀;定制分支名以`release/`作为前缀;
打包命令:
mvn clean package
执行打包命令后,会在proxy-install/target路径下生成.tar.gz和.zip两个安装包
3. 运行项目
1. 解压medivh-proxy.tar.gz或medivh-proxy.zip包
2. 执行根路径下的startup.sh脚本启动项目
3. 向 http://localhost:7080/test和http://localhost:7090/test两个链接发送get请求可查看返回值
4. 执行根路径下的shutdown.sh脚本终止项目