本文讲解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}

docker windows桌面 pull_json

点击【Send】按钮,就可以在响应的Body栏中看到:

docker windows桌面 pull_web界面_02

其实就是一个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文件中定义相应的事件响应函数的入口并指定角色来实现权限控制