# Claude Relay Service API 完整文档 (v2.0) ## 概述 Claude Relay Service 是一个高性能的 Claude API 转发服务,提供用户管理、API Key 管理、积分系统等功能。采用统一的AdminController架构,提供完整的管理功能。 ## 架构特点 - **统一管理控制器**: 所有管理API现在使用统一的 `AdminController` 实例 - **模块化设计**: 按功能分组的清晰架构(用户套餐、API Key、缓存、系统管理) - **响应格式优化**: 统一的成功/错误响应格式 - **高性能转发**: 三级缓存机制,支持流式和非流式请求 ## 认证方式 - **Claude API Routes**: 使用 FastAPIKeyAuth 中间件进行 API Key 认证 - Header: `Authorization: Bearer {api_key}` - **Management API Routes**: 使用 AdminAPIAuth 中间件进行管理员 API Key 认证 - Header: `Authorization: Bearer {admin_api_key}` - **Health Routes**: 无需认证 ## 通用响应格式 所有管理API接口遵循统一的响应格式: **成功响应**: ```json { "success": true, "data": {} } ``` **分页响应**: ```json { "success": true, "data": [], "pagination": { "page": 1, "limit": 20, "total": 100 } } ``` **错误响应**: ```json { "success": false, "message": "错误信息" } ``` --- ## 1. Claude API 标准路由组 `/v1` ### 1.1 发送消息 - **路径**: `POST /v1/messages` - **描述**: Claude API 核心转发接口,与官方 API 完全兼容 - **认证**: 需要 API Key - **控制器**: `controller.RelayMessages` **请求参数**: ```json { "model": "claude-3-sonnet-20240229", "max_tokens": 1024, "messages": [ { "role": "user", "content": "Hello, Claude!" } ], "stream": false, "temperature": 0.7 } ``` **响应格式** (非流式): ```json { "id": "msg_01234567890abcdef", "type": "message", "role": "assistant", "content": [ { "type": "text", "text": "Hello! How can I help you today?" } ], "model": "claude-3-sonnet-20240229", "stop_reason": "end_turn", "stop_sequence": null, "usage": { "input_tokens": 12, "output_tokens": 25 } } ``` **错误响应**: ```json { "error": { "type": "authentication_error|invalid_request_error|api_error", "message": "错误描述信息" } } ``` ### 1.2 获取模型列表 - **路径**: `GET /v1/models` - **描述**: 获取可用的 Claude 模型列表 - **认证**: 需要 API Key - **控制器**: `controller.GetModels` **响应格式**: ```json { "success": true, "data": { "object": "list", "data": [ { "id": "claude-3-sonnet-20240229", "object": "model", "created": 1677610602, "owned_by": "anthropic" }, { "id": "claude-3-opus-20240229", "object": "model", "created": 1677610602, "owned_by": "anthropic" }, { "id": "claude-3-haiku-20240307", "object": "model", "created": 1677610602, "owned_by": "anthropic" } ] } } ``` --- ## 2. 管理API路由组 `/api` (AdminController) 所有管理API现在使用统一的AdminController,提供更好的代码组织和维护性。 ### 2.1 🔑 用户套餐管理 #### 2.1.1 创建或更新用户套餐 - **路径**: `PUT /api/users/{userId}/plan` - **描述**: 为指定用户创建或更新套餐信息 - **认证**: 需要管理员 API Key - **控制器**: `AdminController.CreateOrUpdateUserPlan` **请求参数**: ```json { "plan_name": "高级套餐", "credit_limit": 100000, "credit_recovery": 1000, "duration_days": 30 } ``` **字段说明**: - `plan_name` (string, required): 套餐名称,1-100字符 - `credit_limit` (int64, required): 积分上限,不能为负 - `credit_recovery` (int64, optional): 每日积分恢复数量,不能为负 - `duration_days` (int, required): 有效期天数,1-3650天 **响应格式**: ```json { "success": true, "data": { "user_id": 123, "plan_name": "高级套餐", "credit_limit": 100000, "used_credits": 0, "available_credits": 100000, "credit_recovery": 1000, "start_date": "2024-01-01T00:00:00Z", "end_date": "2024-01-31T00:00:00Z", "status": "active", "operation": "created" } } ``` #### 2.1.2 查询用户套餐信息 - **路径**: `GET /api/users/{userId}/plan` - **描述**: 获取指定用户的套餐详细信息 - **认证**: 需要管理员 API Key - **控制器**: `AdminController.GetUserPlan` **响应格式**: ```json { "success": true, "data": { "user_id": 123, "plan_name": "高级套餐", "credit_limit": 100000, "used_credits": 15000, "available_credits": 85000, "credit_recovery": 1000, "last_recharge_at": "2025-08-07T09:00:01Z", "status": "active", "start_date": "2024-01-01T00:00:00Z", "end_date": "2024-01-31T00:00:00Z", "recovery_enabled": true } } ``` #### 2.1.3 调整用户积分 - **路径**: `POST /api/users/{userId}/credits/adjust` - **描述**: 调整指定用户的积分余额 - **认证**: 需要管理员 API Key - **控制器**: `AdminController.AdjustUserCredits` **请求参数**: ```json { "amount": 5000, "description": "充值", "type": "refund" } ``` **字段说明**: - `amount` (int64, required): 调整金额,正数为充值,负数为扣减 - `description` (string, required): 调整描述,1-500字符 - `type` (string, required): 调整类型,可选值:consume(消费), refund(退款), adjustment(调整) **响应格式**: ```json { "success": true, "data": { "user_id": 123, "adjustment_amount": 5000, "new_balance": 90000, "type": "refund", "description": "充值" } } ``` ### 2.2 🔐 API Key 管理 #### 2.2.1 为用户创建 API Key - **路径**: `POST /api/users/{userId}/keys` - **描述**: 为指定用户生成新的 API Key - **认证**: 需要管理员 API Key - **控制器**: `AdminController.CreateAPIKey` **请求参数**: ```json { "name": "My API Key", "expires_days": 30 } ``` **字段说明**: - `name` (string, required): API Key名称,1-100字符 - `expires_days` (int, optional): 过期天数,1-3650天,不提供则永不过期 **响应格式**: ```json { "success": true, "data": { "id": 456, "user_id": 123, "name": "My API Key", "key_value": "sk-ant-sid01-abc123...", "prefix": "sk-ant-sid01", "status": "active", "expires_at": "2024-01-31T00:00:00Z", "created_at": "2024-01-01T00:00:00Z" } } ``` **重要**: `key_value` 字段只在创建时返回一次,请妥善保存 #### 2.2.2 查询用户 API Keys - **路径**: `GET /api/users/{userId}/keys` - **描述**: 获取指定用户的所有 API Key 列表 - **认证**: 需要管理员 API Key - **控制器**: `AdminController.GetUserAPIKeys` **响应格式**: ```json { "success": true, "data": [ { "id": 456, "name": "My API Key", "prefix": "sk-ant-sid01", "status": "active", "last_used_at": "2024-01-15T10:30:00Z", "last_used_ip": "192.168.1.100", "expires_at": "2024-01-31T00:00:00Z", "created_at": "2024-01-01T00:00:00Z" } ] } ``` **注意**: 出于安全考虑,不返回完整的 `key_value` #### 2.2.3 更新 API Key 状态 - **路径**: `PUT /api/keys/{keyId}/status` - **描述**: 更新指定 API Key 的状态(启用/禁用) - **认证**: 需要管理员 API Key - **控制器**: `AdminController.UpdateAPIKeyStatus` **请求参数**: ```json { "status": "active" } ``` **字段说明**: - `status` (string, required): 状态,可选值:active(活跃), inactive(禁用), revoked(已撤销) **响应格式**: ```json { "success": true, "data": { "key_id": 456, "new_status": "active", "updated_at": "2024-01-15T10:30:00Z" } } ``` #### 2.2.4 删除 API Key - **路径**: `DELETE /api/keys/{keyId}` - **描述**: 删除指定的 API Key - **认证**: 需要管理员 API Key - **控制器**: `AdminController.DeleteAPIKey` **响应格式**: ```json { "success": true, "data": { "key_id": 456, "deleted": true, "deleted_at": "2024-01-15T10:30:00Z" } } ``` ### 2.3 📊 积分历史和统计 #### 2.3.1 用户积分明细 - **路径**: `GET /api/users/{userId}/credits/history` - **描述**: 获取指定用户的积分使用历史记录 - **认证**: 需要管理员 API Key - **控制器**: `AdminController.GetCreditsHistory` **查询参数**: - `page` (int, optional): 页码,默认1 - `limit` (int, optional): 每页数量,默认20,最大100 - `type` (string, optional): 积分类型过滤 **响应格式**: ```json { "success": true, "data": [ { "id": 789, "type": "consume", "amount": -150, "balance_after": 84850, "description": "API调用 - claude-3-sonnet-20240229", "reference_type": "api_usage", "reference_id": "101", "created_at": "2024-01-15T10:30:00Z" } ], "pagination": { "page": 1, "limit": 20, "total": 50 } } ``` #### 2.3.2 用户使用统计 - **路径**: `GET /api/users/{userId}/usage/stats` - **描述**: 获取指定用户的API使用统计信息 - **认证**: 需要管理员 API Key - **控制器**: `AdminController.GetUsageStats` **查询参数**: - `days` (int, optional): 统计天数,默认30,最大365 **响应格式**: ```json { "success": true, "data": { "total_requests": 150, "total_tokens": 75000, "total_credits_cost": 15000, "average_request_time": 850, "model_usage": { "claude-3-sonnet-20240229": 100, "claude-3-haiku-20240307": 50 }, "daily_stats": [ { "date": "2024-01-15", "requests": 25, "tokens": 12500, "credits_cost": 2500 } ] } } ``` ### 2.4 📈 新增:仪表盘/余额/图表联动接口 #### 2.4.1 仪表盘聚合 - **路径**: `GET /api/users/{userId}/dashboard` - **描述**: 返回“当前订阅/余额卡片 + 今日汇总 + 今日请求列表” - **认证**: 需要管理员 API Key - **控制器**: `AdminController.GetUserDashboard` **响应示例**: ```json { "success": true, "data": { "subscription": { "user_id": 123, "plan_name": "基础月付", "credit_limit": 5400, "used_credits": 2160, "available_credits": 3240, "credit_recovery_per_hour": 100, "status": "active", "start_date": "2025-08-01T00:00:00Z", "end_date": "2025-09-10T00:00:00Z", "recovery_enabled": true, "last_recharge_at": "2025-08-07T09:00:01Z" }, "today_summary": { "requests": 300, "credits_consumed": 4040, "credits_recharged": 800, "since": "2025-08-07T00:00:00+08:00", "until": "2025-08-07T16:30:00+08:00" }, "today_requests": [ { "id": 10001, "time": "2025-08-07T16:00:00+08:00", "model": "claude-sonnet-4-20250514", "credits_cost": 10, "status": "success", "api_key_id": 555 } ] } } ``` **说明**: - 今日按自然日统计(`created_at >= CURDATE()`) - `last_recharge_at` 来自 `user_credits` 最近 `amount>0` 记录 #### 2.4.2 余额卡片 - **路径**: `GET /api/users/{userId}/balance` - **描述**: 单独返回余额卡片数据 - **认证**: 需要管理员 API Key - **控制器**: `AdminController.GetUserBalance` **响应示例**: ```json { "success": true, "data": { "user_id": 123, "plan_name": "基础月付", "credit_limit": 5400, "used_credits": 2160, "available_credits": 3240, "credit_recovery_per_hour": 100, "status": "active", "start_date": "2025-08-01T00:00:00Z", "end_date": "2025-09-10T00:00:00Z", "last_recharge_at": "2025-08-07T09:00:01Z" } } ``` #### 2.4.3 图表 + 明细联动(每小时聚合) - **路径**: `GET /api/users/{userId}/credits/analytics` - **描述**: 在时间区间内返回每小时的“使用/补充/净变化”以及同一区间的积分明细(分页) - **认证**: 需要管理员 API Key - **控制器**: `AdminController.GetCreditsAnalytics` **查询参数**: - `start` (string, required): `YYYY-MM-DD HH:MM:SS`,例如 `2025-08-08 12:00:00` - `end` (string, required): `YYYY-MM-DD HH:MM:SS`,需大于 `start` - `tz` (string, optional): 时区,默认 `Asia/Shanghai` - `page` (int, optional): 明细页码,默认 1 - `limit` (int, optional): 明细每页数量,默认 20,最大 100 - `order` (string, optional): `asc|desc`,默认 `desc` - `type` (string, optional): 明细类型过滤,`consume|purchase|recovery|refund|reward|adjustment|all`,默认 `all` **成功返回**: ```json { "success": true, "data": { "meta": { "start": "2025-08-08T12:00:00+08:00", "end": "2025-08-09T11:00:00+08:00", "interval": "hour", "timezone": "Asia/Shanghai", "bucket_count": 23 }, "summary": { "consumed": 1720, "recharged": 1820, "net_change": 100 }, "series": [ { "ts": "2025-08-08T12:00:00+08:00", "consumed": 12, "recharged": 0, "net_change": -12 } ], "history": { "page": 1, "limit": 20, "total": 73, "records": [ { "id": 98765, "time": "2025-08-08T13:12:39+08:00", "type": "consume", "amount": -2, "balance_after": 5398, "description": "使用了2积分 - Model: claude-sonnet-4-20250514 ...", "reference_type": "api_usage", "reference_id": 555 } ] } } } ``` **图表口径**: - 区间 `[start, end)`,按 `tz` 对齐到整点;每小时一个桶,空桶补 0 - `consumed = SUM(-amount WHERE amount < 0)` - `recharged = SUM(amount WHERE amount > 0)` - `net_change = recharged - consumed` **明细口径**: - 过滤:`user_id = ? AND created_at >= start AND created_at < end` - `type != all` 时,对明细增加 `WHERE type = ?`(不影响图表) - 排序/分页:`order` + `page/limit` **错误码与边界**: - 400:缺少 `start/end`、时间格式错误、`end <= start`、跨度超过 90 天 - 200 且 `series` 全 0:区间内无记录 - 200 且 `history.total = 0`:区间无明细 **性能与缓存**: - 图表聚合启用 Redis 缓存:`analytics:{userId}:{start_unix}:{end_unix}:{tz}`,TTL 60s - 明细不缓存(受分页与类型影响),依赖索引 `(user_id, created_at)` --- ### 2.4 🔄 批量查询接口 #### 2.4.1 批量查询用户状态 - **路径**: `POST /api/users/batch-status` - **描述**: 批量查询多个用户的状态信息,专为Java系统优化 - **认证**: 需要管理员 API Key - **控制器**: `AdminController.BatchUserStatus` **请求参数**: ```json { "user_ids": [123, 456, 789] } ``` **字段说明**: - `user_ids` (array[int64], required): 用户ID列表,最多100个 **响应格式**: ```json { "success": true, "data": [ { "user_id": 123, "plan_status": "active", "credit_limit": 100000, "used_credits": 15000, "available_credits": 85000, "api_keys_count": 2, "last_activity": "2024-01-15T10:30:00Z" } ] } ``` ### 2.5 🔥 缓存管理接口 #### 2.5.1 用户缓存失效 - **路径**: `POST /api/cache/invalidate/user/{userId}` - **描述**: 使指定用户的缓存失效,Java系统调用 - **认证**: 需要管理员 API Key - **控制器**: `AdminController.InvalidateUserCache` **响应格式**: ```json { "success": true, "data": { "user_id": 123, "cleared": ["auth_cache", "credit_cache"], "message": "用户缓存清理成功" } } ``` #### 2.5.2 API Key缓存失效 - **路径**: `POST /api/cache/invalidate/apikey` - **描述**: 使API Key相关缓存失效 - **认证**: 需要管理员 API Key - **控制器**: `AdminController.InvalidateAPIKeyCache` **请求参数**: ```json { "api_key": "sk-ant-sid01-abc123..." } ``` **字段说明**: - `api_key` (string, required): 需要清理缓存的API Key,32-128字符 **响应格式**: ```json { "success": true, "data": { "api_key_prefix": "sk-ant-sid01-abc1...", "message": "API Key缓存清理成功" } } ``` #### 2.5.3 缓存统计信息 - **路径**: `GET /api/cache/stats` - **描述**: 获取系统缓存的统计信息 - **认证**: 需要管理员 API Key - **控制器**: `AdminController.GetCacheStats` **响应格式**: ```json { "success": true, "data": { "cache_type": "multi_level", "l1_cache": "memory_auth_cache", "l2_cache": "redis_credit_cache", "features": [ "redis_pubsub_invalidation", "auto_expiration", "cache_penetration_protection" ] } } ``` ### 2.6 🖥️ 系统管理接口 #### 2.6.1 积分恢复状态 - **路径**: `GET /api/system/recovery/status` - **描述**: 查询系统积分恢复的状态信息(内部调用) - **认证**: 需要管理员 API Key - **控制器**: `AdminController.GetSystemRecoveryStatus` **响应格式**: ```json { "success": true, "data": { "pending_recovery_users": 10, "last_recovery_at": "2024-01-15T00:00:00Z", "next_recovery_at": "2024-01-16T00:00:00Z", "system_status": "healthy" } } ``` #### 2.6.2 手动触发积分恢复 🆕 - **路径**: `POST /api/system/recovery/trigger` - **描述**: 手动触发积分恢复任务(管理员接口) - **认证**: 需要管理员 API Key - **控制器**: `AdminController.TriggerCreditRecovery` **响应格式**: ```json { "success": true, "data": { "message": "积分恢复执行成功", "recovered_users": 5, "trigger_by": "admin" } } ``` **功能说明**: - 立即执行积分恢复任务,无需等待定时任务 - 返回实际恢复的用户数量 - 适用于紧急情况或测试场景 --- ## 3. 健康检查路由 ### 3.1 健康检查 - **路径**: `GET /health` - **描述**: 系统健康检查端点,用于监控服务状态 - **认证**: 无需认证 - **控制器**: `controller.Health` **响应格式**: ```json { "success": true, "message": "服务正常运行", "data": { "status": "healthy", "timestamp": "2024-01-15 10:30:00" } } ``` --- ## 错误码说明 ### HTTP状态码 - `200` - 请求成功 - `400` - 请求参数错误 - `401` - 认证失败 - `403` - 权限不足 - `404` - 资源不存在 - `500` - 服务器内部错误 ### 业务错误类型 - `authentication_error` - 认证错误 - `invalid_request_error` - 请求参数错误 - `api_error` - API调用错误 - `insufficient_credits` - 积分不足 --- ## 中间件说明 1. **PanicRecover**: Panic恢复中间件,确保服务稳定性 2. **CORS**: 跨域资源共享中间件 3. **RequestLogger**: 请求日志记录中间件 4. **ErrorHandler**: 统一错误处理中间件 5. **FastAPIKeyAuth**: 高性能API Key认证(用于Claude API路由) 6. **AdminAPIAuth**: 管理员API Key认证(用于管理API路由) --- ## 技术栈与特性 ### 核心技术 - **框架**: GoFrame (gf/v2) - **路由**: ghttp.Server - **架构**: 分层架构(Controller-Service-DAO) - **缓存**: Redis + 内存双级缓存 - **数据库**: MySQL/PostgreSQL ### 主要特性 - **高性能转发**: 三级缓存机制,毫秒级响应 - **积分管理系统**: 自动积分恢复,精确计费 - **统一管理架构**: AdminController统一管理所有管理功能 - **安全认证**: 双重API Key认证机制 - **实时监控**: 完整的使用统计和健康检查 - **批量操作**: 优化的批量查询接口 ### 性能优化 - **缓存策略**: 多级缓存避免数据库压力 - **异步处理**: 计费和统计异步处理 - **连接池**: 数据库连接池优化 - **流式支持**: 支持Claude API流式响应 --- ## 更新日志 ### v2.0 主要更新 1. **统一控制器架构**: 采用AdminController统一管理所有管理API 2. **新增接口**: 手动触发积分恢复功能 (`POST /api/system/recovery/trigger`) 3. **响应格式优化**: 统一的分页和错误响应格式 4. **代码结构重构**: 更清晰的模块化设计和注释 5. **功能增强**: 积分恢复系统初始化优化