接口文档

本文档由 backend/tests/export_api_inventory.py 从 FastAPI 运行时路由表自动生成, 共 88 个接口 / 71 个路径。代码改了重新跑一次脚本即可同步。



一、通用约定

1.1 基础地址

生产环境(正式域名):

https://quant.quasarxode.cn/api

本地开发:http://127.0.0.1:8000/api

1.2 认证方式

除公开接口外,所有接口都需要在请求头携带 Bearer Token:

Authorization: Bearer <access_token>

Token 由 POST /api/auth/login 或 POST /api/auth/register 获取, 有效期默认 720 分钟(可在系统设置中调整)。

1.3 响应格式

成功:直接返回业务数据,无统一外层包装。

{
  "id": 1,
  "name": "双均线策略",
  "status": "running"
}

失败:统一返回 detail 字段。

{ "detail": "权限不足,需要:strategy:write" }

参数校验失败(422)会额外带 errors 数组,字段已拍平:

{
  "detail": "请求参数校验失败",
  "errors": [
    { "field": "username", "message": "用户名需字母开头,仅含字母数字下划线,3-20 位" }
  ]
}

未捕获异常绝不回传堆栈(含文件路径等内部信息), 只写入 error_logs 表与日志文件,客户端收到通用错误提示。

1.4 状态码约定

状态码含义
200成功
400业务校验失败(验证码错、密码错、状态不允许等)
401未登录或 Token 失效
403已登录但权限不足 / 操作被禁
404资源不存在(越权访问他人资源也返回 404,不泄露资源存在性)
422参数校验失败
429触发限流
500服务端内部错误

1.5 限流规则

滑动窗口,按 客户端 IP + 路由分组 计数。命中硬上限的路径用独立阈值:

路径前缀上限粒度说明
/api/auth/login10次/分钟/IP登录失败会同时触发账号锁定
/api/auth/register5次/分钟/IP注册
/api/auth/captcha30次/分钟/IP取验证码
/api/auth/password/reset5次/分钟/IP用重置码改密
/api/backtests/run20次/分钟/IP运行回测(计算量大)
/api/admin/settings30次/分钟/IP修改系统设置
其余所有接口120次/分钟/IP全局默认阈值(系统设置可调)

触发限流返回 429,响应头带 Retry-After(秒)。

Nginx 反代时 X-Forwarded-For 用 $remote_addr 覆盖而非追加, 防止客户端伪造该头绕过限流。

1.6 权限点

细粒度 RBAC,权限码格式 域:动作。角色可自由组合,用户可拥有多个角色,权限取并集。 管理员角色拥有通配权限 *。

权限码名称分组
strategy:read查看策略strategy
strategy:write创建/修改策略strategy
strategy:delete删除策略strategy
backtest:read查看回测backtest
backtest:run运行回测backtest
monitor:read查看监控monitor
monitor:write管理监控任务monitor
signal:read查看信号signal
signal:push推送信号signal
order:read查看订单order
order:write下单order
admin:user用户管理admin
admin:setting系统设置admin
admin:log日志查看admin
admin:template策略模板管理admin
admin:cache缓存管理admin
admin:role角色权限管理admin
admin:ipIP 黑名单管理admin
admin:order全站订单管理admin

普通注册用户默认拥有全部 strategy / backtest / monitor / signal / order 共 11 个权限点。


二、接口详情

鉴权列含义:公开 = 无需登录;登录 = 需 Bearer Token; 权限 = 需特定权限码;管理员 = 需 admin 角色。

认证与账号

注册、登录、验证码、密码管理 · 7 个接口

方法路径说明鉴权
GET/api/auth/captcha获取图形验证码🔓 无需登录
POST/api/auth/login用户登录🔓 无需登录
POST/api/auth/logout退出登录👤 登录用户
GET/api/auth/me获取当前登录用户👤 登录用户
POST/api/auth/password/change修改自己的密码👤 登录用户
POST/api/auth/password/reset用管理员发放的重置码改密🔓 无需登录
POST/api/auth/register用户注册🔓 无需登录

GET /api/auth/captcha

获取图形验证码

POST /api/auth/login

用户登录

POST /api/auth/logout

退出登录

GET /api/auth/me

获取当前登录用户

POST /api/auth/password/change

修改自己的密码

POST /api/auth/password/reset

用管理员发放的重置码改密

POST /api/auth/register

用户注册

用户中心

个人资料、Webhook 推送配置、券商配置 · 7 个接口

方法路径说明鉴权
GET/api/users/broker查看券商配置(密码不回显)👤 登录用户
PUT/api/users/broker配置券商账号(加密存储)👤 登录用户
GET/api/users/orders我的订单列表👤 登录用户
GET/api/users/profile获取个人资料👤 登录用户
PUT/api/users/profile修改个人资料👤 登录用户
PUT/api/users/webhook配置 QXBot 推送 Webhook👤 登录用户
POST/api/users/webhook/test测试 Webhook 连通性👤 登录用户

GET /api/users/broker

查看券商配置(密码不回显)

PUT /api/users/broker

配置券商账号(加密存储)

GET /api/users/orders

我的订单列表

GET /api/users/profile

获取个人资料

PUT /api/users/profile

修改个人资料

PUT /api/users/webhook

配置 QXBot 推送 Webhook

POST /api/users/webhook/test

测试 Webhook 连通性

策略管理

策略 CRUD、复制、模板套用 · 8 个接口

方法路径说明鉴权
GET/api/strategies我的策略列表🔑 查看策略
POST/api/strategies创建策略🔑 创建/修改策略
GET/api/strategies/templates/list可用策略模板🔑 查看策略
POST/api/strategies/templates/{template_id}/apply套用模板创建策略🔑 创建/修改策略
DELETE/api/strategies/{strategy_id}删除策略🔑 删除策略
GET/api/strategies/{strategy_id}策略详情🔑 查看策略
PUT/api/strategies/{strategy_id}修改策略🔑 创建/修改策略
POST/api/strategies/{strategy_id}/copy复制策略🔑 创建/修改策略

GET /api/strategies

我的策略列表

POST /api/strategies

创建策略

GET /api/strategies/templates/list

可用策略模板

POST /api/strategies/templates/{template_id}/apply

套用模板创建策略

DELETE /api/strategies/{strategy_id}

删除策略

GET /api/strategies/{strategy_id}

策略详情

PUT /api/strategies/{strategy_id}

修改策略

POST /api/strategies/{strategy_id}/copy

复制策略

回测执行

运行回测、查询报告、删除记录 · 4 个接口

方法路径说明鉴权
GET/api/backtests我的回测记录🔑 查看回测
POST/api/backtests/run运行回测🔑 运行回测
DELETE/api/backtests/{run_id}删除回测记录🔑 查看回测
GET/api/backtests/{run_id}回测详情(含曲线与交易明细)🔑 查看回测

GET /api/backtests

我的回测记录

POST /api/backtests/run

运行回测

DELETE /api/backtests/{run_id}

删除回测记录

GET /api/backtests/{run_id}

回测详情(含曲线与交易明细)

行情监控

监控任务 CRUD、启停、立即执行、调度器状态 · 7 个接口

方法路径说明鉴权
GET/api/monitors我的监控任务🔑 查看监控
POST/api/monitors创建监控任务🔑 管理监控任务
GET/api/monitors/scheduler/status调度器运行状态🔑 查看监控
DELETE/api/monitors/{task_id}删除监控任务🔑 管理监控任务
PUT/api/monitors/{task_id}修改监控任务🔑 管理监控任务
POST/api/monitors/{task_id}/run-now立即执行一次扫描🔑 管理监控任务
POST/api/monitors/{task_id}/toggle启动/停止监控🔑 管理监控任务

GET /api/monitors

我的监控任务

POST /api/monitors

创建监控任务

GET /api/monitors/scheduler/status

调度器运行状态

DELETE /api/monitors/{task_id}

删除监控任务

PUT /api/monitors/{task_id}

修改监控任务

POST /api/monitors/{task_id}/run-now

立即执行一次扫描

POST /api/monitors/{task_id}/toggle

启动/停止监控

信号管理

信号查询、已读标记、失败重推 · 5 个接口

方法路径说明鉴权
GET/api/signals我的信号列表🔑 查看信号
POST/api/signals/read-all全部标记已读🔑 查看信号
GET/api/signals/stats我的信号统计🔑 查看信号
POST/api/signals/{signal_id}/push手动重推信号🔑 推送信号
POST/api/signals/{signal_id}/read标记已读🔑 查看信号

GET /api/signals

我的信号列表

POST /api/signals/read-all

全部标记已读

GET /api/signals/stats

我的信号统计

POST /api/signals/{signal_id}/push

手动重推信号

POST /api/signals/{signal_id}/read

标记已读

订单交易

模拟撮合下单、撤单、live 模式二次确认 · 5 个接口

方法路径说明鉴权
GET/api/orders我的订单列表🔑 查看订单
POST/api/orders创建订单🔑 下单
GET/api/orders/capabilities当前下单能力说明🔑 查看订单
POST/api/orders/{order_id}/cancel撤单🔑 下单
POST/api/orders/{order_id}/confirm确认订单(live 模式二次确认)🔑 下单

GET /api/orders

我的订单列表

POST /api/orders

创建订单

GET /api/orders/capabilities

当前下单能力说明

POST /api/orders/{order_id}/cancel

撤单

POST /api/orders/{order_id}/confirm

确认订单(live 模式二次确认)

行情数据

K 线、快照、搜索、缓存统计 · 4 个接口

方法路径说明鉴权
GET/api/market/cache/stats行情缓存统计🔑 查看策略
GET/api/market/kline日线 K 线数据🔑 查看策略
GET/api/market/quote最新行情快照🔑 查看策略
GET/api/market/search股票搜索🔑 查看策略

GET /api/market/cache/stats

行情缓存统计

GET /api/market/kline

日线 K 线数据

GET /api/market/quote

最新行情快照

GET /api/market/search

股票搜索

系统信息

平台版本与运行状态 · 1 个接口

方法路径说明鉴权
GET/api/system/info系统信息(登录后可见)🔓 无需登录

GET /api/system/info

系统信息(登录后可见)

管理后台 · 用户

用户 CRUD、封禁解锁、重置码 · 6 个接口

方法路径说明鉴权
GET/api/admin/users用户列表🛡️ 管理员
POST/api/admin/users新增用户🛡️ 管理员
DELETE/api/admin/users/{user_id}删除用户🛡️ 管理员
PUT/api/admin/users/{user_id}修改用户🛡️ 管理员
POST/api/admin/users/{user_id}/reset-token生成一次性密码重置码🛡️ 管理员
POST/api/admin/users/{user_id}/unlock解锁账号🛡️ 管理员

GET /api/admin/users

用户列表

POST /api/admin/users

新增用户

DELETE /api/admin/users/{user_id}

删除用户

PUT /api/admin/users/{user_id}

修改用户

POST /api/admin/users/{user_id}/reset-token

生成一次性密码重置码

POST /api/admin/users/{user_id}/unlock

解锁账号

管理后台 · 系统

系统设置、角色权限、IP 黑名单、缓存 · 12 个接口

方法路径说明鉴权
POST/api/admin/cache/clear清理缓存🛡️ 管理员
GET/api/admin/cache/stats缓存统计🛡️ 管理员
GET/api/admin/ip-blacklistIP 黑名单列表🛡️ 管理员
POST/api/admin/ip-blacklist添加 IP 黑名单🛡️ 管理员
DELETE/api/admin/ip-blacklist/{item_id}移除 IP 黑名单🛡️ 管理员
GET/api/admin/permissions全部权限点🛡️ 管理员
GET/api/admin/roles全部角色🛡️ 管理员
POST/api/admin/roles新建角色🛡️ 管理员
DELETE/api/admin/roles/{role_id}删除角色🛡️ 管理员
PUT/api/admin/roles/{role_id}修改角色权限🛡️ 管理员
GET/api/admin/settings读取全部系统设置🛡️ 管理员
PUT/api/admin/settings批量修改系统设置🛡️ 管理员

POST /api/admin/cache/clear

清理缓存

GET /api/admin/cache/stats

缓存统计

GET /api/admin/ip-blacklist

IP 黑名单列表

POST /api/admin/ip-blacklist

添加 IP 黑名单

DELETE /api/admin/ip-blacklist/{item_id}

移除 IP 黑名单

GET /api/admin/permissions

全部权限点

GET /api/admin/roles

全部角色

POST /api/admin/roles

新建角色

DELETE /api/admin/roles/{role_id}

删除角色

PUT /api/admin/roles/{role_id}

修改角色权限

GET /api/admin/settings

读取全部系统设置

PUT /api/admin/settings

批量修改系统设置

管理后台 · 日志与模板

操作日志、报错日志、策略模板 · 13 个接口

方法路径说明鉴权
GET/api/admin/data/backtests全站回测记录🛡️ 管理员
GET/api/admin/data/orders全站订单🛡️ 管理员
GET/api/admin/data/signals全站信号记录🛡️ 管理员
GET/api/admin/logs/audit操作日志🛡️ 管理员
GET/api/admin/logs/audit/export导出操作日志 CSV🛡️ 管理员
GET/api/admin/logs/errors报错日志🛡️ 管理员
POST/api/admin/logs/errors/clear清空报错日志🛡️ 管理员
DELETE/api/admin/logs/errors/{log_id}删除单条报错日志🛡️ 管理员
GET/api/admin/overview管理后台概览数据🛡️ 管理员
GET/api/admin/templates全部策略模板(含未公开)🛡️ 管理员
POST/api/admin/templates新建模板🛡️ 管理员
DELETE/api/admin/templates/{template_id}删除模板🛡️ 管理员
PUT/api/admin/templates/{template_id}修改模板🛡️ 管理员

GET /api/admin/data/backtests

全站回测记录

GET /api/admin/data/orders

全站订单

GET /api/admin/data/signals

全站信号记录

GET /api/admin/logs/audit

操作日志

GET /api/admin/logs/audit/export

导出操作日志 CSV

GET /api/admin/logs/errors

报错日志

POST /api/admin/logs/errors/clear

清空报错日志

DELETE /api/admin/logs/errors/{log_id}

删除单条报错日志

GET /api/admin/overview

管理后台概览数据

GET /api/admin/templates

全部策略模板(含未公开)

POST /api/admin/templates

新建模板

DELETE /api/admin/templates/{template_id}

删除模板

PUT /api/admin/templates/{template_id}

修改模板

管理后台 · 全站资源

全站数据、全站监控、全站策略 · 5 个接口

方法路径说明鉴权
GET/api/admin/monitors全站监控任务🛡️ 管理员
POST/api/admin/monitors/{task_id}/toggle启停全站监控任务🛡️ 管理员
GET/api/admin/strategies全站策略🛡️ 管理员
POST/api/admin/strategies/{strategy_id}/disable停用全站策略🛡️ 管理员
POST/api/admin/strategies/{strategy_id}/enable恢复全站策略🛡️ 管理员

GET /api/admin/monitors

全站监控任务

POST /api/admin/monitors/{task_id}/toggle

启停全站监控任务

GET /api/admin/strategies

全站策略

POST /api/admin/strategies/{strategy_id}/disable

停用全站策略

POST /api/admin/strategies/{strategy_id}/enable

恢复全站策略


三、附录

3.1 在线交互式文档

服务内置 Swagger UI 与 OpenAPI 规范,仅在 DEBUG=true 时开启 (backend/app/main.py 里的 docs_url / openapi_url 条件):

https://quant.quasarxode.cn/api/docs          # 仅 DEBUG 模式
https://quant.quasarxode.cn/api/openapi.json   # 仅 DEBUG 模式

生产环境默认关闭(避免把完整接口结构暴露给未授权访问者)。 需要临时开启时,在 .env 里设 DEBUG=true 并重启服务即可。 本文档本身包含了全部接口的说明,不依赖 Swagger。

3.2 核心数据模型

模型用途关键字段
Strategy策略配置name / fast_ma / slow_ma / vol_window / vol_threshold / codes / mode
BacktestRun回测记录strategy_id / status / total_return / max_drawdown / sharpe_ratio / equity_curve
MonitorTask监控任务strategy_id / is_running / interval_minutes / last_run_at
Signal买卖信号code / direction / price / reason / is_read / pushed
Order订单code / direction / volume / price / status / mode / idempotency_key
User用户username / email / nickname / roles / is_active / failed_attempts / locked_until
Role角色name / permission_codes
AuditLog操作审计user_id / action / ip / path / status_code / duration_ms
ErrorLog异常日志path / method / message / traceback

3.3 关键业务约束

约束说明
幂等去重下单请求带 idempotency_key,10 秒窗口内相同键返回同一订单
信号去重数据库唯一索引兜底,并发下不会产生重复信号
交易时段监控扫描仅在 A 股交易时段生效(可配置)
订单整手股数必须是 100 的整数倍
live 二次确认live 模式订单先进入 pending,需显式确认才生效
越权返回 404访问他人资源统一 404,不暴露资源存在性
合成数据标记无 tushare token 时 data_source="mock",前端显著警示

3.4 错误码对照

场景状态码detail 示例
验证码错误400验证码错误或已过期
密码错误400用户名或密码错误
账号锁定400账号已锁定,请 15 分钟后重试
Token 失效401登录已过期,请重新登录
权限不足403权限不足,需要:strategy:write
非管理员403该操作仅限管理员
资源不存在404策略不存在
触发限流429请求过于频繁,请稍后再试
服务端异常500服务器内部错误,请稍后重试