结论先说:当工具支持的对象格式发生变化,输入规范应优先改“边界与校验”,而不是先改“字段数量”。也就是先明确哪些输入形态仍然被接受、哪些会被拒绝、拒绝后如何修正,再决定要不要增删字段。这样做的代价是前期改动较慢,但能避免旧数据批量失效;反过来说,如果新旧格式只是命名不同、语义完全一致,且你能一次性完成迁移,那么直接按新格式重写输入规范反而更省事。下面给出判断条件和具体动作。
格式变化通常分三种,处理方式不同:
判断依据不是看文档描述,而是拿一批真实输入分别跑新旧规则,记录哪些被接受、哪些被拒绝、拒绝原因是否集中在同一类。如果拒绝原因分散且互不相关,多半是结构变化;如果拒绝原因集中在取值上,多半是取值变化。
做法一:保留旧输入规范,新增一层转换。成立条件是旧数据量大、下游依赖多、且新旧格式能一一对应。代价是每次输入都要经过转换,转换规则一旦有歧义,错误会延迟暴露。
做法二:直接切换到新输入规范。成立条件是旧数据可一次性迁移、下游可同步更新、且新旧格式不存在无法对应的字段。代价是切换窗口内旧输入会全部失败,必须提前通知所有输入来源。
选择时可以问三个问题:旧输入还在不在持续产生?新旧格式能否无损对应?下游能否在同一时间点更新?三个都是“是”,倾向做法二;有一个是“否”,倾向做法一。
假设某站长工具网类工具的输入对象从单层键值对变成带嵌套的分组结构,你判断新旧可以一一对应,于是选择保留旧规范加转换层。但如果新格式允许同一字段在分组内重复出现,而旧格式只允许出现一次,那么“一一对应”就不成立:转换层只能保留其中一个值,另一个值被静默丢弃。这时做法一的代价从“改动慢”变成“数据丢失且难以发现”。
这个反例说明:只要新格式引入了旧格式无法表达的关系,无论旧数据量多大,都应按做法二重写输入规范,并在切换前做一次全量比对,确认没有信息在转换中被丢弃。
第一步,把新格式的接受条件写成可执行的校验项,包括必填项、可选项、取值范围和重复规则。第二步,用一批旧输入跑新校验,统计被拒绝的条目,并按拒绝原因归类。第三步,根据归类结果决定是调整校验规则,还是调整输入来源。
这个动作的结果会直接影响下一步:如果被拒绝条目集中在少数几类,说明只需补充转换或放宽边界;如果被拒绝条目分散且数量大,说明输入来源本身需要重新整理,此时继续调校验规则只会掩盖问题。校验规则确定后,再更新输入说明文档,并标注哪些旧写法已不再被接受,避免输入方按旧习惯提交。
不同工具对对象格式的支持范围、校验强度和错误提示方式并不相同,具体到某个工具当前接受哪些格式、是否保留旧格式兼容,需要以该工具的实际说明和实测结果为准,不要仅凭旧教程或第三方描述推断。在格式变化期间,建议保留一份输入样本和对应的校验结果,作为后续判断兼容性的依据。
如果格式变化同时涉及多个输入来源,先统一校验规则再分别调整来源,比逐个来源单独适配更不容易出现规则冲突。