Skip to content

错误处理 ​

先判断网络与 HTTP 状态,再解析业务响应。普通业务错误使用 {code, msg, data},部分提供稳定 errorCode,不要通过比较中英文 msg 驱动逻辑。

json
{
  "code": 409,
  "msg": "Settings changed; reload before saving",
  "data": null,
  "errorCode": "SETTINGS_CONFLICT"
}

示例只说明结构,不要求服务端返回完全相同的文案。

状态与处理方式 ​

HTTP 状态客户端处理
400根据 errorCode 和字段约束修正请求,避免原样重复提交
401按认证流程刷新或重新登录;禁用账号、租户或撤销会话需先解除原因
403检查当前身份、角色和操作权限,不自动无限重试
404检查路径、代理前缀、资源和目标版本;生产文档入口默认关闭
409重新读取并处理冲突;设置需要使用新的 revision
413检查文件、整个请求体及代理上限;返回可能是 HTML
422展示字段校验问题,检查类型、必填项与取值范围
429遵守 Retry-After;不要立即循环重试
500保留脱敏上下文并检查服务日志,写请求重试前确认上次结果
503检查依赖、运行开关和服务状态;恢复后再重试

代理产生的 502 / 504、断网、超时或非 JSON 内容不一定有 errorCode。AI SSE 的业务结果在事件中,不能只凭 HTTP 200 判定成功。

字段校验与重试 ​

请求校验失败通常为 422,字段信息位于 data.fieldErrors,每项包含 field 和 message。errorCode 是可选字段,客户端应能处理没有它的校验错误。

GET 等读取可按场景进行有上限的重试。创建、付款等业务写入是否可重试由该接口的幂等约定决定;HoHu 不自动使所有 POST 幂等。租户创建和初始化的 Idempotency-Key 规则见多租户管理。

开发与反馈 ​

新增业务错误使用 app/core/exceptions.py 中的领域异常,分配稳定且明确的错误码,同步客户端翻译与回归验证。业务代码不直接散布 HTTPException,不向用户暴露堆栈、密钥或数据库连接。

反馈包含版本、操作步骤、发生时间、HTTP 状态、errorCode 和脱敏日志。先按常见错误码定位;此速查表不是完整错误注册表。