You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.5 KiB

期货股票数据统一平台 - 后端服务

技术栈

  • 框架: FastAPI 0.109+
  • 数据库: TimescaleDB (时序数据) + SQLite (配置数据)
  • 缓存: Redis 7.2+
  • 认证: JWT (PyJWT)
  • 异步: asyncio + uvicorn

目录结构

backend/
├── app/
│   ├── api/
│   │   └── v1/
│   │       ├── auth.py        # 认证 API
│   │       ├── kline.py       # K 线数据 API
│   │       ├── realtime.py    # 实时行情 API
│   │       ├── alert.py       # 告警管理 API
│   │       ├── subscription.py # 数据订阅 API
│   │       └── user.py        # 用户管理 API
│   ├── db/
│   │   └── init_db.py         # 数据库初始化
│   ├── middleware/
│   │   ├── auth.py            # 认证中间件
│   │   └── rate_limit.py      # 限流中间件
│   ├── models/
│   │   └── __init__.py        # SQLAlchemy 模型
│   ├── schemas/
│   │   └── __init__.py        # Pydantic 数据验证
│   ├── services/
│   │   ├── auth_service.py    # 认证服务
│   │   ├── kline_service.py   # K 线数据服务
│   │   ├── realtime_service.py # 实时行情服务
│   │   ├── alert_service.py   # 告警服务
│   │   └── subscription_service.py # 订阅服务
│   ├── config.py              # 配置文件
│   └── main.py                # 应用入口
├── tests/
│   └── test_api.py            # API 测试
├── requirements.txt           # Python 依赖
└── Dockerfile                 # Docker 构建

API 接口

认证接口

  • POST /api/v1/auth/login - 用户登录
  • POST /api/v1/auth/refresh - 刷新令牌
  • GET /api/v1/auth/me - 获取当前用户信息
  • POST /api/v1/auth/api-key - 创建 API Key
  • GET /api/v1/auth/api-keys - 获取 API Key 列表
  • DELETE /api/v1/auth/api-key/{id} - 撤销 API Key

K 线数据接口

  • GET /api/v1/kline/data - 获取 K 线数据
  • GET /api/v1/kline/latest - 获取最新 K 线
  • GET /api/v1/kline/symbols - 获取品种列表
  • GET /api/v1/kline/periods - 获取周期列表

实时行情接口

  • WS /api/v1/realtime/ws - WebSocket 实时推送
  • GET /api/v1/realtime/quote - 获取最新行情
  • GET /api/v1/realtime/quotes - 获取多个行情

告警管理接口

  • POST /api/v1/alert - 创建告警
  • GET /api/v1/alert - 获取告警列表
  • GET /api/v1/alert/{id} - 获取告警详情
  • PUT /api/v1/alert/{id} - 更新告警
  • DELETE /api/v1/alert/{id} - 删除告警

数据订阅接口

  • POST /api/v1/subscription - 创建订阅
  • GET /api/v1/subscription - 获取订阅列表
  • DELETE /api/v1/subscription/{id} - 取消订阅

本地开发

安装依赖

pip install -r requirements.txt

配置环境变量

创建 .env 文件:

SECRET_KEY=your-secret-key
TIMESCALE_DB_URL=postgresql://postgres:postgres@localhost:5432/kline_data
SQLITE_DB_PATH=./data/config.db
REDIS_URL=redis://localhost:6379/0

启动服务

uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

访问 API 文档

运行测试

pytest tests/ -v --cov=app

Docker 部署

# 构建镜像
docker build -t kline-backend .

# 运行容器
docker run -d -p 8000:8000 --name kline-backend kline-backend