服务端低代码实现和设计思路

一、分享的目的

  • 在理解了服务端低代码平台设计实现的基础上,能够让大家更好的使用低代码平台扩展出更多的能力,丰富工具的打造,知道什么时候可以使用,如何使用。
  • kuta将来可能会走向内部开源,可以帮助kuta后来开发者对前面搭建的kuta架构有个高度概括的认识,在目前kuta中间层的基础上,扩展出更多的低代码能力,丰富目前kuta低代码平台所支持的功能。

二、低代码理念

2.1低代码概念的定义

  • 能够以最少的手写代码和设置快速开发应用、配置和部署业务应用程序。

2.2 低代码平台的历史

  • 低代码概念于 2014 年由 Forrester 首次正式提出,低代码产品由此开始了蓬勃发展。2015 年微软正式发布低代码产品 Power Apps,2017 年分析机构 Gartner 创建了 aPaaS 的低代码新门类,2018 年  Outsystems 和Mendix 低代码平台等被争相收购, Google 发布自己的低代码产品 AppMaker。而在国内的低代码领域,阿里在2021 年 1 月钉钉宜搭低代码平台正式对外发布,低代码概念也就在国内火热起来,越来越多的低代码产品纷纷问世。

2.3酷家乐低代码平台

  • 酷家乐从2021年下半年开始搭建酷塔kuta低代码平台,我们把低代码概念应用在对测试工具的打造上,走了一条符合我们业务特性的道路。借助kuta低代码开发平台,技术支持可以自己或者在测试的指导下开发出更符合特定业务需求的工具。

三、KUTA低代码平台简介

3.1现状

  • 以打造一款工具为例,目前已实现通过工具配置的方式打造工具的前端逻辑,以及通过API配置的方式实现后端接口调用的低代码逻辑。

3.2劣势

  • 但代表后端代码逻辑的API配置只能实现单接口的调用,不能满足工具个性化打造的需求。我们常常遇到需要调用多个接口,并将接口返回数据进行一定逻辑处理再返回给前端,此时,单个接口的API配置就无法满足业务需求。

3.3 解决方案

  • 因此,我们引入通过在前端编写少量Groovy代码来实现服务端低代码的配置,自动生成API,该类型API具有跟API配置中的api同样的地位,称之为Groovy API,我们通过在前端配置中关联该Groovy API,即可打通工具的前后端配置。

四、为什么要做服务端低代码

4.1传统的纯代码开发模式与低代码开发

4.2 低代码开发优势

  • 通用性:通过前端后端低代码配置,降低工具开发的成本和技术门槛,非开发人员可以参与,减少联调、部署时间。
  • 低成本:减少人力成本、沟通成本和时间成本, 既能够将工具开发的门槛降低,同时也能通过低代码实现更多的扩展能力。
  • 连通性:kuta在moon上部署,通过kuta的请求转发,可以打通各方存量系统,如各测试小组测试平台、酷家乐工具、商家后台、七彩石、pub、moon等公司内外部平台。
  • 高效率:提升工具开发效率,快速打造一款工具的前后端,无需前后端联调和部署,快速实现工具的个性化打造。
  • 敏捷性:设计灵活,业务与工具打造协同,可以在迭代内进行工具的敏捷开发。
  • 稳定性:代码结构化程度高,更容易维护。无需关心服务器、网络、数据库等技术概念和底层运维,kuta作为统一的解决方案,低代码开发者只需要专注于业务本身。

五、服务端低代码选型

5.1 为什么选择groovy作为后端低代码的实现方式?

兼具融合性和语言优势:

5.1.1 容易和java环境集成

  • Groovy支持 Java 虚拟机,在设计之初充分考虑了和Java集成,这使 Groovy 与 Java 代码的互操作很容易,非常容易集成在Java环境中, 而且可以无缝集成所有已经存在的 Java对象和类库。

5.1.2 语言容易上手

  • Groovy与Java的语法很相似,可以将Groovy想象成 Java 语言的一种更加简单、表达能力更强的变体。从学习的角度看,如果知道如何编写 Java 代码,那就已经了解 Groovy 了。它们的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少。在 Groovy 中 , 可以完全使用 Java语法进行开发 ;

5.1.3 语言特性优势

  • Groovy在支持常规的Java操作或者说是语法的同时,结合了Python、Ruby和Smalltalk的许多特性。Groovy更像是Java的一个框架,类似SpringBoot这样的框架,封装了提升编程效率的语法。缺点也是因为它的语言兼容特性带来的。groovy对一些操作进行封装缩减,降低编写工作量,方便灵活编程。特性越多,越灵活的语言,性能越低。例如:Groovy 语言是动态语言.与之相对的 , Java 是一门静态语言 ; 具体就是在声明变量前 , Java 语言必须声明该变量的类型 , groovy声明变量时 , 可以暂时不指定变量类型;

5.2 前端编辑器选型

前端嵌入在线代码编辑器AceEditor,优化前端在线coding体验。

前端编辑器选型: 普通文本输入框——>CodeMirror2——>AceEditor

六、服务端低代码实现原理

Groovy 集成在Java环境中:

  • 我们所使用的集成机制是: GroovyShell
  • groovy.lang.GroovyShell作用:
  1. 执行 Groovy 代码
  2. 有更丰富的功能,比如绑定更多的变量,从文件系统、网络加载代码等。
  • GroovyShell允许在Java类中(甚至Groovy类)求任意Groovy表达式的值。通过使用Binding对象输入参数给表达式,并最终通过GroovyShell返回Groovy表达式的计算结果.
  • Binding类主要用于传递参数集, 而GroovyShell则主要用于编译执行Groovy代码

private Object byGroovyShell(GroovyDto groovyDto, JSONObject paramObject) {
Binding binding = new Binding(paramObject);
GroovyShell shell = new GroovyShell(binding);
return shell.evaluate(groovyDto.getGroovyCode());
}

七、服务端代码与kuta融合-从怀疑中诞生,在摸索中前进

7.1 从简单的在线运行脚本到与kuta融合

在线运行groovyUI界面

上述版本仅简单实现了服务端在线动态执行前端输入的代码,和服务端低代码还相差甚远。

7.2 与kuta融合的版本

UI界面:

7.3 融合方式

通过在Groovy配置界面进行Groovy api的配置,在线调试groovy脚本,提交后,服务端会对Groovy code和groovy params做存储,自动生成Groovy Api展示在groovy列表中。

Groovy Api可以在工具配置时被工具关联,当工具调用时,会调用存储的groovy code和params,实现工具的服务端低代码调用。

7.4 丰富的功能

  • 在线编辑groovy脚本自动生成api,通过数据库保存groovy内容,在kuta前端通过配置工具可以调用groovy api,动态获取接口groovy api入参,动态执行groovy脚本,实现较为复杂工具的低代码打造。(优点:免除了用户在打造工具时的一系列繁琐行为,如安装代码编辑器/环境,调试时的环境启动,git操作,代码仓管理,联调,部署等,这些行为都可以被免去。同时还能使用更加简洁高效的语言。)
  • 前端的嵌入代码编辑器,支持代码提示和代码补全,近似于idea的编码体验。
  • 支持在线调试groovy代码, 代码调试支持返回数据的展示, 方便用户根据数据返回调整代码;支持在线调试的代码错误的异常提示,增加返回错误堆栈。
  • 实现了后端groovy常用方法封装, 封装简化http get和post请求,支持使用低代码调用已在kuta上配置的tool等,调用语句通常只有一行代码. 让用户使用更简单的语句实现工具的功能。
  • groovy后端支持默认导出包列表,已支持大部分常用包的导出,用户大多数情况下无需自己import包.(groovy默认导入常用的包)。
  • 支持代码模板一键复制,快速生成代码,提升编码效率,目前已提供了一些常用的代码模板,方便用户选择和使用。

八、整体架构图

九、工具调用流程图

推荐阅读