使用说明
💰 加密货币市场数据协议(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标头丢失或不正确 |