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

results matching ""

    No results matching ""