# API 接口文档 - 数据缓存模块 ## 基础信息 - **Base URL**: `http://localhost:3007/api` - **Content-Type**: `application/json` --- ## 数据缓存接口 ### 1. 批量缓存所有合约 批量获取所有合约的详情和K线数据,并持久化存储到数据库。 ```http POST /market/cache-all ``` **请求参数**: 无 **响应示例**: ```json { "success": true, "message": "批量缓存完成,成功: 25/30", "data": { "total": 30, "success": 25, "failed": 5, "details": [ { "code": "AU", "status": "success" }, { "code": "CU", "status": "success" }, { "code": "XX", "status": "error", "error": "合约不存在" } ], "klineCached": 50 } } ``` **说明**: - 自动获取市场概览中的所有合约 - 逐个缓存合约详情到 MySQL 和 Redis - 缓存前10个热门合约的1H和1D周期K线数据 - 每10个合约延迟100ms避免请求过快 --- ### 2. 缓存指定合约 针对单个合约进行强制刷新缓存。 ```http POST /market/cache/:symbol ``` **路径参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | symbol | string | 是 | 合约代码,如 AU、CU、RB | **请求体**: ```json { "periods": ["1H", "4H", "1D"] } ``` **请求体参数**: | 参数 | 类型 | 必填 | 默认值 | 说明 | |------|------|------|--------|------| | periods | string[] | 否 | ["1H", "4H", "1D"] | 要缓存的K线周期 | **响应示例**: ```json { "success": true, "message": "合约 AU 缓存成功", "data": { "symbol": "AU", "detail": true, "klines": [ { "period": "1H", "success": true }, { "period": "4H", "success": true }, { "period": "1D", "success": false, "error": "数据获取失败" } ] } } ``` **说明**: - 会先清除该合约的现有缓存(强制刷新) - 缓存合约详情和指定周期的K线数据 - 各周期K线缓存相互独立,单个失败不影响其他 --- ### 3. 获取缓存统计 获取数据库中的缓存统计信息。 ```http GET /market/cache-stats ``` **响应示例**: ```json { "success": true, "data": { "total": 150, "byType": { "detail": 50, "kline:1H": 30, "kline:1D": 30, "kline:4H": 20, "overview": 1, "alerts": 1 } } } ``` --- ### 4. 获取市场概览 获取所有期货合约的市场概览数据。 ```http GET /market/overview ``` **响应示例**: ```json { "success": true, "data": [ { "code": "AU", "name": "黄金", "currentPrice": 485.32, "changePercent": 1.25, "winRate": 65, "atr": 2.34, "adx": 35, "trends": { "5MIN": { "direction": "看多", "status": "多头趋势", "rsi": 58 }, "1DAY": { "direction": "看多", "status": "多头趋势", "rsi": 62 } } } ] } ``` **缓存策略**: - Redis: 5分钟 - MySQL: 永久 --- ### 5. 获取品种详情 获取指定合约的详细信息。 ```http GET /market/detail/:symbol ``` **路径参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | symbol | string | 是 | 合约代码 | **响应示例**: ```json { "success": true, "data": { "code": "AU", "name": "黄金", "currentPrice": 485.32, "changePercent": 1.25, "winRate": 65, "indicators": { "macd": "金叉向上", "rsi": "58(中性)" }, "tradingAdvice": { "entry": 485.0, "stopLoss": 475.0, "target": 500.0 } } } ``` **缓存策略**: - Redis: 5分钟 - MySQL: 永久 --- ### 6. 获取K线数据 获取指定合约的K线数据。 ```http GET /market/klines/:symbol?period=1D ``` **路径参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | symbol | string | 是 | 合约代码 | **查询参数**: | 参数 | 类型 | 必填 | 默认值 | 说明 | |------|------|------|--------|------| | period | string | 否 | "1H" | K线周期: 1M, 5M, 15M, 30M, 1H, 4H, 1D, 1W | **响应示例**: ```json { "success": true, "data": [ { "timestamp": 1704067200, "open": 480.5, "high": 485.2, "low": 479.8, "close": 485.0, "volume": 15234 } ] } ``` **缓存策略**: - Redis: 10分钟 - MySQL: 永久 --- ## 错误处理 ### 错误响应格式 ```json { "success": false, "message": "错误描述信息" } ``` ### 常见错误码 | HTTP 状态码 | 说明 | 场景 | |------------|------|------| | 200 | 成功 | 请求处理成功 | | 500 | 服务器内部错误 | 数据源连接失败、数据库错误 | | 404 | 未找到 | 合约不存在 | ### 常见错误消息 | 错误消息 | 说明 | 解决方案 | |---------|------|---------| | 无可用数据源 | 未配置或启用数据源 | 在 AdminConfig 中启用至少一个数据源 | | 合约不存在 | 指定的合约代码无效 | 检查合约代码是否正确 | | 获取市场概览失败 | 数据源连接问题 | 检查数据源配置和网络连接 | | 批量缓存失败 | 批量处理过程中出错 | 查看服务器日志获取详细错误 | --- ## 调用示例 ### JavaScript/Fetch ```javascript // 批量缓存所有合约 const cacheAllContracts = async () => { const response = await fetch('http://localhost:3007/api/market/cache-all', { method: 'POST', headers: { 'Content-Type': 'application/json' } }); return await response.json(); }; // 缓存指定合约 const cacheSymbol = async (symbol) => { const response = await fetch(`http://localhost:3007/api/market/cache/${symbol}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ periods: ['1H', '4H', '1D'] }) }); return await response.json(); }; // 获取缓存统计 const getCacheStats = async () => { const response = await fetch('http://localhost:3007/api/market/cache-stats'); return await response.json(); }; ``` --- ## 数据类型定义 ### ContractDetail ```typescript interface ContractDetail { code: string; // 合约代码 name: string; // 合约名称 currentPrice: number; // 当前价格 changePercent: number; // 涨跌幅百分比 winRate: number; // 胜率 atr: number; // 平均真实波幅 adx: number; // ADX指标值 trends: { // 各周期趋势 [period: string]: { direction: string; // 方向:看多/看空/观望 status: string; // 状态:多头趋势/空头趋势/震荡 rsi: number; // RSI值 } }; indicators: { // 技术指标 macd: string; rsi: string; bollinger: string; kdj: string; }; tradingAdvice: { // 交易建议 entry: number; // 入场价 stopLoss: number; // 止损价 target: number; // 目标价 resistance: number; // 阻力位 support: number; // 支撑位 }; } ``` ### KlineData ```typescript interface KlineData { timestamp: number; // 时间戳(秒) open: number; // 开盘价 high: number; // 最高价 low: number; // 最低价 close: number; // 收盘价 volume: number; // 成交量 } ``` ### CacheStats ```typescript interface CacheStats { total: number; // 缓存总数 byType: Record; // 按类型统计 } ``` --- **文档版本**: 1.0 **最后更新**: 2026-03-02