• 优维低代码: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 如果遇到 undefined, null 或空数组 [] 的元素,将被转换为空字符串。

    注意:当某个字段仅由单个 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 除了上述字符外,还可以使用 .、*、[、]。

    # 图解

    ws: 和 JSON 定义里的 whitespace 一致,即空字符串或连续的空白字符。

  • 相关阅读:
    多条件变量应用--传送与搬运问题
    编译原理 LR(0)
    迁移学习《Efficient and Robust Pseudo-Labeling for Unsupervised Domain Adaptation》
    自学Python 49 正则表达式(一)基本语法表达
    宝妈刷单被骗125万元,我们该如何避免被骗?
    庖丁解牛:NIO核心概念与机制详解 03 _ 缓冲区分配、包装和分片
    MySQL8.0优化 - 锁 - 从数据操作的类型划分:读锁、写锁
    卷积神经网络 图像处理,卷积神经网络识别图片
    D. Constant Palindrome Sum(差分)
    Java并发常见面试题(一)
  • 原文地址:https://blog.csdn.net/EasyOps_DevOps/article/details/126647146