数据结构与模板函数
数据结构定义
定义一个作用于流程运行时的数据结构,流程运行时可修改或引用其中的值。其语法如下:
数据名 = 初始值- 数据名:需符合groovy变量命名规范,注意不要与隐示变量名冲突
- 初始值:可以是单项数据、列表、复合数据等类型,但不能是闭包。
- 初始值不能是一个闭包
- 不能引用非全局的隐示变量比如
isLock=input.user.lock将会初始错误,因为定义逻辑会在dsl加载时也会运行。 - 定义的数据无法指定类型,再次强调整个DSL都是弱类型的设计
数据定义示例
groovy
// 单结构数据
isLock=true
// 列表
blacklist = [22, 12, 45, 55 ]
// 复合数据项
user= [
name:"li", age:18,
address:[city:"changsha",detail:"xxx"],
label:["red","blue"]
]数据定义使用建议与规范
- 为避免数据项过多造成混乱,建议定义
[:]Map这种复合数据结构且只对内部属性进行修改。 - 定义的数据结构的作用范围是流程运行时,不能在初始模块
init { }中引用 - 数据定义应位于初始模块
init{ }之后。
模板函数定义
对于DSL中大量使用的重复逻辑可封装在函数中,模板函数的声明与groovy中普通函数声明一至,推荐以下方式使用:
def 函数名(参数){
...
}模板函数对于构建相似任务非常有用,比如dsl中要重复使用某个HTTP任务 可以将该任务封装成一个模板函数。
模板函数示例
// 消息发送模板
def SEDND_MSG(message){
HTTP {
method="POST"
url="https://httpbin.org/post"
heads["Content-Type"]="application/x-www-form-urlencoded" // 请求头
params["content"] = message
}
}
t1 = SEDND_MSG "发送消息1"
// 获取消息任务
getMsg = CODE {
"helo apiFlow"
}
t2 = SEDND_MSG "发送消息2 ${->getMsg.result}"
start {
run t1
run getMsg
run t2
}- 消息发送模板调用了HTTP任务声明方法,返回一个
HTTP任务实例 - 通过模板函数声明任务
t1构建一个发送指定消息的HTTP任务 - 通过模板函数声明任务
t2该任务发送的消息嵌入了getMsg任务的结果,必须通过延迟插值${-> }语法进行嵌入否则在任务声明阶段 是取不到其它任务结果值的。
App 附录
MySql关系数据库 :
org.apiFlow.database.MySqlAppPostgreSql关系数据库
org.apiFlow.database.PostgreSqlApp微信公众号
org.apiFlow.weixin.WechatGzhApp飞书(应用授权)
org.apiFlow.feishu.FeiShuSelfAppHTTP应用 - HTTP请求相关应用