# API 参考(当前真相)
本文档描述 2026-06-13 当前仓库中已落地、可验证的接口与命令行入口。
适用范围:
- 管理后台 FastAPI API
- 已交付 CLI(审核 / 订单 / 数据溯源)
- 关键数据契约与鉴权约定
不包含:
- 旧版 `spec_checker_v2.py` 的逐函数说明
- 尚未落地的用户端 Web 自助下单/支付/资料填写闭环
---
## 1. 当前接口面
### 1.1 HTTP / FastAPI
服务入口:`python3 -m admin.app --port 8000`
基础约定:
- 健康检查:`GET /health`
- 登录:`POST /api/auth/login`
- Bearer 鉴权:除 `/health`、`/dashboard`、`/s/{code}` 外,管理 API 默认需要 JWT
- OpenAPI:`GET /openapi.json`
- Swagger:`GET /docs`
### 1.2 CLI
当前仓库内已落地的主要 CLI:
- `python3 -m skills.gaokao-audit.scripts.audit_cli `
- `python3 scripts/gaokao-order-manager ...`
- `python3 scripts/gaokao-data-trace `
- `python3 scripts/gaokao-quick-3min.py`
- `python3 scripts/gaokao-channel-fallback ...`
---
## 2. 管理后台 HTTP API
### 2.1 健康检查
#### `GET /health`
用途:进程/配置级健康检查。
响应示例:
```json
{
"status": "ok"
}
```
---
### 2.2 认证 API
#### `POST /api/auth/login`
用途:管理员登录,获取 Bearer JWT。
请求体:
```json
{
"username": "admin",
"password": "admin123"
}
```
成功响应:
```json
{
"access_token": "",
"token_type": "bearer",
"expires_in": 3600,
"user": {
"id": "...",
"username": "admin",
"role": "admin"
}
}
```
使用方式:
```bash
curl -X POST http://127.0.0.1:8000/api/auth/login \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"admin123"}'
```
#### `GET /api/auth/me`
用途:获取当前登录管理员信息。
请求头:
```text
Authorization: Bearer
```
---
### 2.3 元数据 API
#### `GET /api/meta`
用途:返回后台前端使用的枚举/元信息。
典型用途:
- 订单状态枚举
- 来源渠道枚举
- 服务版本枚举
- 案例审核状态等
---
### 2.4 用户 API(T6.3)
#### `GET /api/users`
用途:分页列出用户,默认返回脱敏字段。
常见查询参数:
- `limit`
- `offset`
- 其他筛选项以 OpenAPI 为准
#### `GET /api/users/{user_key}`
用途:查看单个用户详情。
说明:`user_key` 可为内部 id 或路由支持的用户标识。
---
### 2.5 订单 API(T6.4)
#### `GET /api/orders`
用途:分页列出订单。
常见查询参数:
- `status`
- `source`
- `limit`
- `offset`
说明:
- 列表默认走脱敏输出
- 不应依赖该接口获取完整明文手机号/身份证号
#### `GET /api/orders/export`
用途:导出订单 CSV。
说明:
- 当前导出路径复用后台查询条件
- 输出仍遵循后台脱敏边界
- 如需对外发送报表,建议二次审核 CSV 内容
#### `GET /api/orders/{order_id}`
用途:查看订单详情与状态历史。
#### `POST /api/orders`
用途:手工录单。
典型字段:
```json
{
"source": "xianyu",
"service_version": "audit",
"amount_cents": 4900,
"customer_name": "王家长",
"customer_phone": "13800001234",
"candidate_name": "李明",
"candidate_province": "湖南",
"candidate_score": 578,
"candidate_rank": 26800
}
```
说明:
- `external_id` 可留空,支持人工补录
- 写路径复用 `OrdersDAO` 状态机与落库逻辑
#### `PATCH /api/orders/{order_id}`
用途:更新订单业务字段、推进状态、处理退款。
说明:
- 非法状态流转会被拒绝
- 订单状态机为:`pending -> paid -> serving -> delivered -> completed`,另有 `refunded`
- 文档应以 OpenAPI 和 `data/orders/state_machine.py` 为最终事实源
---
### 2.6 案例 API(T6.5)
#### `GET /api/cases`
用途:案例列表。
#### `POST /api/cases`
用途:创建案例。
#### `GET /api/cases/{case_id}`
用途:查看案例详情。
#### `PATCH /api/cases/{case_id}`
用途:更新案例。
#### `POST /api/cases/{case_id}/review`
用途:案例审核。
#### `DELETE /api/cases/{case_id}`
用途:删除案例。
---
### 2.7 统计 API(T6.2)
#### `GET /api/stats/dashboard`
用途:一站式仪表盘数据。
响应结构:
- `summary`
- `by_status`
- `by_source`
- `by_service_version`
- `trends`
- `generated_at`
关键口径:
- 收入 = `paid / serving / delivered / completed` 四态订单的 `amount_cents` 累计值
- `pending`、`refunded` 不计入收入
- 趋势桶粒度为天(UTC)
- 空日期补 0,前端得到稠密序列
- 统计路径不读取 PII
#### `GET /api/stats/orders`
用途:兼容订单统计接口;字段名沿用早期 stub 版本,但已接真实 SQL 聚合。
---
### 2.8 UI 路由
#### `GET /dashboard`
用途:极简后台仪表盘页面。
说明:
- 页面本身可公开访问
- 数据请求仍依赖登录态/JWT
#### `GET /s/{code}`
用途:分享页短链接访问入口。
说明:
- 由 `data/share/short_link.py` 与 `admin/share_page.py` 提供能力
- 权限控制支持 `read/comment/edit/admin`
---
## 3. CLI 接口
### 3.1 AI 审核 CLI
入口:`python3 -m skills.gaokao-audit.scripts.audit_cli`
命令格式:
```bash
python3 -m skills.gaokao-audit.scripts.audit_cli plan.txt \
--output plan.audit.pdf \
--format text \
--json
```
参数:
- `input`:方案文件路径
- `--output`:PDF 输出路径;默认 `.audit.pdf`
- `--format`:`text | pdf_text | screenshot_ocr`
- `--json`:额外输出审核结果 JSON
标准输出包含:
- 输入文件路径
- 识别省份
- 综合评分
- PDF 报告路径
- 可选 JSON payload
主链能力:
- 方案解析
- 规范检查集成
- 扎堆风险检测
- HTML/PDF 报告输出
---
### 3.2 订单管理 CLI
入口:`python3 scripts/gaokao-order-manager`
通用参数:
- `--db `:订单库路径,默认 `data/orders.db`
- `--human`:终端友好文本输出;默认 JSON
- `--actor`:操作者标识
已落地子命令:
- `create`
- `list`
- `show`
- `update`
- `pay`
- `deliver`
- `upgrade`
- `stats`
- `export`
示例:
```bash
python3 scripts/gaokao-order-manager --db data/orders.db create \
--source xianyu \
--service-version audit \
--amount-cents 4900 \
--customer-name 王家长 \
--customer-phone 13800001234 \
--candidate-name 李明 \
--candidate-province 湖南 \
--candidate-score 578
```
```bash
python3 scripts/gaokao-order-manager --db data/orders.db pay
python3 scripts/gaokao-order-manager --db data/orders.db deliver
python3 scripts/gaokao-order-manager --db data/orders.db export --output orders.csv
```
行为约束:
- 详情默认返回状态历史
- `update` 仅允许业务字段,`status` 不允许直接硬改
- 状态流转必须走状态机
- 默认输出经过 `Order.to_dict()` 脱敏处理
---
### 3.3 数据溯源 CLI
入口:`python3 scripts/gaokao-data-trace`
命令格式:
```bash
python3 scripts/gaokao-data-trace "中南大学"
python3 scripts/gaokao-data-trace "中南大学" --human
```
参数:
- `school_name`:院校名称,支持包含匹配
- `--human`:终端友好输出;默认 JSON
输出字段:
- `province`
- `school`
- `major`
- `frequency`
- `platforms`
- `predicted_increase`
- `alternatives`
- `score_range`
- `data_year`
- `source`
- `source_url`
- `source_type`
- `confidence`
- `last_updated`
用途:
- 查询某院校/专业推荐的来源信息
- 向审核报告补充“为什么这样推荐”的数据依据
---
## 4. 关键数据契约
### 4.1 订单状态机
当前文档级约定:
- `pending`
- `paid`
- `serving`
- `delivered`
- `completed`
- `refunded`
注意:
- 直接写状态属于越界使用
- HTTP 与 CLI 都应复用 `OrdersDAO.transition_status()`
### 4.2 订单隐私边界
默认脱敏字段包括但不限于:
- 手机号
- 身份证号
- 部分姓名
明文敏感数据不应通过普通列表接口、CSV 报表或分享页直接暴露。
### 4.3 统计口径
仪表盘与统计接口共享以下前提:
- `GAOKAO_DB_PATH`:admin 用户库
- `GAOKAO_ORDERS_DB_PATH`:订单库
- 收入统计只看订单金额和状态,不读取 PII
---
## 5. 环境变量
常用运行变量:
- `GAOKAO_ENV`
- `GAOKAO_DB_PATH`
- `GAOKAO_ORDERS_DB_PATH`
- `GAOKAO_JWT_SECRET`
- `GAOKAO_ADMIN_USER`
- `GAOKAO_ADMIN_PASS`
- `GAOKAO_ORDERS_FERNET_KEY`
最低要求:
- 生产环境必须提供高熵 `GAOKAO_JWT_SECRET`
- 订单/用户相关路径需要 `GAOKAO_ORDERS_FERNET_KEY`
- 生产环境不得使用默认弱口令 `admin123`
---
## 6. 验证建议
查看最新 API 真相:
```bash
python3 -m admin.app --port 8000
curl http://127.0.0.1:8000/openapi.json
```
验证 T5 主链测试:
```bash
python3 -m pytest tests/test_t5_e2e_workflows.py tests/test_t5_performance.py -q
```
如本文与代码不一致,优先级顺序为:
1. 代码与实跑结果
2. OpenAPI / CLI `--help`
3. 本文档