加密货币市场数据服务器

一个基于FastAPI的轻量级加密货币市场数据服务器,提供实时和历史数据的REST和WebSocket接口,支持多交易所数据获取。

  • by Urvashi05306
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Urvashi05306/MCP-Server

使用说明

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).