错误码速查
GraphForge 全部错误响应统一格式:
{ "detail": "错误信息(中英文混合)" }
部分接口使用 { "success": false, "message": "..." } 风格(历史遗留,逐步收敛中)。
常见 HTTP 状态码
| 码 | 含义 | 典型原因 | 处理 |
|---|---|---|---|
400 | 请求格式错 | 必填字段缺失 / 类型错 / 业务逻辑校验失败 | 看 detail 修改 payload |
401 | 未鉴权 | Token 缺失 / 失效 / TTL 过期 | 重新调 /auth/login 拿新 token |
403 | 鉴权但无权 | 用户对该资源无访问权(非 owner 且非 admin) | 联系 admin 加权限 / 用 POST /api/permissions/graphs/{id}/members |
404 | 资源不存在 | graph_id / metric_id / job_id 错或已删 | 核对 id;删了的资源不会自动恢复 |
422 | Pydantic 校验失败 | 字段类型 / 长度 / 枚举值不符 schema | 看 detail.errors 数组,每条含 loc/msg/type |
429 | 速率超限 | 触发 认证 文档的速率表 | 等 60s 重试;或申请提升配额 |
500 | 服务端异常 | 后端 bug / LLM 服务异常 / DB 连接断 | 重试 1-2 次;持续报联系支持 |
501 | 未实现 | 该 endpoint 在文档列出但功能未 ship(如 PUT/DELETE /ingestion/jobs/{id}) | 看 detail 确认 Sprint 计划 |
502 | 上游超时 | LightRAG 首次冷启动 > 120s 代理超时;后端仍会完成 | 等 1 分钟后重发,第二次走缓存秒回 |
业务特定错误
| Endpoint | 错误 | 含义 |
|---|---|---|
POST /metrics/.../execute | FormulaParseError | 指标公式不在 10 模式 dispatcher 内 |
POST /metrics/.../execute | MissingBindingError | 指标没建物理绑定,无法执行 |
POST /metrics/.../execute | UnsafeFilterClauseError | filter_clause 含 DDL/DML 被 sqlglot 拦截 |
POST /ingestion/jobs | mapping_yaml validation failed | YAML 语法错或列规则错 |
POST /warehouse/connections | pg_mirror connections must not provide a DSN | pg_mirror 类型必须 dsn=null |
DELETE /warehouse/connections/{id} | 422 | 删默认 pg_mirror 被拒;或外键有 IngestionJob 引用 |
鉴权调试 checklist
收到 401 时按以下顺序排查:
- 请求头是否含
Authorization: Bearer <token>(注意Bearer后必须有空格) - Token 是不是从
/auth/login返回的token字段(不是 user_id) - Token 是否过期 → 调
GET /api/auth/me验证;401 即过期 - 服务端
JWT_SECRET_KEY是否变了(重启时如果没配 env,会用随机 key,所有老 token 失效) - 跨域调用时检查 CORS 是否含你的 origin
联系支持
仍排查不出 → 邮件 marketing@yrules.com,附 request_id(从响应头 X-Request-ID 取)+ 完整 curl 命令(脱敏 token / password)。