jxTMS使用示例--和其它系统勾连

110 篇文章 0 订阅
44 篇文章 0 订阅

使用本示例需通过docker容器,请先下拉jxTMS的docker镜像并按说明启动tms容器,并从helloWorld开始尝试。

和其它系统勾连

我们在之前的静态界面的演示中,已经演示了jxTMS如果供静态web访问,按同样的方法,也可以提供REST接口向其它系统提供服务。

但服务器的访问和web访问是有区别的,就在于web我们通过session将客户请求组织到一个会话中。而服务器却不能有session的超时重连,因为这会导致服务器的连接管理逻辑复杂化,容易引入bug而对服务器的安全构成威胁。

针对此问题,jxTMS提供了两种外部服务器请求方案,一种是rest方式,但每次请求都要以加密认证的方式进行身份认证;一种是webSocket方式,只需在请求连接时进行身份认证,每次请求就不需要加密认证了。

注:笔者在刚开始开发jxTMS时,使用自己签发的RSA证书也是可以实现https通信的,但后来各浏览器强制要求必须使用根信任签发的RSA证书,同时考虑到签发RSA证书会增加开发者的成本,所以jxTMS就取消了对https的支持。这样,jxTMS也就不支持wss了。考虑到jxTMS的设计目标主要是提供内部的业务系统开发,而且动态web界面具有相当的复杂性,所以一定时期内,暂不会考虑增加对https的支持

由于相关工作都较为复杂,而本演示主要针对初学者,所以本节只简单概述如何以Rest方式进行勾连,webSocket方式暂不介绍。

增加apiKey

点击快捷栏中的【人员管理->新增apiKey】,jxTMS显示:

新增apiKey

大家在apiKey后填入要分配给想接入到本系统中的系统服务器的名字,如【erp-server】,然后点击【增加】按钮,这时在secureKey后就会出现一个字符串,这就是用户登入时需出示的secureKey。

然后把apiKey【相当于web登录时的用户名】和secureKey【相当于web登录时的密码】提供给对方,然后向笔者索取restAPIClient.jar一起提供给对方。然后对方只需要引用restAPIClient.jar并按下例访问即可:

//参数分别是:本机jxTMS的url,apiKey,secureKey
restAPIClient client = new restAPIClient("http://127.0.0.1:10018","erp-server","bbLHZzKREWaEdQcjshQao6ASDNNpgGAe");

//每次请求都需首先newRequest来初始化请求
cn.ijingxi.tms.jxJson rs = client.newRequest()
	//设置参数p
	.setParam("p", 123.456)
	//设置参数ap
	.setParam("ap", "sssttt")
	//向指定的uri发出请求
	.request("/apiv2/ping");
//返回一个json
jxLog.logger.debug("result:{}",rs);

返回是ping函数中用setOutput设置的输出:

{"tc":3,"pong":123.456,"execResult":true}

大家会发现多了个tc,tc是本次请求的耗时,以毫秒为单位。

注:登录名不用给出,系统会自动给出并避免重复

接口描述

jxTMS设计的目标就是尽可能的一个人完成所有的开发工作,这样就不要写太多的文档,只要记得多加点注释就好了。但现在是两个系统的勾连,自然得向对方提供文档,而且每次对接口的修改都必须及时更新文档并提供给对方。

哦,这太麻烦了!

所以呢,jxTMS提供了一个自动编写接口文档的功能,就相当于多加点了注释。

大家看一下manager/op中的capa.py,找到ping函数的定义,会发现ping函数除了之前介绍过的myModule.event修饰和myModule.api之外,还多了好几个修饰:

@myModule.OutDescr('execResult','bool','true:执行正确'.decode('utf-8'))
@myModule.OutDescr('pong','string、int等基础类型都可以'.decode('utf-8'),'送入的参数'.decode('utf-8'))
@myModule.InDescr('p','string、int等基础类型都可以'.decode('utf-8'),'送入的任意参数'.decode('utf-8'))
@myModule.MotionDescr('系统是否存活'.decode('utf-8'))
@myModule.api('apiv2')
@myModule.event('cmd', 'ping')
def ping(self, db, ctx):
	#ping函数的处理代码

注:建议大家一定养成多加注释的习惯

很直观的意思,就不多介绍了。大家再点击快捷栏【运维管理->生成接口描述】,一路点击【确认】按钮执行完毕。这时大家会发现tms容器的/home/tms目录下多了一个interface目录,大家一路点击进行,会发现在interface目录的manager/op目录中多了一个interface.md文件,这是一个markdown格式的文件,大家用相应的阅读软件打开,看看是什么样的?

是不是在这个文件中会找到ping函数的说明:

接口说明

注:大家自己生成的会有乱码,想一下是什么原因?【之前介绍过的:中文应该进行解码,这里是笔者也忘了:( 刚才写到这里去截图的时候才发现,大家自己尝试着修复一下呗!】

大家对照这个文件的显示,然后再对应ping前的那一堆各种修饰就会理解该如何描述并自动生成接口文件了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值