使用说明
MCP加密市场数据服务器(演示)
最小的、演示就绪的FastAPI服务器,使用CCXT检索实时和历史加密货币市场数据,并公开多个REST和WebSocket端点。
特性
- 异步FastAPI架构
- 支持多交换的CCXT异步集成
- 最新收报机端点(带短TTL缓存)
- 历史OHLCV数据端点
- 用于实时滴答更新的WebSocket通道
- 带有异步锁的内存缓存
- 基于异步的简单发布/订阅系统
- 使用pytest+pytest-asyncio(模拟交换数据)的测试套件
方法
该项目实现了一个为实习任务设计的轻量级市场数据服务器。它侧重于正确性、干净的结构、异步设计和真实的交换数据。
主要架构决策:
-
基于轮询的“实时”WS提要
用于演示。生产系统应集成真实的交换WebSocket流。 -
内存TTL缓存
防止冗余的CCXT呼叫,避免达到速率限制。 -
异步锁
保护共享缓存免受竞争条件的影响。 -
FastAPI+WebSockets
通过Swagger实现轻松测试,并支持基于订阅的更新。
该服务器有意采用模块化设计,因此可以在未来的迭代中轻松地使用Redis、Kafka、Docker或实时WebSocket市场提要进行扩展。
假设
- 公共交换数据足够(不需要API密钥)。
- 交换名称遵循CCXT的标准ID(例如。,
binance,kraken,bybit). - 符号可能是
BTC/USDT或BTC-USDT(转换在内部处理)。 - 实时提要使用轮询进行演示。
- 设计用于在Windows上本地执行以进行评估。
端点
GET /api/v1/health-健康检查GET /api/v1/tick/{exchange}/{symbol}-最新股票代码(缓存的短TTL)GET /api/v1/ohlcv/{exchange}/{symbol}-历史上的OHLCV蜡烛GET /api/v1/subscribers-调试活动订阅列表
特征:
- 支持CCXT异步的异步设计
- 带异步锁的内存缓存(TTL)(未来可以添加Redis)
- 使用asyncio的简单pubsub。队列和后台轮询任务
- 使用pytest和pytest-asyncio进行测试(模拟交换调用)
快速启动(dev)
cd path\to\project
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
uvicorn app.main:app --reload
http://127.0.0.1:8000/docs
运行测试
.\.venv\Scripts\Activate.ps1
pytest -q
示例用法
获取最新的BTC股票代码
GET http://127.0.0.1:8000/api/v1/tick/binance/BTC-USDT
未来改进
-
Redis缓存
-
Kafka/Redis PubSub
-
真实交换WebSocket流
-
Docker支持
-
身份验证+速率限制
-
CI/CD测试+部署管道
-
交换机名称必须与CCXT交换机ID匹配(例如。,
binance,kraken).符号应该是交换特定的(例如。,BTC/USDT或BTC/USD).