Spaces:
Build error
Build error
| # 股票分析系统 API 使用指南 | |
| ## 概述 | |
| 本指南详细介绍如何使用股票分析系统的RESTful API接口,包括认证、请求格式、响应处理和错误处理等。 | |
| ## 快速开始 | |
| ### 1. 获取API密钥 | |
| 联系系统管理员获取API密钥,或使用默认测试密钥: | |
| ``` | |
| X-API-Key: UZXJfw3YNX80DLfN | |
| ``` | |
| ### 2. 基础请求格式 | |
| 所有API请求都需要包含以下头部: | |
| ```http | |
| Content-Type: application/json | |
| X-API-Key: your_api_key_here | |
| ``` | |
| ### 3. 基础URL | |
| ``` | |
| http://your-domain.com/api/v1 | |
| ``` | |
| ## 核心API端点 | |
| ### 1. 投资组合分析 | |
| **端点**: `POST /api/v1/portfolio/analyze` | |
| **功能**: 分析投资组合的整体表现和风险 | |
| **请求示例**: | |
| ```bash | |
| curl -X POST "http://localhost:8888/api/v1/portfolio/analyze" \ | |
| -H "Content-Type: application/json" \ | |
| -H "X-API-Key: UZXJfw3YNX80DLfN" \ | |
| -d '{ | |
| "stocks": [ | |
| { | |
| "stock_code": "000001.SZ", | |
| "weight": 0.4, | |
| "market_type": "A" | |
| }, | |
| { | |
| "stock_code": "600000.SH", | |
| "weight": 0.6, | |
| "market_type": "A" | |
| } | |
| ], | |
| "analysis_params": { | |
| "risk_preference": "moderate", | |
| "time_horizon": "medium" | |
| } | |
| }' | |
| ``` | |
| **响应示例**: | |
| ```json | |
| { | |
| "success": true, | |
| "data": { | |
| "portfolio_score": 75.5, | |
| "risk_level": "中等风险", | |
| "risk_analysis": { | |
| "volatility_risk": 65.2, | |
| "concentration_risk": 45.8, | |
| "correlation_risk": 55.3, | |
| "overall_risk_score": 55.4 | |
| }, | |
| "recommendations": [ | |
| "投资组合表现良好,可适当调整优化", | |
| "根据您的保守风险偏好,建议降低组合风险" | |
| ], | |
| "individual_stocks": [ | |
| { | |
| "stock_code": "000001.SZ", | |
| "stock_name": "平安银行", | |
| "score": 78.2, | |
| "weight": 0.4, | |
| "contribution": 31.28, | |
| "risk_level": "中等", | |
| "recommendation": "买入" | |
| } | |
| ] | |
| }, | |
| "meta": { | |
| "analysis_time": "2025-01-03T10:30:00Z", | |
| "processing_time_ms": 1250, | |
| "cache_hit": false | |
| } | |
| } | |
| ``` | |
| ### 2. 个股分析 | |
| **端点**: `POST /api/v1/stock/analyze` | |
| **功能**: 分析单只股票的详细信息 | |
| **请求示例**: | |
| ```bash | |
| curl -X POST "http://localhost:8888/api/v1/stock/analyze" \ | |
| -H "Content-Type: application/json" \ | |
| -H "X-API-Key: UZXJfw3YNX80DLfN" \ | |
| -d '{ | |
| "stock_code": "000001.SZ", | |
| "market_type": "A", | |
| "analysis_depth": "full", | |
| "include_ai_analysis": true | |
| }' | |
| ``` | |
| **响应示例**: | |
| ```json | |
| { | |
| "success": true, | |
| "data": { | |
| "stock_info": { | |
| "stock_code": "000001.SZ", | |
| "stock_name": "平安银行", | |
| "industry": "银行", | |
| "market_type": "A" | |
| }, | |
| "analysis_result": { | |
| "overall_score": 78.5, | |
| "technical_score": 75.2, | |
| "fundamental_score": 82.1, | |
| "capital_flow_score": 77.8 | |
| }, | |
| "technical_analysis": { | |
| "trend": "上升", | |
| "support_levels": [12.50, 12.20], | |
| "resistance_levels": [13.80, 14.20], | |
| "indicators": { | |
| "rsi": 65.2, | |
| "macd_signal": "买入", | |
| "ma_trend": "多头排列" | |
| } | |
| }, | |
| "fundamental_analysis": { | |
| "pe_ratio": 5.8, | |
| "pb_ratio": 0.65, | |
| "roe": 12.5, | |
| "debt_ratio": 45.2 | |
| }, | |
| "risk_assessment": { | |
| "risk_level": "中等", | |
| "volatility": 25.3, | |
| "total_risk_score": 45.2 | |
| }, | |
| "ai_analysis": { | |
| "summary": "该股票基本面良好,技术面呈现上升趋势...", | |
| "recommendation": "建议买入", | |
| "confidence": 0.85 | |
| } | |
| } | |
| } | |
| ``` | |
| ### 3. 批量股票评分 | |
| **端点**: `POST /api/v1/stocks/batch-score` | |
| **功能**: 批量分析多只股票的评分 | |
| **请求示例**: | |
| ```bash | |
| curl -X POST "http://localhost:8888/api/v1/stocks/batch-score" \ | |
| -H "Content-Type: application/json" \ | |
| -H "X-API-Key: UZXJfw3YNX80DLfN" \ | |
| -d '{ | |
| "stock_codes": ["000001.SZ", "600000.SH", "000002.SZ"], | |
| "market_type": "A", | |
| "min_score": 60, | |
| "sort_by": "score", | |
| "sort_order": "desc" | |
| }' | |
| ``` | |
| ### 4. 异步任务管理 | |
| **创建任务**: `POST /api/v1/tasks` | |
| ```bash | |
| curl -X POST "http://localhost:8888/api/v1/tasks" \ | |
| -H "Content-Type: application/json" \ | |
| -H "X-API-Key: UZXJfw3YNX80DLfN" \ | |
| -d '{ | |
| "task_type": "portfolio_analysis", | |
| "params": { | |
| "stocks": [{"stock_code": "000001.SZ", "weight": 1.0}] | |
| } | |
| }' | |
| ``` | |
| **查询任务状态**: `GET /api/v1/tasks/{task_id}` | |
| ```bash | |
| curl -X GET "http://localhost:8888/api/v1/tasks/your-task-id" \ | |
| -H "X-API-Key: UZXJfw3YNX80DLfN" | |
| ``` | |
| **获取任务结果**: `GET /api/v1/tasks/{task_id}/result` | |
| ```bash | |
| curl -X GET "http://localhost:8888/api/v1/tasks/your-task-id/result" \ | |
| -H "X-API-Key: UZXJfw3YNX80DLfN" | |
| ``` | |
| ## 认证机制 | |
| ### 1. API密钥认证(基础) | |
| 在请求头中包含API密钥: | |
| ```http | |
| X-API-Key: your_api_key_here | |
| ``` | |
| ### 2. HMAC签名认证(高安全级别) | |
| 对于敏感操作,使用HMAC签名: | |
| ```http | |
| X-API-Key: your_api_key_here | |
| X-HMAC-Signature: hmac_sha256_signature | |
| X-Timestamp: unix_timestamp | |
| ``` | |
| **HMAC签名生成示例(Python)**: | |
| ```python | |
| import hmac | |
| import hashlib | |
| import time | |
| import json | |
| def generate_hmac_signature(data, api_key, secret_key): | |
| timestamp = str(int(time.time())) | |
| # 构建签名数据 | |
| sign_data = {**data, 'timestamp': timestamp, 'api_key': api_key} | |
| sign_string = '&'.join(f"{k}={v}" for k, v in sorted(sign_data.items())) | |
| # 生成HMAC签名 | |
| signature = hmac.new( | |
| secret_key.encode(), | |
| sign_string.encode(), | |
| hashlib.sha256 | |
| ).hexdigest() | |
| return signature, timestamp | |
| ``` | |
| ## 错误处理 | |
| ### 标准错误响应格式 | |
| ```json | |
| { | |
| "success": false, | |
| "error": { | |
| "code": "ERROR_CODE", | |
| "message": "错误描述", | |
| "details": { | |
| "additional_info": "详细信息" | |
| } | |
| }, | |
| "meta": { | |
| "timestamp": "2025-01-03T10:30:00Z", | |
| "request_id": "req_123456789" | |
| } | |
| } | |
| ``` | |
| ### 常见错误代码 | |
| | 错误代码 | HTTP状态码 | 描述 | | |
| |---------|-----------|------| | |
| | `MISSING_API_KEY` | 401 | 缺少API密钥 | | |
| | `INVALID_API_KEY` | 403 | 无效的API密钥 | | |
| | `RATE_LIMIT_EXCEEDED` | 429 | 请求频率超限 | | |
| | `INVALID_STOCK_CODE` | 400 | 无效的股票代码 | | |
| | `PORTFOLIO_TOO_LARGE` | 400 | 投资组合过大 | | |
| | `ANALYSIS_FAILED` | 500 | 分析失败 | | |
| | `TASK_NOT_FOUND` | 404 | 任务不存在 | | |
| ## 限流策略 | |
| ### 基础限流 | |
| - **免费用户**: 100次/小时 | |
| - **付费用户**: 1000次/小时 | |
| - **企业用户**: 10000次/小时 | |
| ### 端点特定限流 | |
| - **个股分析**: 50次/小时 | |
| - **投资组合分析**: 20次/小时 | |
| - **批量评分**: 10次/小时 | |
| ### 限流响应头 | |
| ```http | |
| X-RateLimit-Limit: 100 | |
| X-RateLimit-Remaining: 95 | |
| X-RateLimit-Reset: 1641024000 | |
| ``` | |
| ## 最佳实践 | |
| ### 1. 错误重试 | |
| ```python | |
| import time | |
| import requests | |
| def api_request_with_retry(url, data, max_retries=3): | |
| for attempt in range(max_retries): | |
| try: | |
| response = requests.post(url, json=data, headers=headers) | |
| if response.status_code == 429: # 限流 | |
| retry_after = int(response.headers.get('Retry-After', 60)) | |
| time.sleep(retry_after) | |
| continue | |
| return response | |
| except requests.RequestException as e: | |
| if attempt == max_retries - 1: | |
| raise | |
| time.sleep(2 ** attempt) # 指数退避 | |
| ``` | |
| ### 2. 批量处理 | |
| ```python | |
| def batch_analyze_stocks(stock_codes, batch_size=10): | |
| results = [] | |
| for i in range(0, len(stock_codes), batch_size): | |
| batch = stock_codes[i:i + batch_size] | |
| response = requests.post( | |
| f"{base_url}/api/v1/stocks/batch-score", | |
| json={"stock_codes": batch}, | |
| headers=headers | |
| ) | |
| if response.status_code == 200: | |
| batch_results = response.json()['data']['results'] | |
| results.extend(batch_results) | |
| time.sleep(1) # 避免触发限流 | |
| return results | |
| ``` | |
| ### 3. 缓存利用 | |
| ```python | |
| import hashlib | |
| import json | |
| def get_cache_key(request_data): | |
| data_str = json.dumps(request_data, sort_keys=True) | |
| return hashlib.md5(data_str.encode()).hexdigest() | |
| def cached_api_request(url, data, cache_ttl=300): | |
| cache_key = get_cache_key(data) | |
| # 检查缓存 | |
| cached_result = cache.get(cache_key) | |
| if cached_result: | |
| return cached_result | |
| # 发送请求 | |
| response = requests.post(url, json=data, headers=headers) | |
| result = response.json() | |
| # 存储到缓存 | |
| if response.status_code == 200: | |
| cache.set(cache_key, result, ttl=cache_ttl) | |
| return result | |
| ``` | |
| ## 健康检查 | |
| **端点**: `GET /api/v1/health` | |
| 检查API服务状态: | |
| ```bash | |
| curl -X GET "http://localhost:8888/api/v1/health" \ | |
| -H "X-API-Key: UZXJfw3YNX80DLfN" | |
| ``` | |
| ## 支持与反馈 | |
| 如有问题或建议,请联系: | |
| - 邮箱: support@example.com | |
| - 文档: `/api/docs` (Swagger UI) | |
| - 健康检查: `/api/v1/health` | |