# 数据缓冲平台 基于 FastAPI + SQLite + APScheduler 的行情数据缓冲服务。 ## 功能 1. **数据采集缓存** - 复用现有采集脚本,自动缓存到 SQLite 2. **批量获取接口** - 指定品种+周期,批量拉取并缓存 3. **定时任务管理** - 创建/启动/停止/删除自动轮询任务 4. **最新数据接口** - 从缓存中快速获取最新数据 ## 快速启动 ```bash cd buffer_platform pip install -r requirements.txt # 启动服务(默认端口 8600) python -m app.main # 或指定端口 BUFFER_PORT=9000 python -m app.main ``` ## API 接口 ### 数据接口 `/api/v1/data` | 方法 | 路径 | 说明 | |------|------|------| | POST | `/data/batch-fetch` | 批量获取并缓存(智能缓存) | | GET | `/data/latest/{symbol}` | 从缓存获取最新数据 | | GET | `/data/latest/{symbol}/{period}` | 获取指定周期最新数据 | | GET | `/data/cache-status/{symbol}` | 查看缓存状态 | ### 品种配置接口 `/api/v1/config` | 方法 | 路径 | 说明 | |------|------|------| | GET | `/config` | 获取当前品种配置 | | POST | `/config/upload` | 上传品种配置文件(JSON) | | POST | `/config/batch-fetch-all` | 根据配置批量获取所有品种数据 | | POST | `/config/batch-tasks` | 根据配置批量创建定时任务 | ### 定时任务接口 `/api/v1/tasks` | 方法 | 路径 | 说明 | |------|------|------| | POST | `/tasks` | 创建并启动定时任务 | | GET | `/tasks` | 列出所有任务 | | POST | `/tasks/{id}/start` | 启动任务 | | POST | `/tasks/{id}/stop` | 停止任务 | | POST | `/tasks/{id}/update-interval` | 更新轮询间隔 | | DELETE | `/tasks/{id}` | 删除任务 | ### UI 页面 | 路径 | 说明 | |------|------| | `/ui` | 品种配置管理页面(上传文件、批量获取、批量任务) | | `/docs` | Swagger API 文档 | ### 使用示例 ```bash # 启动服务(默认端口 8600) cd buffer_platform python -m app.main # 访问 UI 管理页面 open http://localhost:8600/ui # 上传品种配置文件 curl -X POST http://localhost:8600/api/v1/config/upload \ -F "file=@symbols_config.json" # 查看当前配置 curl http://localhost:8600/api/v1/config # 根据配置批量获取所有品种数据 curl -X POST 'http://localhost:8600/api/v1/config/batch-fetch-all?periods=5min,15min,60min&data_type=futures' # 根据配置批量创建定时任务(每5分钟自动采集) curl -X POST 'http://localhost:8600/api/v1/config/batch-tasks?periods=5min,15min,60min&interval_seconds=300&data_type=futures' # 批量获取(手动指定品种) curl -X POST http://localhost:8600/api/v1/data/batch-fetch \ -H "Content-Type: application/json" \ -d '{"symbols": ["SN2504", "AG2506"], "periods": ["5min", "15min"]}' # 获取最新缓存 curl http://localhost:8600/api/v1/data/latest/SN2504 # 创建单个定时任务 curl -X POST http://localhost:8600/api/v1/tasks \ -H "Content-Type: application/json" \ -d '{"symbol": "SN2504", "periods": ["5min", "15min", "60min"], "interval_seconds": 300}' ``` ## 项目结构 ``` buffer_platform/ ├── app/ │ ├── main.py # FastAPI 入口 │ ├── config.py # 配置 │ ├── database.py # 数据库连接 │ ├── models.py # ORM 模型 │ ├── schemas.py # 请求/响应模型 │ ├── api/ │ │ ├── data.py # 数据接口 │ │ └── tasks.py # 任务接口 │ └── services/ │ ├── collector.py # 采集服务 │ ├── cache.py # 缓存服务 │ └── scheduler.py # 调度服务 ├── data/ # SQLite 数据库文件 └── requirements.txt ```