# 统计功能API文档 ## 概述 统计功能API提供了完整的统计数据分析和管理功能,包括指标管理、实时统计、历史统计、仪表板管理、报告生成、数据导出等功能。 ## 基础信息 - **基础URL**: `/api/v1/statistics` - **认证方式**: Bearer Token - **内容类型**: `application/json` - **字符编码**: `UTF-8` ## 认证和权限 ### 认证方式 所有API请求都需要在请求头中包含有效的JWT令牌: ``` Authorization: Bearer ``` ### 权限级别 - **公开访问**: 无需认证的接口 - **用户权限**: 需要用户或管理员权限 - **管理员权限**: 仅管理员可访问 ## API接口 ### 1. 指标管理 #### 1.1 创建统计指标 - **URL**: `POST /api/v1/statistics/metrics` - **权限**: 管理员 - **描述**: 创建新的统计指标 **请求体**: ```json { "metric_type": "api_calls", "metric_name": "total_count", "dimension": "realtime", "value": 100.0, "metadata": "{\"source\": \"api_gateway\"}", "date": "2024-01-01T00:00:00Z" } ``` **响应**: ```json { "success": true, "message": "指标创建成功", "data": { "id": "uuid", "metric_type": "api_calls", "metric_name": "total_count", "dimension": "realtime", "value": 100.0, "metadata": "{\"source\": \"api_gateway\"}", "date": "2024-01-01T00:00:00Z", "created_at": "2024-01-01T00:00:00Z", "updated_at": "2024-01-01T00:00:00Z" } } ``` #### 1.2 更新统计指标 - **URL**: `PUT /api/v1/statistics/metrics` - **权限**: 管理员 - **描述**: 更新现有统计指标的值 **请求体**: ```json { "id": "uuid", "value": 150.0 } ``` #### 1.3 删除统计指标 - **URL**: `DELETE /api/v1/statistics/metrics` - **权限**: 管理员 - **描述**: 删除指定的统计指标 **请求体**: ```json { "id": "uuid" } ``` #### 1.4 获取单个指标 - **URL**: `GET /api/v1/statistics/metrics/{id}` - **权限**: 用户 - **描述**: 根据ID获取指定的统计指标 #### 1.5 获取指标列表 - **URL**: `GET /api/v1/statistics/metrics` - **权限**: 用户 - **描述**: 根据条件获取统计指标列表 **查询参数**: - `metric_type` (string): 指标类型 - `metric_name` (string): 指标名称 - `dimension` (string): 统计维度 - `start_date` (string): 开始日期 (YYYY-MM-DD) - `end_date` (string): 结束日期 (YYYY-MM-DD) - `limit` (int): 限制数量 (默认20, 最大1000) - `offset` (int): 偏移量 (默认0) - `sort_by` (string): 排序字段 (默认created_at) - `sort_order` (string): 排序顺序 (默认desc) ### 2. 实时统计 #### 2.1 获取实时指标 - **URL**: `GET /api/v1/statistics/realtime` - **权限**: 公开 - **描述**: 获取指定类型的实时统计指标 **查询参数**: - `metric_type` (string, 必需): 指标类型 - `time_range` (string): 时间范围 (last_hour, last_day, last_week) - `dimension` (string): 统计维度 **响应**: ```json { "success": true, "message": "获取实时指标成功", "data": { "metric_type": "api_calls", "metrics": { "total_count": 1000, "success_count": 950, "failed_count": 50, "success_rate": 95.0 }, "timestamp": "2024-01-01T12:00:00Z", "metadata": { "time_range": "last_hour", "dimension": "realtime" } } } ``` ### 3. 历史统计 #### 3.1 获取历史指标 - **URL**: `GET /api/v1/statistics/historical` - **权限**: 公开 - **描述**: 获取指定时间范围的历史统计指标 **查询参数**: - `metric_type` (string, 必需): 指标类型 - `metric_name` (string): 指标名称 - `dimension` (string): 统计维度 - `start_date` (string, 必需): 开始日期 (YYYY-MM-DD) - `end_date` (string, 必需): 结束日期 (YYYY-MM-DD) - `period` (string): 统计周期 - `limit` (int): 限制数量 (默认20) - `offset` (int): 偏移量 (默认0) - `aggregate_by` (string): 聚合维度 - `group_by` (string): 分组维度 **响应**: ```json { "success": true, "message": "获取历史指标成功", "data": { "metric_type": "api_calls", "metric_name": "total_count", "dimension": "daily", "data_points": [ { "date": "2024-01-01T00:00:00Z", "value": 1000, "label": "total_count" } ], "summary": { "total": 30000, "average": 1000, "max": 1500, "min": 500, "count": 30, "growth_rate": 5.2, "trend": "increasing" }, "metadata": { "period": "daily", "aggregate_by": "day", "group_by": "metric_name" } } } ``` ### 4. 仪表板管理 #### 4.1 创建仪表板 - **URL**: `POST /api/v1/statistics/dashboards` - **权限**: 管理员 - **描述**: 创建新的统计仪表板 **请求体**: ```json { "name": "用户仪表板", "description": "普通用户专用仪表板", "user_role": "user", "layout": "{\"columns\": 2, \"rows\": 3}", "widgets": "[{\"type\": \"api_calls\", \"position\": {\"x\": 0, \"y\": 0}}]", "settings": "{\"theme\": \"light\", \"auto_refresh\": false}", "refresh_interval": 600, "access_level": "private", "created_by": "user_id" } ``` #### 4.2 获取仪表板列表 - **URL**: `GET /api/v1/statistics/dashboards` - **权限**: 用户 - **描述**: 根据条件获取统计仪表板列表 **查询参数**: - `user_role` (string): 用户角色 - `is_default` (bool): 是否默认 - `is_active` (bool): 是否激活 - `access_level` (string): 访问级别 - `created_by` (string): 创建者ID - `name` (string): 仪表板名称 - `limit` (int): 限制数量 (默认20) - `offset` (int): 偏移量 (默认0) - `sort_by` (string): 排序字段 (默认created_at) - `sort_order` (string): 排序顺序 (默认desc) #### 4.3 获取单个仪表板 - **URL**: `GET /api/v1/statistics/dashboards/{id}` - **权限**: 用户 - **描述**: 根据ID获取指定的统计仪表板 #### 4.4 获取仪表板数据 - **URL**: `GET /api/v1/statistics/dashboards/data` - **权限**: 公开 - **描述**: 获取指定角色的仪表板数据 **查询参数**: - `user_role` (string, 必需): 用户角色 - `period` (string): 统计周期 (today, week, month) - `start_date` (string): 开始日期 (YYYY-MM-DD) - `end_date` (string): 结束日期 (YYYY-MM-DD) - `metric_types` (string): 指标类型列表 - `dimensions` (string): 统计维度列表 **响应**: ```json { "success": true, "message": "获取仪表板数据成功", "data": { "api_calls": { "total_count": 10000, "success_count": 9500, "failed_count": 500, "success_rate": 95.0, "avg_response_time": 150.5 }, "users": { "total_count": 1000, "certified_count": 800, "active_count": 750, "certification_rate": 80.0, "retention_rate": 75.0 }, "finance": { "total_amount": 50000.0, "recharge_amount": 60000.0, "deduct_amount": 10000.0, "net_amount": 50000.0 }, "period": { "start_date": "2024-01-01", "end_date": "2024-01-01", "period": "today" }, "metadata": { "generated_at": "2024-01-01 12:00:00", "user_role": "user", "data_version": "1.0" } } } ``` ### 5. 报告管理 #### 5.1 生成报告 - **URL**: `POST /api/v1/statistics/reports` - **权限**: 管理员 - **描述**: 生成指定类型的统计报告 **请求体**: ```json { "report_type": "summary", "title": "月度汇总报告", "period": "month", "user_role": "admin", "start_date": "2024-01-01T00:00:00Z", "end_date": "2024-01-31T23:59:59Z", "filters": { "metric_types": ["api_calls", "users"], "dimensions": ["daily", "weekly"] }, "generated_by": "admin_id" } ``` #### 5.2 获取报告列表 - **URL**: `GET /api/v1/statistics/reports` - **权限**: 用户 - **描述**: 根据条件获取统计报告列表 **查询参数**: - `report_type` (string): 报告类型 - `user_role` (string): 用户角色 - `status` (string): 报告状态 - `period` (string): 统计周期 - `start_date` (string): 开始日期 (YYYY-MM-DD) - `end_date` (string): 结束日期 (YYYY-MM-DD) - `limit` (int): 限制数量 (默认20) - `offset` (int): 偏移量 (默认0) - `sort_by` (string): 排序字段 (默认created_at) - `sort_order` (string): 排序顺序 (默认desc) - `generated_by` (string): 生成者ID #### 5.3 获取单个报告 - **URL**: `GET /api/v1/statistics/reports/{id}` - **权限**: 用户 - **描述**: 根据ID获取指定的统计报告 ### 6. 统计分析 #### 6.1 计算增长率 - **URL**: `GET /api/v1/statistics/analysis/growth-rate` - **权限**: 用户 - **描述**: 计算指定指标的增长率 **查询参数**: - `metric_type` (string, 必需): 指标类型 - `metric_name` (string, 必需): 指标名称 - `current_period` (string, 必需): 当前周期 (YYYY-MM-DD) - `previous_period` (string, 必需): 上一周期 (YYYY-MM-DD) **响应**: ```json { "success": true, "message": "计算增长率成功", "data": { "growth_rate": 15.5, "current_value": 1150, "previous_value": 1000, "period": "daily" } } ``` #### 6.2 计算趋势 - **URL**: `GET /api/v1/statistics/analysis/trend` - **权限**: 用户 - **描述**: 计算指定指标的趋势 **查询参数**: - `metric_type` (string, 必需): 指标类型 - `metric_name` (string, 必需): 指标名称 - `start_date` (string, 必需): 开始日期 (YYYY-MM-DD) - `end_date` (string, 必需): 结束日期 (YYYY-MM-DD) **响应**: ```json { "success": true, "message": "计算趋势成功", "data": { "trend": "increasing", "trend_strength": 0.8, "data_points": 30, "correlation": 0.75 } } ``` ### 7. 数据导出 #### 7.1 导出数据 - **URL**: `POST /api/v1/statistics/export` - **权限**: 管理员 - **描述**: 导出指定格式的统计数据 **请求体**: ```json { "format": "excel", "metric_type": "api_calls", "start_date": "2024-01-01T00:00:00Z", "end_date": "2024-01-31T23:59:59Z", "dimension": "daily", "group_by": "metric_name", "filters": { "status": "success" }, "columns": ["date", "metric_name", "value"], "include_charts": true, "exported_by": "admin_id" } ``` **响应**: ```json { "success": true, "message": "数据导出成功", "data": { "download_url": "https://api.example.com/downloads/export_123.xlsx", "file_name": "api_calls_export_20240101_20240131.xlsx", "file_size": 1024000, "expires_at": "2024-01-02T12:00:00Z" } } ``` ### 8. 定时任务管理 #### 8.1 手动触发小时聚合 - **URL**: `POST /api/v1/statistics/cron/hourly-aggregation` - **权限**: 管理员 - **描述**: 手动触发指定时间的小时级数据聚合 **查询参数**: - `target_hour` (string, 必需): 目标小时 (YYYY-MM-DDTHH:MM:SSZ) #### 8.2 手动触发日聚合 - **URL**: `POST /api/v1/statistics/cron/daily-aggregation` - **权限**: 管理员 - **描述**: 手动触发指定时间的日级数据聚合 **查询参数**: - `target_date` (string, 必需): 目标日期 (YYYY-MM-DD) #### 8.3 手动触发数据清理 - **URL**: `POST /api/v1/statistics/cron/data-cleanup` - **权限**: 管理员 - **描述**: 手动触发过期数据清理任务 ## 错误码 | 错误码 | HTTP状态码 | 描述 | |--------|------------|------| | 400 | 400 Bad Request | 请求参数错误 | | 401 | 401 Unauthorized | 未认证或认证失败 | | 403 | 403 Forbidden | 权限不足 | | 404 | 404 Not Found | 资源不存在 | | 422 | 422 Unprocessable Entity | 参数验证失败 | | 429 | 429 Too Many Requests | 请求频率过高 | | 500 | 500 Internal Server Error | 服务器内部错误 | ## 响应格式 ### 成功响应 ```json { "success": true, "message": "操作成功", "data": { // 响应数据 } } ``` ### 错误响应 ```json { "success": false, "message": "错误描述", "error": "详细错误信息" } ``` ### 列表响应 ```json { "success": true, "message": "查询成功", "data": [ // 数据列表 ], "pagination": { "page": 1, "page_size": 20, "total": 100, "pages": 5, "has_next": true, "has_prev": false } } ``` ## 数据模型 ### 统计指标 (StatisticsMetric) ```json { "id": "string", "metric_type": "string", "metric_name": "string", "dimension": "string", "value": "number", "metadata": "string", "date": "string", "created_at": "string", "updated_at": "string" } ``` ### 统计报告 (StatisticsReport) ```json { "id": "string", "report_type": "string", "title": "string", "content": "string", "period": "string", "user_role": "string", "status": "string", "generated_by": "string", "generated_at": "string", "expires_at": "string", "created_at": "string", "updated_at": "string" } ``` ### 统计仪表板 (StatisticsDashboard) ```json { "id": "string", "name": "string", "description": "string", "user_role": "string", "is_default": "boolean", "is_active": "boolean", "layout": "string", "widgets": "string", "settings": "string", "refresh_interval": "number", "created_by": "string", "access_level": "string", "created_at": "string", "updated_at": "string" } ``` ## 使用示例 ### 获取今日API调用统计 ```bash curl -X GET "https://api.example.com/api/v1/statistics/realtime?metric_type=api_calls&time_range=last_hour" \ -H "Authorization: Bearer your-jwt-token" ``` ### 获取历史用户数据 ```bash curl -X GET "https://api.example.com/api/v1/statistics/historical?metric_type=users&start_date=2024-01-01&end_date=2024-01-31" \ -H "Authorization: Bearer your-jwt-token" ``` ### 生成月度报告 ```bash curl -X POST "https://api.example.com/api/v1/statistics/reports" \ -H "Authorization: Bearer your-jwt-token" \ -H "Content-Type: application/json" \ -d '{ "report_type": "summary", "title": "月度汇总报告", "period": "month", "user_role": "admin", "generated_by": "admin_id" }' ``` ## 注意事项 1. **日期格式**: 所有日期参数都使用 `YYYY-MM-DD` 格式 2. **时间戳**: 所有时间戳都使用 ISO 8601 格式 3. **分页**: 默认每页20条记录,最大1000条 4. **限流**: API有请求频率限制,超出限制会返回429错误 5. **缓存**: 部分接口支持缓存,响应头会包含缓存信息 6. **权限**: 不同接口需要不同的权限级别,请确保有相应权限 7. **数据量**: 查询大量数据时建议使用分页和日期范围限制