简化 schema 时保留完整业务校验
Retain full validation beside a compatible schema
宿主只接受部分 schema 特性时,仍要在其他位置执行完整校验。
以下示例与示意结果由本站编写,用于说明方法,不是模型实测结果。
使用场景
结构化输出宿主接受数字类型但不执行本题价格非负约束。教学完整契约price>=0、qty为正整数;传输投影只支持类型。strict标签不意味着被删掉的业务约束已经验证。
具体做法
保存权威完整契约与验证器,按已核实支持子集派生传输schema,并逐项记录省略约束。收到数据先核对完整验证、拒绝/截断和解析状态,全部满足才供下游使用。约束说明文本不能替代实际执行,客户端校验也不能由宿主宣传标签代替。
反例
为适配宿主删除minimum后直接接受price=-5,因strict模式声称报价规则已完整满足。
改进写法
教学传输使用支持类型,但保留完整price>=0和qty正整数验证。记录投影漏掉的minimum/其他条件,收到结果先用原验证器核对,负价格或非正整数qty拒绝,解析/截断/拒绝分别处理。创建报价前这些实际门槛必须满足,不把schema生成成功当业务验证完成。
为什么这样改
兼容投影解决传输接受什么,完整验证解决业务允许什么。两层分开使适配不会悄悄削弱下游政策,也让遗漏条件有明确执行位置。
如何验证
教学price=-5/qty=2可能符合传输数字类型但应被完整契约拒绝;price=0/qty=1满足本题数值规则。检查每项省略条件有验证位置,缺字段或不完整数据不进入下游。
通过仍只说明契约,不证明价格来源真实。本篇不创建报价。
适用边界
实际schema子集与SDK校验随版本变化,冻结清单不代表今天支持;原验证器也需测试。验证不提供业务授权、数据真实性或生产保证。