错误
错误体
所有错误以 JSON 返回,仅含一个 detail 字段:
{ "detail": "<人类可读的消息>" }
这是 FastAPI 的默认错误体。本接口没有机器可读的错误码;客户端应基于 HTTP 状态码分支处理。
detail 字符串目前后端以中文书写(例如 "策略不存在")。英文对照见各端点的错误表,请勿基于字面字符串解析。
HTTP 状态码
| 状态码 | 含义 | 典型触发 |
|---|---|---|
400 | 请求错误 | 创建策略时 name 重名、Pydantic/FastAPI 校验失败、缺少必填查询参数 |
404 | 未找到 | 策略 ID 在数据库中不存在 |
429 | 限流 | 每 IP 速率超限(见下) |
500 | 服务器内部错误 | FastAPI 处理器中未捕获的异常 |
502 | 上游失败 | 后端调用 Binance 时失败({"detail": "Binance请求失败: <原因>"}) |
限流响应
每 IP 在 60 秒窗口内超出 1000 次时返回 HTTP 429:
{ "detail": "请求过于频繁。每个 IP 每分钟最多允许 1000 次请求。" }
同时该 IP 会被封锁 1 小时。封锁期间再次请求返回:
{ "detail": "IP <ip> 已被暂时封锁。请求过于频繁,请稍后再试。" }
/ 与 /health 不计入限流,永远不会返回 429。
校验错误(FastAPI 默认)
请求未通过 Pydantic 校验时,FastAPI 返回 HTTP 422,使用其标准校验错误体:
{
"detail": [
{
"loc": ["body", "name"],
"msg": "field required",
"type": "value_error.missing"
}
]
}
只有校验失败会出现这种结构;所有手动抛出的错误都使用前面那种简单的 {"detail": "<string>"} 形式。