推广上线
把实例切换到 enforce,以及已知限制
推广上线
enforce 是默认值。如果实例上有通过 REST 运行表单的脚本或其他系统, 请分步骤切换,在拒绝任何运行之前先观察日志:
- 为整个实例设置
LAUNCH_VALIDATION=log(如果是升级,在升级之前设置)。 - 在此模式下运行一段时间并审查日志:
would refuse警告表示违反规则的 运行;extravars differ警告表示某些表单在服务器上的计算结果 不同(时间戳、外部数据)。针对每个表单判断这是否 重要。 - 把这些表单切换为
launchValidation: enforce。发送无效值或 编造 extravars 的调用方现在会收到422以及原因。 - 当每个表单都按预期工作后,为整个实例移除
LAUNCH_VALIDATION(或将其设为enforce)。
限制
运行验证目前还不能覆盖所有情况:
- 向导表单不能带修改重新运行,并且在 7.0 之前运行的向导作业 不能在
enforce下重新运行(它没有保存各步骤的值)。MCP 服务器 不能运行向导表单。 - 浏览器中的占位符解析仍然使用其自己的一份服务器代码副本;在 极少数边缘情况下(
__undefined__、表达式中的引号),两者对某个 占位符的解析结果可能不同。log能揭示这类差异。 runLocal表达式在浏览器中运行于浏览器的 JavaScript 引擎,在服务器上则运行于 沙箱;同样的代码产生同样的结果,除非它依赖于 浏览器的时区或语言区域。
向导表单
向导会逐个步骤检查:浏览器发送 每个步骤的值,服务器则用每个步骤自己的子表单检查用户将要提交的每个步骤。
- 如果某个步骤是
optional且用户跳过了它,或者其when为 false,则该步骤不计入。 - 步骤通过
$(__parent__.<step>.<field>)读取前面的步骤,使用的是经过检查的值。 - 错误会以
<step>.<field>的形式指出步骤和字段。 - 在
enforce下,extravars 在服务器上构建,每个步骤位于其defaultModel之下。 - 向导中不支持文件字段。