本文讲解docker版jxTMS中如何通过静态web界面来访问,整个系列的文章请查看:docker版jxTMS使用指南
为了降低应用开发成本,jxTMS的核心思路就是:尽可能的由一个开发者以尽可能简单的方式完成所有的开发工作,包括web界面、业务逻辑、数据库操作、流程、业务规则等等,而且开发门槛、学习成本都要尽可能的低。
所以jxTMS标准的web界面是用文本在web文件中进行定义的,然后在加载模块时将文本解析为json描述;当用户请求显示相应界面时,则将该界面的json描述发送到前端的web浏览器中,由javaScript根据json描述动态的生成界面中的各个控件。
这虽然大大降低了开发的工作量、开发门槛以及开发成本【沟通、协作、联合调试、排错】,但动态界面的美学水平显然受到了限制。
因此,jxTMS也针对特殊需求的用户提供了对静态web界面的支持,即将jxTMS当做一个开发成本很低的web服务器后端系统来使用,前端的web界面自行开发。
本文即演示jxTMS中是如何支持静态web界面的。
请按前文所述先做好相关的准备工作,然后再准备一个前端的rest测试工具,笔者用的浏览器是FireFox,rest测试工具用的就是其提供的Resting插件。
Resting设置
设置有二:
1、通信方法为:POST
2、参数要使用json字符串进行传递,Resting中传递json参数的配置是在Body中选Type:raw
增加静态web访问接口
在capa.py文件中增加:
@myModule.api('apiv2')
@myModule.event('cmd', 'ping')
def ping(self, db, ctx):
p = self.getInput('p')
#两个输入,大家一会要回过头来看看这两个输入是从哪来的
jx.log("p:{}",p)
jx.log("ap:{}",self.getInput('ap'))
#有两个输出,大家一会也要回过头来看看这两个输出输出到哪去了
self.setOutput('pong',p)
self.setOutput('execResult',True)
注:注意对齐
然后保存并上传capa.py,并热机刷新。
静态web登录
Resting中设置:
rest访问地址:http://127.0.0.1:10018/ui/login
Body中输入:{"Name":"manager-demoOrg_2255","Passwd":"123456","useCDS":true}
点击【Send】按钮,就可以在响应的Body栏中看到:
其实就是一个json串,我整理一下:
{
"meta":{"rc":200,"msg":"OK","type":"obj"},
"data":{
"Result":true,
"jxSessionID":1719408802136426,
"peopleName":"manager-demoOrg_2255",
"orgFullName":"demoOrg",
"orgAbbr":"demoOrg_2255",
"msg":"ok",
"jT":"info",
"resultCode":200
}
}
我们关心的是其中的jxSessionID。
静态web接口访问
Resting中设置【注意其中的jxSessionID=1719408802136426】:
rest访问地址:http://127.0.0.1:10018/apiv2/ping?jxSessionID=1719408802136426
Body中输入:{"p":"我","ap":123.456}
点击【Send】按钮,我们可以在实时日志中看到:
p:我
ap:123.456
而Resting响应栏中能看到【我已经转成了json】:
{
"meta":{"rc":200,"msg":"OK"},
"data":{"capaid":"ca_1719406706033001","pong":"我","execResult":true}
}
大家回过头看看我们刚才在capa.py增加代码中我所做的注释。
总结
通过上面的演示,大家会发现jxTMS中对静态web的支持是非常简单的:
1、增加接口
只要在通常的事件访问函数定义好之后,增加一个myModule.api修饰即可:
@myModule.api(apiPath)
@myModule.event('cmd', 函数名)
def 这个名字不重要(self, db, ctx):
......
则在重新加载代码时,jxTMS就会自动安装一个uri:/apiPath/函数名。大家对照一下ping的定义和我们访问ping时的url就明白了。
2、登录时在参数中指定
"useCDS":true
jxTMS默认的web界面是自己的动态web界面,后端代码可以对动态创建的web控件赋值、设置属性、下达各种操作指令等等,所以采取的是针对控件的通信格式。
但这种格式在静态web界面中是不需要的,所以【useCDS=true】指示jxTMS要对本次登录session的返回值做转换,即将通常的适用于动态web界面的返回值转换为普通的json字符串。
大家可以去掉useCDS的指示,然后重新登录后再访问一次ping,看看得到的响应是什么样的。
3、在登录后,将响应中的jxSessionID值,拼到接口访问的url中
这就完成了静态web界面的接口设置与访问方法。
注1:有同学要问了:登录用户名密码怎么是明文啊?!这是演示,笔者不想搞的太复杂。jxTMS自己登录用的是RSA加密,代码都在jxCommon.js中,前端的同学可以自己去看一下jxTMS动态界面是如何操作的,原样照搬就好了
注2:docker版属于自用的版本,所以api的使用是开放的,大家可以随意用。但如果是其它版本的jxTMS,随意在服务器上安装REST接口,可能就会违反供应方的安全准则;同时不同组织之间还可能安装同名的接口导致冲突,所以其它版本的jxTMS的api接口能否使用不应报以乐观的态度
注3:接口本质上就是事件响应函数,所以也自然可以通过在op.py文件中定义相应的事件响应函数的入口并指定角色来实现权限控制