← 中文资源

简体中文版本

排查接口载荷 Schema 校验失败

复现 422 载荷拒绝,利用结构化校验诊断找到具体失败的属性路径,而不是笼统报错。

阅读英文原文

目标

客户端升级后集成报错,但只返回笼统的 422,没有字段级信息,难以排查。本配方让服务端返回按键路径结构化组织的校验错误,再用日志中的原始载荷复现,定位到具体字段(如 items.0.price),并在修复该字段后验证请求返回 200。

步骤要点

  1. 让校验器输出按 JSON 路径结构化的错误。
  2. 用日志中的原始载荷复现,确认错误具有确定性。
  3. 在 Schema 校验之后再加一层领域校验,捕获跨字段规则。
  4. 返回字段路径与安全文案,避免泄露内部细节。
const result = schema.safeParse(body);
if (!result.success) {
  return res.status(422).json({
    errors: result.error.issues.map(i => ({ path: i.path.join('.'), message: i.message })),
  });
}

排错提示

  • Schema 校验无法覆盖跨字段业务规则。
  • 过细的错误可能帮助攻击者,需限定字段级。
  • 校验器需保留数组下标。

适用边界

  • 不覆盖跨字段业务规则。
  • 错误信息需避免泄露堆栈。