加密货币市场数据服务

一个基于FastAPI和CCXT的高性能加密货币市场数据服务器,提供实时和历史价格数据,强调效率、抽象、可靠性和测试覆盖。

  • by Santhosh-dev-lab
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Santhosh132-ops/crypto_mcp_server

使用说明

💰 加密货币市场数据协议(MCP)服务器

一个健壮、异步且经过充分测试的服务器,提供 实时的 和 历史的 加密货币市场数据。
该系统的设计遵循现代市场数据协议(MCP)原则: 缓存, 明确数据合同,以及 高可靠性.

📘 引言

该项目使用 快速API 和 仓储管理系统,为实时和历史价格数据提供稳定的API。
它强调:

  • 效率 (异步ASGI堆栈)
  • 抽象 (CCXT统一API)
  • 可靠性 (缓存+严格验证)
  • 测试覆盖率 (7项自动化测试)

🏛 结构概述

核心战略

专业的市场数据API需要可靠性、低延迟和速率限制意识。
该系统通过以下方式实现:

  • 异步FastAPI 实现高吞吐量
  • 派丹蒂克 用于执行严格和可预测的数据合同
  • 仓储管理系统 用于安全统一地访问交换数据
  • 5秒TTL缓存 以减少API负载并避免达到速率限制

🔧 关键组件

组件 技术 基本原理
服务器框架 FastAPI 快速、异步就绪、自动验证+文档
市场数据来源 CCXT 统一交换API抽象
缓存 自定义 DataCacher 带有TTL 防止过多的外部API调用
路由 {symbol:path} 支持以下符号 BTC/USDT

设置和验证(评估员指南)

  • 克隆存储库
  • 安装依赖项:
pip install -r requirements.txt

该项目包括一个全面的测试套件(test_crypto_data.py),涵盖:

  • 实时数据检索

  • 历史OHLCV检索

  • 缓存刷新行为

  • 无效符号错误处理

  • API稳定性

运行测试:

pytest

预期产量:

9 passed

API使用指南:

启动服务器

uvicorn crypto_data_server:app --reload

交互式文档

打开Swagger用户界面:

http://127.0.0.1:8000/docs

身份验证要求

所有/实时和/历史端点都受到保护,需要以下HTTP标头:

  • 标题:X-API-Key

  • 值:SECURE_DEV_KEY_12345

测试安全端点(API密钥身份验证)

🛑 浏览器测试(拒绝访问)

  • 如果您尝试直接通过浏览器访问路由,则会失败,因为浏览器无法在简单的GET请求上发送自定义标头。

  • 操作:将下面的URL粘贴到浏览器的地址栏中。

http://127.0.0.1:8000/realtime/BTC/USDT
  • 结果:您将收到403 Forbidden错误,并返回JSON响应:
{"detail": "Invalid API Key. Access denied."}

✅ 终端测试(curl成功)

  • 您必须使用curl等工具手动注入所需的标头,以证明安全机制有效。

  • 操作:在终端中运行以下命令(VS Code终端非常适合此操作)。

curl -H "X-API-Key: SECURE_DEV_KEY_12345" http://127.0.0.1:8000/realtime/BTC/USDT
  • 结果:请求将成功,返回完整的JSON市场数据(价格、时间戳等)。

端点示例

功能 示例URL 描述
健康检查 http://127.0.0.1:8000/ 确认API+币安连接
实时BTC/USDT价格 http://127.0.0.1:8000/realtime/BTC/USDT 返回当前价格(缓存5秒)
实时ETH/USDT价格 http://127.0.0.1:8000/realtime/ETH/USDT 适用于任何有效的交易对
历史OHLCV http://127.0.0.1:8000/historical/SOL/USDT?timeframe=4h&limit=5 获取5个烛台条目
无效配对测试 http://127.0.0.1:8000/realtime/NONEXISTENT/PAIR 返回404,返回干净的JSON错误

缓存和价格差异解释

您可能会发现与币安网站相比存在轻微的价格差异。

平台 数据源 行为
币安网站 WebSocket流 即时、实时的价格更新
本API REST API+缓存 5秒的TTL,以提高可靠性

这种差异证实了缓存层正常工作——这是一种深思熟虑的设计选择,可以防止速率限制并确保稳定性

⭐ 特性

  • ⚡ 异步FastAPI后端

  • 🛡 API密钥验证

  • 🔄 5秒TTL缓存

  • 🔌 CCXT支持的统一交换抽象

  • 🧪 自动化7测试套件

  • 🛡 干净的结构化错误处理

  • 🔗 支持包含/的符号(例如BTC/USDT)

  • 📘 自动Swagger文档

🐞 故障排除

问题 解释/修复
价格似乎过时了 缓存TTL仍处于活动状态(等待5秒)。
404交易对 币安上可能不存在符号。
测试失败 确保稳定的互联网(CCXT获取实时数据)。
服务器未启动 使用正确的模块路径: crypto_data_server:app
403禁止 X-API-Key标头丢失或不正确