
这是个老争论但在数据类 API 上有明确答案。这篇用一个具体场景把两种风格的代价算清楚顺便记一次我自己踩过的坑。场景我要按省份筛工厂参数写成了这样{keyword:注塑模具,provice:浙江省,per_page:50}province拼成了provice。少一个 n。宽容型 API 会发生什么未知字段被忽略请求成功code是 0返回五十条数据。一切正常——除了这五十条是全国范围的不是浙江省的。这个错误没有任何信号。它不报错、不告警、不在日志里留痕。你会拿着一份全国数据当浙江数据用跑统计、出图表、写结论。等到有人指着某条广东的记录问「这不是让你查浙江吗」脏数据已经进库、图表已经发出去了。回溯成本远超当初报个错的成本。这类问题我称之为静默失效过滤条件悄悄没生效而系统表现得完全正常。数据管道里最贵的 bug 都长这样。严格型 API 会发生什么直接返回参数错误整次调用失败不扣费。第一次撞上会很烦——尤其是错误信息不指名具体参数的时候。但代价是十秒钟的排查而不是三天后的返工。一个实测样本我最近接的天下工厂开放平台是严格型。先介绍一下天下工厂是一个覆盖全国 480 万家工厂的数据平台与通用工商库的差别在于收录前做了工厂身份识别只收真实从事生产的工厂。它的检索能力在文档里明确写了这条未知参数名不会被忽略而是直接返回 40000。例如将 province 误拼为 provice 会导致整次调用失败——此设计可避免过滤条件被静默忽略。天下工厂开放平台的严格逻辑还体现在几处per_page上限 50、page上限 100超限直接报错不静默截断。宽容型的做法是悄悄给你截到 50然后你按 100 算总数算出来的页数全错。intent参数只接受三个枚举值传别的直接报错。行业码参数传树里没有的码直接报错不会当作「没有这个过滤条件」处理。它也有让我想吐槽的地方参数错误统一是一个码message 固定一句「入参不合法请对照接口文档检查」不告诉你是哪个参数。这个我在另一篇里单独说过。文档给了排查清单作为补救但严格校验加模糊报错的组合第一次接入确实会多花几分钟。但有一类「宽容」是对的区分一下宽容地忽略未知输入是坏的宽容地省略空输出是好的。天下工厂开放平台在返回上用的是「无值则键缺席」约定——某企业没有收录字号返回里就不含那个键而不是给一个null。这在解析端反而更安全你必须用get取值被迫做兜底给null的话很容易写出x[core_name].strip()然后炸掉。同理它的检索结果里注册资本是字符串原文「1000万人民币」而不是数值。这算不上宽容是如实——原始数据就是这个形态平台不替你猜。要比大小自己解析。我更喜欢这种做法平台替你猜的每一步都是你以后要花时间验证的一步。怎么在选型时快速判断一分钟就能测出来。拿一个必然合法的请求故意加一个不存在的参数curl-shttps://open.tianxiagongchang.com/open/v1/capabilities/factory_search\-HAuthorization: Bearer sk-tx-test-1685549fb3710c1b36e4d75dc2d0f42a\-HContent-Type: application/json\-d{keyword:注塑模具,not_a_real_param:1}报错就是严格型返回正常数据就是宽容型。上面这把sk-tx-test-开头的是平台公开的沙箱密钥不计费、返回示例数据专门用来做这种链路验证。测出是宽容型的话不是不能用是你要在自己这边补一层参数白名单校验。这个成本得算进选型账里。文档在 https://www.tianxiagongchang.com/open/docs控制台在 https://www.tianxiagongchang.com/open/console。顺带说一句写自己的 API 时也建议默认严格additionalProperties: false一行的事能替下游省掉一整类无法归因的问题。