WEB脚本服务
在UBSI的应用开发模式中,业务逻辑的实现、业务数据的操作都应该被封装在各个微服务中,对于WebApp的后端服务来说,往往提供的rest-api都是对各个微服务接口的转发调用,在这种情况下,为了简化Web服务端的开发和部署,可以考虑使用UBSI的Web脚本服务。
Web脚本服务是一个独立的Web应用(WebApp,不包含前端界面),提供了一组特定的rest-api:
- /script - 执行特定脚本
- /file - 文件服务,上传/下载等
- /forward - REST请求转发
利用脚本服务接口,使得rest-api的开发不再需要用Java进行硬编码,而是可以采用在线编码的JavaScript来实现。这样,不但API的开发/维护效率得到有效提升,也无需在迭代时不断对新版本进行重新部署。
另外,脚本服务的接口都支持基于前端用户角色的访问鉴权,具体过程如下:
脚本服务得到执行某个特定脚本的请求时,通过http-request-header的"token"获得访问令牌
通过执行"script.token"脚本解析token令牌,得到请求的用户信息:
{ "user": "用户id", "roles": [ "用户角色1", "用户角色2" ], "domain": "数据域" }
解析结果会临时缓存在脚本服务的运行实例中,以提高执行效率
根据用户角色检查待执行脚本的权限设置,检查通过后脚本才能执行
JavaScript脚本代码的开发以及权限管理可以在UBSI治理工具中进行,详见:Web服务脚本;UBSI为JS脚本提供了一组预置的API,可以:
- 在Java和JS之间进行数据类型转换
- 访问UBSI微服务
- 发送广播消息或事件
- 输出日志
同时,脚本代码还可以直接使用UBSI核心包所包含的所有Java类,更多信息请见:脚本API
UBSI治理工具本身就是使用了脚本服务作为Web服务端,通过数百个脚本为前端提供了所有互操作的rest-api。虽然脚本为开发工作带来了便利,但是由于脚本都是解释执行的,会导致较大的性能损失,对于要求高性能、高并发的场景并不适合。
脚本服务的获取及运行
可以在 https://ubsi-home.github.io/download 下载Web脚本服务rewin.rest.ubsi.script的最新版本。
启动配置
脚本服务的配置文件为application.properties,默认内容如下:
### 初始的URL路径(SpringBoot2) server.servlet.context-path=/rest spring.mvc.view.prefix=/ spring.mvc.view.suffix=.html ### Web Server监听端口 server.port=8080 ### token缓冲数据的过期时间(分钟数) rus.token.timeout=10 ### 上传文件的尺寸限制 spring.servlet.multipart.max-file-size=256MB spring.servlet.multipart.max-request-size=256MB
UBSI Consumer配置
脚本服务运行时需要正确配置 rewin.ubsi.consumer.json,样例如下:
{ "io_threads": 0, "timeout_connect": 5, "timeout_request": 10, "timeout_reconnect": 600, "redis_host": "{redis-server-host}", "redis_port": 6379, "redis_conn_idle": 4, "redis_conn_max": 16 }
REST治理接口配置
脚本服务运行时需要正确配置 rewin.ubsi.rest.json,以纳入UBSI治理工具进行统一管理,样例如下:
{ "url": "http://{webapp-host}:8080/rest", "gateway": false }
服务启动
java -jar rewin.rest.ubsi.script-1.0.5.jar
查看API文档
http://{webapp-host}:8080/rest/swagger-ui.html