服務端的代碼實現和設計思路(服務端的代碼實現和設計思路是什么)
一、分享的目的
- 在理解了服務端低代碼平臺設計實現的基礎上,能夠讓大家更好地使用低代碼平臺擴展出更多的能力,豐富工具的打造,知道什么時候可以使用,如何使用。
- kuta將來可能會走向內部開源,可以幫助kuta后來開發(fā)者對前面搭建的kuta架構有個高度概括的認識,在目前kuta中間層的基礎上,擴展出更多的低代碼能力,豐富目前kuta低代碼平臺所支持的功能。
二、低代碼理念
2.1低代碼概念的定義
- 能夠以最少的手寫代碼和設置快速開發(fā)應用、配置和部署業(yè)務應用程序。
2.2 低代碼平臺的歷史
- 低代碼概念于 2014 年由 Forrester 首次正式提出,低代碼產品由此開始了蓬勃發(fā)展。2015 微軟正式發(fā)布低代碼產品 Power Apps,2017 年分析機構 Gartner 創(chuàng)建了 aPaaS 的低代碼新門類,2018 年 Outsystems 和Mendix 低代碼平臺等被爭相收購, Google 發(fā)布自己的低代碼產品 AppMaker。而在國內的低代碼領域,阿里在2021 年 1 月釘釘宜搭低代碼平臺正式對外發(fā)布,低代碼概念也就在國內火熱起來,越來越多的低代碼產品紛紛問世。
2.3酷家樂低代碼平臺
- 酷家樂從2021年下半年開始搭建酷卡kuta低代碼平臺,我們把低代碼概念應用在對測試工具的打造上,走了一條符合我們業(yè)務特性的道路。借助kuta低代碼開發(fā)平臺,技術支持可以自己或者在測試的指導下開發(fā)出更符合特定業(yè)務需求的工具。
三、KUTA低代碼平臺簡介
3.1現狀
- 以打造一款工具為例,目前已實現通過工具配置的方式打造工具的前端邏輯,以及通過API配置的方式實現后端接口調用的低代碼邏輯。
3.2劣勢
- 但代表后端代碼邏輯的API配置只能實現單接口的調用,不能滿足工具個性化打造的需求。我們常常遇到需要調用多個接口,并將接口返回數據進行一定邏輯處理后再返回給前端,此時,單個接口的API配置就無法滿足業(yè)務需求。
3.3 解決方案
- 因此,我們引入通過在前端編寫少量Groovy代碼來實現服務端低代碼的配置,自動生成API,該類型API具有跟API配置中的api同樣的地位,稱之為Groovy API,我們通過在前端配置中關聯(lián)該Groovy API,即可打通工具的前后端配置。
四、為什么要做服務端低代碼
4.1傳統(tǒng)的純代碼開發(fā)模式與低代碼開發(fā)
4.2 低代碼開發(fā)優(yōu)勢
- 通用性:通過前端后端低代碼配置,降低工具開發(fā)的成本和技術門檻,非開發(fā)人員可以參與,減少聯(lián)調、部署時間。
- 低成本:減少人力成本、溝通成本和時間成本, 既能夠將工具開發(fā)的門檻降低,同時也能通過低代碼實現更多的擴展能力。
- 連通性:kuta在moon上部署,通過kuta的請求轉發(fā),可以打通各方存量系統(tǒng),如各測試小組測試平臺、酷家樂工具、商家后臺、七彩石、pub、moon等公司內外部平臺。
- 高效率:提升工具開發(fā)效率,快速打造一款工具的前后端,無需前后端聯(lián)調和部署,快速實現工具的個性化打造。
- 敏捷性:設計靈活,業(yè)務與工具打造協(xié)同,可以在迭代內進行工具的敏捷開發(fā)。
- 穩(wěn)定性:代碼結構化程度高,更容易維護。無需關心服務器、網絡、數據庫等技術概念和底層運維,kuta作為統(tǒng)一的解決方案,低代碼開發(fā)者只需要專注于業(yè)務本身。
五、服務端低代碼選型
5.1 為什么選擇groovy作為后端低代碼的實現方式?
兼具融合性和語言優(yōu)勢:
5.1.1 容易和java環(huán)境集成
- Groovy支持 Java 虛擬機,在設計之初充分考慮了和Java集成,這使 Groovy 與 Java 代碼的互操作很容易,非常容易集成在Java環(huán)境中, 而且可以無縫集成所有已經存在的 Java對象和類庫。
5.1.2 語言容易上手
- Groovy與Java的語法很相似,可以將Groovy想象成 Java 語言的一種更加簡單、表達能力更強的變體。從學習的角度看,如果知道如何編寫 Java 代碼,那就已經了解 Groovy 了。它們的主要區(qū)別是:完成同樣的任務所需的時間 Groovy 代碼比 Java 代碼更少。在 Groovy 中 , 可以完全使用 Java語法進行開發(fā) ;
5.1.3 語言特性優(yōu)勢
- Groovy在支持常規(guī)的Java操作或者說是語法的同時,結合了Python、Ruby和Smalltalk的許多特性。Groovy更像是Java的一個框架,類似SpringBoot這樣的框架,封裝了提升編程效率的語法。缺點也是因為它的語言兼容特性帶來的。groovy對一些操作進行封裝縮減,降低編寫工作量,方便靈活編程。特性越多,越靈活的語言,性能越低。例如:Groovy 語言是動態(tài)語言.與之相對的 , Java 是一門靜態(tài)語言 ; 具體就是在聲明變量前 , Java 語言必須聲明該變量的類型 , groovy聲明變量時 , 可以暫時不指定變量類型;
5.2 前端編輯器選型
前端嵌入在線代碼編輯器AceEditor,優(yōu)化前端在線coding體驗。
前端編輯器選型: 普通文本輸入框——>CodeMirror2——>AceEditor
六、服務端低代碼實現原理
Groovy 集成在Java環(huán)境中:
- 我們所使用的集成機制是: GroovyShell
- groovy.lang.GroovyShell作用:
- 執(zhí)行 Groovy 代碼 ;
- 有更豐富的功能,比如 綁定更多的變量 ,從文件系統(tǒng)、網絡加載代碼等。
- GroovyShell允許在Java類中(甚至Groovy類)求任意Groovy表達式的值。通過使用Binding對象輸入參數給表達式,并最終通過GroovyShell返回Groovy表達式的計算結果.
- Binding類主要用于傳遞參數集, 而GroovyShell則主要用于編譯執(zhí)行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界面
上述版本僅簡單實現了服務端在線動態(tài)執(zhí)行前端輸入的代碼,和服務端低代碼還相差甚遠。
7.2 與kuta融合的版本
UI界面:
7.3 融合方式
通過在Groovy配置界面進行Groovy api的配置,在線調試groovy腳本,提交后,服務端會對Groovy code和groovy params做存儲,自動生成Groovy Api展示在groovy列表中。
Groovy Api可以在工具配置時被工具關聯(lián),當工具調用時,會調用存儲的groovy code和params,實現工具的服務端低代碼調用。
7.4 豐富的功能
- 在線編輯groovy腳本自動生成api,通過數據庫保存groovy內容,在kuta前端通過配置工具可以調用groovy api,動態(tài)獲取接口groovy api入參,動態(tài)執(zhí)行groovy腳本,實現較為復雜工具的低代碼打造。(優(yōu)點:免除了用戶在打造工具時的一系列繁瑣行為,如安裝代碼編輯器/環(huán)境,調試時的環(huán)境啟動,git操作,代碼倉管理,聯(lián)調,部署等,這些行為都可以被免去。同時還能使用更加簡潔高效的語言。)
- 前端的嵌入代碼編輯器,支持代碼提示和代碼補全,近似于idea的編碼體驗。
- 支持在線調試groovy代碼, 代碼調試支持返回數據的展示, 方便用戶根據數據返回調整代碼;支持在線調試的代碼錯誤的異常提示,增加返回錯誤堆棧。
- 實現了后端groovy常用方法封裝, 封裝簡化http get和post請求,支持使用低代碼調用已在kuta上配置的tool等,調用語句通常只有一行代碼. 讓用戶使用更簡單的語句實現工具的功能。
- groovy后端支持默認導出包列表,已支持大部分常用包的導出,用戶大多數情況下無需自己import包.(groovy默認導入常用的包)。
- 支持代碼模板一鍵復制,快速生成代碼,提升編碼效率,目前已提供了一些常用的代碼模板,方便用戶選擇和使用。