先给结论:不要立刻改正式输入规范,而是先用一批新旧格式并存的对象跑一次旁路验证。只有当新格式在字段完整性、去重逻辑和下游动作三处都不产生歧义时,才把规范改成以新格式为主、旧格式兼容;否则应保留旧格式为默认,把新格式放到独立入口单独处理。下面按两种条件说明选择依据、具体动作和例外。
对象格式变化通常分两类,处理代价差别很大。字段增减指原有字段还在,只是多了可选字段或少了非必需字段;结构重排指层级、数组嵌套、主键位置或编码方式发生改变。前者一般只需在输入规范里追加映射说明,后者往往要改动解析和去重规则。
判断依据可以看三件事:新对象是否还能用旧规则解析出至少一个稳定标识;同一批数据里新旧格式混入时,去重结果是否一致;下游动作(如打标签、触发分支、写入目标列表)是否依赖被改动的那部分结构。三项都通过,按字段增减处理;任一项失败,按结构重排处理。
如果新旧对象能同时进入同一流程,优先做适配层:在输入入口后加一步格式识别,把新格式转换成与旧规范等价的中间结构,再交给原有逻辑。这样做的代价是多一次转换,可能丢失新格式独有的字段,但换来的是不必同时维护两套下游规则。
具体动作:先取一小批新格式对象,只走转换步骤,检查转换后的中间结构是否与旧格式逐字段对齐;再把这批对象与旧格式对象混合,观察去重和分支触发是否与纯旧格式结果一致。如果一致,把适配层设为默认入口,旧规范不动;如果不一致,说明差异已经影响业务语义,转入条件二。
假设某流程原本以手机号作为合并主键,新格式把手机号放进了嵌套的联系方式数组。适配层可以把数组里的第一个手机号提升为顶层字段。但如果同一对象存在多个手机号,提升哪一个就会改变合并结果——这类情况不适合用适配层掩盖,应当显式改成多主键或改用稳定 ID。以上为假设示例,用于说明判断方法,不代表任何具体工具的实际行为。
当新格式是长期方向,继续靠适配层会让转换规则越堆越厚。此时应改输入规范,但不要一次性替换。
每完成一步,用同一批对象分别按旧规范和新规范跑一遍,比较输出差异。差异集中在展示字段,通常可以接受;差异出现在去重数量或分支走向,必须停下来定位,而不是直接上线。
有一类情况两种做法都不适用:新格式在语法上完全合法,但字段含义变了。例如原来表示“最近一次下单时间”的字段,新格式里改成“最近一次互动时间”。解析不会报错,去重也不会失败,可自动化分支会因此触发错误的人群。
识别这类问题不能只看解析是否成功,要看同一对象在新旧格式下是否会被分到同一分支。如果分不到,就不是格式适配问题,而是字段语义变更,需要在规范里单独声明,并决定是保留旧语义字段、新增语义字段,还是废弃该字段。这个决定会影响后续所有依赖它的自动化动作,所以应在改规范之前完成。
不要用“解析不再报错”作为完成标准,它只能说明语法通过。更可靠的收尾信号是:新旧格式混合输入时,去重结果与人工抽样判断一致;关键分支的触发人群与预期一致;下游写入没有出现空值激增。如果这些信号里有一项持续异常,先回退到适配层方案,保留旧规范作为默认,再继续排查,而不是反复调整校验规则去压掉报错。具体工具的字段上限、校验能力和入口设置需要以该工具当前文档和实际界面为准。