规则引擎rule-engine(三)可视化api设计和实现解释
可视化设计
设计服务通过拖拉拽组件,配置构建规则,下图是设计服务的原型示意
左侧:组件类型选择,其中“决策”下有两个扩展子组件“其他”和“分支决策”;“跳过”和“跳出”是条件循环控制的子组件;语句有左右两个表达式项构成,表达式项可以是变量,常量,表达式
右侧,上方:展示可用的变量,上级,包括到最上级的变量,以及全局可用的工具类;本快的变量,
右侧,下方:组件的编辑配置框,每个组件可单独预览,框中的组件链式排序构成完整规则
上图看,组件是链状,但实际分支嵌入到决策组件,因此元模型是树状的结构
设计元素
本节介绍规则组件的可视化配置属性,篇幅较大,分3部分
设计元素1
- 类型
类型有3个配置属性,其中名称必填,全名可选,维度集合类型可选
类型是类型表选择,通常不需要手动配置
- 变量/常量
变量/常量有两个必填属性,名称和类型,语句可选,当声明变量需初始化配置。值属性常量必填,变量可选
变量/常量声明后,进入变量/常量表,用于后续遍历参与的组件配置
方法参数多参数需要配置
- 决策
决策可配置多个分支决策,其他是可选最后一个,分支决策有两个配置条件,
1 条件,返回true/false的语句组件,决定是否执行改决策,其他没有条件配置
2 动作,语句组,若干语句,决策内的逻辑
- 语句
语句可认为是带”;”的表达式,有3个配置
1 操作符 操作符列表中选择
2 左语句项 变量语句项,常量语句项,语句语句项
变量语句项/常量语句项与配置变量/常量一致;语句语句项,自身是语句,递归配置
3 右语句项 同左语句项
设计元素2
参数和语句项 图中所示比较清楚,不再过多解释
- 返回
返回有可选属性语句,设置返回变量,常量或者语句
设计元素3
本节介绍规则组件可视化配置属性,for,while
for/while差不多,上面语句项是断言,循环的条件
可视化api
本节详细说明设计api,后面章节详细说明api
public ResultT<IPage<RuleLogic>> searchRuleLogic(
Integer pageNum, Integer pageSize, String searchWords)
public ResultT<List<RuleComponent>> getRuleLogicComponent(Long ruleLogicId)
public ResultT<String> previewRuleComponent(@RequestBody ComponentBean bean)
public ResultT<String> previewRuleLogic(@RequestBody List<ComponentBean> beans)
public <R> ResultT<R> testRuleLogic(@RequestBody RuleLogic logic,
@RequestParam String factType,
@RequestParam String json) throws Exception
public <R> ResultT<R> testRuleLogic(@RequestBody RuleLogic logic,
@RequestParam String factType1, @RequestParam String json1,
@RequestParam String factType2, @RequestParam String json2) throws Exception
public ResultT<RuleLogic> saveRulesLogicDraft(@RequestBody RuleLogic logic)
public ResultT<ContainedRule<?, ?>>
releaseRuleLogic(Long ruleLogicId) throws RuleLowCodeException
public ResultT<Void> resetRuleLogic(Long ruleLogicId) throws RuleLowCodeException
接口说明
本节以postman脚本说明接口使用,下图是规则组件元模型的json
搜索规则逻辑
方法:POST
URL: /ruledesign/searchRuleLogic
参数:
返回:
获取规则逻辑组件
方法:GET
参数:
返回:
上图规则逻辑的组件,content是组件bean的返回,元模型json格式
预览规则组件1-声明组件
本节示例预览声明变量规则组件
方法:POST
参数:
返回示例:
返回生产的代码,上图是带赋值表达的声明
预览规则组件2-ifelse
本机示例组合ifelse规则组件
方法:POST
参数:
上图一组if-elseif*-else组件,COMPOSITED组合组件类型包装
返回:
预览规则组件-for/continue
示例预览for规则组件
方法:POST
URL: ruledesign/previewRuleLogic
参数:
for类型组件,集合遍历,并带有内嵌语句
返回:
上图for规则脚本,fact.x 传入的事实,x是其list类型的属性
预览规则组件-while/break
示例预览while规则组件
方法:POST
URL: ruledesign/previewRuleLogic
参数:
while组件根据条件的循环,并带有内嵌语句
返回:
上图while规则脚本
预览规则逻辑
本接口预览完整的规则逻辑,是规则组件列表集合(list)
方法:POST
URL: ruledesign/previewRuleLogic
参数:
参数规则逻辑,代表完整功能的规则,包括一个声明组件,一组ifelse组件
返回:
上图完整规则预览返回,包括声明组件和一组ifelse组件
测试规则逻辑1fact
本机介绍在线测试规则逻辑,单个事实
方法:POST
URL: ruledesign/testRuleLogic1?factType=com.grp.base.ruleengine.fact.TestFact&json={"x": 51, "y": 55}
参数:
参数分两部分,上面url带了事实参数,分别是事实类型,事实示例json
另一部分是在线规则组件,上一篇的预览规则逻辑
返回:
测试规则逻辑2fact
本节展示两个事实的规则逻辑测试
方法:POST
URL: http://localhost:8080/ruledesign/testRuleLogic2?
factType1=com.grp.base.ruleengine.fact.TestFact1
&json1={"x": "rule"}&factType2=com.grp.base.ruleengine.fact.TestFact2&json2={"y": "engine"}
定义两个fact,分别带有x,y字符串属性
对应的脚本 "return su.reverse(fact1.x + fact2.y);",使用了su字符串工具类的方法
返回:
x+y的反转
保存规则逻辑
方法:POST
URL: ruledesign/saveRulesLogicDraft
参数:
参数是完整的规则逻辑,其中,rcs规则逻辑的组件,pck/name 规则逻辑的包和名称
返回:
返回,code/msg返回信息,还有规则逻辑,此时带有id,实现是保存到数据库
发布规则逻辑
发布规则,规则逻辑设置为RELEASED,生成规则
方法: POST
URL: ruledesign/releaseRuleLogic?ruleLogicId=
参数:ruleLogicId 规则逻辑Id
返回:
返回创建的规则,规则脚本逻辑元模型生成
重置规则逻辑
规则发布后,可以重置为DRAFT状态,二次修改后再发布
总述
所有设计服务api测试示例