优维低代码:Placeholders 占位符

优维低代码:Placeholders 占位符

优维低代码:Placeholders 占位符

导语

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。


连载第十九期

《高级指引:Placeholders 占位符》

在 transform 及参数注入中我们都引入了 placeholder 占位符语法,它提供了在静态 storyboard 中访问及处理动态数据的能力。

# 示例

例如以下 transform 配置片段(yaml):

transform:
url: '?query=@{ some.field[0].path = ["complex","value"] | map : instanceId | slice : 0 : 10 }'

字段 url 中被 @{ ... } (在参数注入中为 ${ ... })包裹的部分就是占位符,它们将在运行时根据上下文信息计算得到。

以上 url 可以被分解为以下结构:

- RawString: "?query="
- Placeholder:
field: "some.field[0].path"
default:
value: ["complex", "value"]
pipes:
- identifier: map
parameters:
- "instanceId"
- identifier: slice
parameters:
- 0
- 10

在运行时,Placeholder 将根据上下文按以下流程计算得到结果:

  1. 使用 _.get(context, field) 得到 result
  2. 如果 result  undefined,那么将 default.value 赋值给 result
  3. 遍历 pipes,通过 identifier找到对应的管道函数 pipe,将 result 作为第一个参数,parameters作为额外参数列表,调用 pipe 并将返回值赋值给 result
  4. 返回 result

请参考 Pipes 管道。

而最终 url 得到的值为所有 RawString  Placeholder 计算得到的值通过 Array#join 拼接后的结果。

注意Array#join 如果遇到 undefinednull 或空数组 [] 的元素,将被转换为空字符串。

注意:当某个字段仅由单个 Placeholder 组成时,将返回它原始计算得到的值,而不是 Array#join 的结果。

# 细节

 default 默认值及 pipe parameters 管道参数语法中,可以使用 JSON value 的格式传递各种形式的值。同时为了能简化普通字符串的编写,如果要设置的值不会和 JSON value 格式冲突、且不包含特殊控制字符(|:})和空白符的字符串时,可以直接填写字面量的字符串,例如 ${QUERY.objectId=HOST}。系统在以下情况中将认为该值为 JSON value 并进行相应解析(即使解析失败):

  • 系统认为可能是数组、对象、数字类型的,即以 [ 或数字开头的、或以 - 开头并跟着至少一个数字的;
  • 完全等于 null false true 的。

其它情况将按 literal-string 字面量字符串解析。

注意,literal-string 仅能使用英文字母、数字、_和 non-ascii 字符(即可以使用包括中文在内的其它字符)。field 除了上述字符外,还可以使用 .*[]

# 图解

优维低代码:Placeholders 占位符

优维低代码:Placeholders 占位符

发表评论

相关文章