汽车配件 API 报错时,应先区分输入、车型锁定、权限和服务状态问题,再决定修参数、转人工、降级或重试,不能对所有失败统一重试。

先建立错误分类

错误码 文档含义 建议动作 是否适合自动重试
201 VIN 不正确 校验长度、字符和录入内容 否,先修正输入
202 VIN 无法锁定车型 提示选择车型或人工确认 否,不能盲重试
203 零件名太短 补充至少两个字的名称 否,先补参
204 车型 ID 错误 从车型 API 重新获取合法 ID 否,先修 ID
205 零件号为空 传入零件号或改用零件名称 否,先修参
220 没有信息 展示无匹配并切换查询条件 通常否
101 至 103 appkey、过期或权限问题 检查密钥和产品权限
104 请求超过次数 停止继续调用,检查额度、重置周期或产品权限 否,盲目退避不会恢复额度
106 IP 请求频率超过限制 降低并发、排队;确认限流窗口后做有上限的延迟重试 有条件
105、107、108 IP 禁止、维护或停用 告警、降级、确认服务状态

错误码和字段以车型零件搜索 API 文档当前页面为准。其他 API 的错误码不能直接套用到这个接口。

输入类错误:修正后再发一次

201、203、204、205 都属于请求本身不满足条件。服务端应把用户可修正的提示说清楚:VIN 字符是否抄错、车型 ID 是否来自车型大全 API、零件名称是否达到最小长度、零件号是否真的传入。不要把这些错误包装成“网络异常”,否则客服和开发都会重复重试同一个坏请求。

VIN 无法锁定:不要用猜测的车型继续查

202 的关键不是“再请求几次”,而是 VIN 与车型之间没有建立可用锁定关系。可以让用户改用车型选择,或进入人工核验;一旦选择了车型,必须把新的 carid 与原 VIN、确认来源和时间一起记录。没有锁定结果时,不应直接把某个相近车款的零件返回给客户。

220 没有信息:设计查询降级路径

220 不一定表示系统故障,可能是名称、编号和车型组合没有匹配。可按以下顺序降级:

  1. 保留已确认的车型,改用更标准的零件名称。
  2. 如果用户有 OE 或品牌件号,切换到对应编号入口。
  3. 展示候选结果前再次核对品牌、单位和车型。
  4. 仍无结果时记录查询条件,转人工或供应链目录核实。

降级是改变查询条件,不是无限次重复同一个请求。

鉴权、限流和维护:按系统事件处理

101 至 103 需要检查 appkey 是否为空、过期或没有权限。104 表示请求次数超过限制,应暂停任务并检查额度、套餐或重置周期,继续指数退避不会自动恢复可用次数。106 是 IP 请求频率超过限制,适合降低并发、进入请求队列,并在确认限流窗口后做有上限的延迟重试。105、107、108 则应触发监控告警,并在前端显示服务暂不可用或切换合规缓存。密钥只在服务端使用,日志中仅保留哈希或末几位标识。

一个通用的处理骨架如下:

INPUT_ERRORS = {201, 203, 204, 205}

def handle_api_result(data):
    code = data.get("status", 0)
    if code == 0:
        return {"state": "success", "data": data.get("result")}
    if code in INPUT_ERRORS:
        return {"state": "fix_input", "message": data.get("msg", "请检查查询条件")}
    if code == 202:
        return {"state": "vehicle_unresolved", "message": "VIN 未锁定车型,请选择车型或人工确认"}
    if code == 220:
        return {"state": "no_info", "message": "当前条件没有匹配信息"}
    if code == 104:
        return {"state": "quota_exhausted", "message": "请求次数已超限,请检查额度或重置周期"}
    if code == 106:
        return {"state": "throttled", "message": "IP 请求频率超限,请排队并按限流窗口重试"}
    return {"state": "alert", "message": "接口权限或服务状态异常"}

这段代码只是错误分层示例,没有调用真实接口;上线前应按你实际使用的 API 文档补充字段映射、退避上限和告警渠道。

日志至少记录什么

记录接口名、请求时间、业务状态码、脱敏后的车型 ID、查询类型、耗时、重试次数和最终处理状态。VIN、appkey、完整零件号和客户信息应遵守最小化与脱敏原则。排查时要能区分“服务端返回 220”“客户端过滤为空”和“请求超时未收到响应”。

什么时候需要人工复核

出现 202、多个候选件、价格为空、品牌或单位冲突时,应暂停自动报价或下单。API 返回的是数据检索结果,不替代维修人员对车型、零件适配和实际库存的最终确认。

可先从极速车服查询页人工交叉检查输入,再按车型零件搜索 API 文档接入服务端。网页查询不能替代 API 请求日志或证明两次查询属于同一响应,因此仍要在自有系统中保存端点、参数摘要、状态码和查询时间。