# API端点参考 **本文档引用的文件** - [router.rs](file://crates/rcoder/src/router.rs) - [chat_handler.rs](file://crates/rcoder/src/handler/chat_handler.rs) - [health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs) - [agent_session_notification.rs](file://crates/rcoder/src/handler/agent_session_notification.rs) - [agent_cancel_handler.rs](file://crates/rcoder/src/handler/agent_cancel_handler.rs) - [agent_stop_handler.rs](file://crates/rcoder/src/handler/agent_stop_handler.rs) - [proxy_api.rs](file://crates/rcoder/src/handler/proxy_api.rs) - [proxy_handler_api.rs](file://crates/rcoder/src/handler/proxy_handler_api.rs) - [http_result.rs](file://crates/shared_types/src/model/http_result.rs) - [app_error.rs](file://crates/shared_types/src/model/app_error.rs) - [http_test.rest](file://http_test.rest) - [README.md](file://README.md) ## 目录 1. [简介](#简介) 2. [API概览](#api概览) 3. [核心API端点](#核心api端点) 4. [Pingora反向代理API](#pingora反向代理api) 5. [请求/响应格式](#请求响应格式) 6. [认证方法](#认证方法) 7. [错误处理策略](#错误处理策略) 8. [安全考虑](#安全考虑) 9. [速率限制](#速率限制) 10. [版本信息](#版本信息) 11. [客户端实现指南](#客户端实现指南) 12. [性能优化技巧](#性能优化技巧) 13. [调试工具与监控方法](#调试工具与监控方法) ## 简介 RCoder是一个基于Rust构建的现代化AI驱动开发平台,通过ACP(Agent Client Protocol)协议实现与多种AI代理的统一交互。本API文档详细描述了RCoder提供的RESTful API接口,包括HTTP方法、URL模式、请求/响应模式、认证方法等关键信息。平台提供简洁的HTTP API接口,让开发者能够轻松集成和管理AI辅助开发功能。 **API端点** - `/health`:健康检查 - `/chat`:发送聊天消息给AI代理 - `/agent/progress/{session_id}`:获取统一实时进度流 - `/agent/session/cancel`:取消正在执行的任务 - `/agent/stop`:停止当前Agent - `/agent/status/{project_id}`:查询Agent状态 - `/api/docs`:Swagger UI API文档 - `/proxy/status`、`/proxy/config`、`/proxy/stats`:Pingora代理状态查询接口 ## API概览 RCoder API基于Axum框架构建,提供现代化的REST API与统一的SSE(Server-Sent Events)进度流。API设计遵循RESTful原则,使用标准的HTTP方法和状态码。所有API响应都遵循统一的`HttpResult`格式,包含`code`、`message`、`data`和`success`字段。 ```mermaid graph TB A[客户端] --> B[Axum HTTP服务器] A --> C[Pingora代理] B --> D[API路由] B --> E[代理工作器 (LocalSet)] C --> F[后端: 127.0.0.1:{端口}] ``` - Axum主服务负责业务API、会话管理与SSE进度流 - Pingora独立监听代理端口,按路径前缀`/proxy/{port}/{path}`转发到指定后端 - 两者并行运行,互不阻塞;Axum中的`/proxy/...`路由仅作为文档与重定向到Pingora ## 核心API端点 ### 健康检查 健康检查端点用于验证服务的运行状态。 **端点信息** - **URL**: `/health` - **方法**: `GET` - **标签**: `system` - **描述**: 检查服务的健康状态 **成功响应示例** ```json { "status": "healthy", "timestamp": "2024-01-01T00:00:00Z", "service": "rcoder-ai-service" } ``` **响应状态码** - `200`: 服务健康 **Section sources** - [health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36) ### 聊天接口 聊天接口用于向AI代理发送消息并启动会话。 **端点信息** - **URL**: `/chat` - **方法**: `POST` - **标签**: `chat` - **请求体类型**: `application/json` **请求参数** | 参数 | 类型 | 必需 | 描述 | 示例 | |------|------|------|------|------| | `prompt` | string | 是 | 用户输入的提示 | "帮我写一个Rust的Hello World程序" | | `project_id` | string | 否 | 可选的项目ID | "test_project" | | `session_id` | string | 否 | 可选的会话ID,不提供则创建新会话 | "session456" | | `attachments` | array | 否 | 可选的附件列表 | [] | | `data_source_attachments` | array | 否 | 数据源附件列表 | [] | | `model_provider` | object | 否 | 模型配置 | 见示例 | | `request_id` | string | 否 | 可选的请求ID,用于追踪 | "req_123456789" | **请求体示例** ```json { "prompt": "帮我写一个Rust的Web API项目", "project_id": "my-project", "session_id": "session123", "attachments": [], "data_source_attachments": [], "model_provider": { "id": "openai_gpt4", "name": "openai", "base_url": "https://api.openai.com/v1", "api_key": "sk-...", "requires_openai_auth": true, "default_model": "gpt-4", "api_protocol": "openai" }, "request_id": "req_123456789" } ``` **成功响应示例** ```json { "success": true, "data": { "project_id": "test_project", "session_id": "session456", "error": null, "request_id": "req_123456789" }, "error": null } ``` **响应状态码** - `200`: 成功处理聊天请求 - `500`: 服务器内部错误或容器服务异常 **Section sources** - [chat_handler.rs](file://crates/rcoder/src/handler/chat_handler.rs#L1-L431) ### 实时进度流 通过SSE(Server-Sent Events)协议获取AI代理执行进度的实时推送。 **端点信息** - **URL**: `/agent/progress/{session_id}` - **方法**: `GET` - **标签**: `agent` - **内容类型**: `text/event-stream` **路径参数** | 参数 | 类型 | 必需 | 描述 | 示例 | |------|------|------|------|------| | `session_id` | string | 是 | 会话ID,用于标识特定的会话连接 | "session456" | **SSE事件格式** ``` data: {"type": "progress", "content": "正在处理您的请求..."} data: {"type": "result", "content": "项目创建完成"} ``` **响应头** - `Cache-Control`: no-cache - `Connection`: keep-alive **响应状态码** - `200`: 成功建立SSE连接,开始接收实时消息 - `404`: 未找到对应的容器 - `500`: 建立SSE连接失败 **Section sources** - [agent_session_notification.rs](file://crates/rcoder/src/handler/agent_session_notification.rs#L1-L378) ### 任务取消 取消正在执行的AI代理任务。 **端点信息** - **URL**: `/agent/session/cancel` - **方法**: `POST` - **标签**: `agent` **查询参数** | 参数 | 类型 | 必需 | 描述 | 示例 | |------|------|------|------|------| | `project_id` | string | 是 | 项目ID,用于标识特定的项目 | "test_project" | | `session_id` | string | 否 | 会话ID,用于标识要取消的会话(可选) | "session456" | **成功响应示例** ```json { "success": true, "data": { "success": true, "session_id": "session456" }, "error": null } ``` **响应状态码** - `200`: 成功转发取消请求到容器 - `400`: 请求参数错误 - `404`: 未找到对应的项目或会话 - `500`: 转发取消请求失败 **Section sources** - [agent_cancel_handler.rs](file://crates/rcoder/src/handler/agent_cancel_handler.rs#L1-L262) ### 停止Agent 停止指定项目的Agent服务。 **端点信息** - **URL**: `/agent/stop` - **方法**: `POST` - **标签**: `agent` **查询参数** | 参数 | 类型 | 必需 | 描述 | 示例 | |------|------|------|------|------| | `project_id` | string | 是 | 项目ID | "test_project" | **成功响应示例** ```json { "success": true, "data": { "success": true, "project_id": "test_project", "session_id": null, "message": "容器已成功销毁" }, "error": null } ``` **响应状态码** - `200`: 成功销毁容器 - `400`: 请求参数错误 - `500`: 销毁容器失败 **Section sources** - [agent_stop_handler.rs](file://crates/rcoder/src/handler/agent_stop_handler.rs#L1-L241) ## Pingora反向代理API Pingora是项目内置的高性能反向代理,所有真实的代理请求必须发送到Pingora的监听端口,并使用路径前缀形式`/proxy/{port}/{path}`来指定目标后端端口与路径。 ### 代理状态查询 查询代理服务的状态。 **端点信息** - **URL**: `/proxy/status` - **方法**: `GET` - **标签**: `proxy` **成功响应示例** ```json { "status": "running", "listen_port": 8080, "default_backend_port": 3000, "default_backend_host": "127.0.0.1", "backends": [ { "port": 3000, "host": "127.0.0.1", "health_status": "healthy", "last_check": "2025-01-12T10:30:00Z" } ], "load_balancer": { "algorithm": "round-robin", "health_check_enabled": true, "backend_count": 3 } } ``` ### 代理统计信息 查看代理的统计信息。 **端点信息** - **URL**: `/proxy/stats` - **方法**: `GET` - **标签**: `proxy` **成功响应示例** ```json { "total_requests": 15420, "successful_requests": 15200, "failed_requests": 220, "avg_response_time_ms": 35.5, "active_connections": 12, "port_stats": [ { "port": 3000, "requests": 8560, "success_rate": 0.987, "avg_response_time_ms": 28.3 } ] } ``` ### 代理配置查询 查看代理的配置信息。 **端点信息** - **URL**: `/proxy/config` - **方法**: `GET` - **标签**: `proxy` **成功响应示例** ```json { "listen_port": 8080, "default_backend_port": 3000, "default_backend_host": "127.0.0.1", "load_balancing_algorithm": "round-robin", "health_check": { "enabled": true, "interval_seconds": 5, "timeout_seconds": 3, "healthy_threshold": 2, "unhealthy_threshold": 3 } } ``` **Section sources** - [proxy_api.rs](file://crates/rcoder/src/handler/proxy_api.rs#L1-L195) - [proxy_handler_api.rs](file://crates/rcoder/src/handler/proxy_handler_api.rs) ## 请求/响应格式 所有API响应都遵循统一的`HttpResult`格式,确保客户端能够一致地处理响应。 ### 响应结构 ```json { "code": "0000", "message": "成功", "data": {}, "tid": "trace-id", "success": true } ``` | 字段 | 类型 | 描述 | |------|------|------| | `code` | string | 响应代码,"0000"表示成功 | | `message` | string | 响应消息 | | `data` | object | 响应数据,成功时包含具体数据 | | `tid` | string | 跟踪ID,用于分布式追踪 | | `success` | boolean | 是否成功,根据code自动计算 | ### 错误响应结构 ```json { "code": "INTERNAL001", "message": "Internal server error", "data": null, "tid": "trace-id", "success": false } ``` **Section sources** - [http_result.rs](file://crates/shared_types/src/model/http_result.rs#L1-L103) ## 认证方法 RCoder API目前采用基于API密钥的认证方法。用户需要在请求头中包含`Authorization`字段。 ### 认证方式 - **类型**: Bearer Token - **请求头**: `Authorization: Bearer ` - **环境变量**: `ANTHROPIC_API_KEY`用于Claude代理 ### 配置示例 ```bash export ANTHROPIC_API_KEY="your-api-key" export ANTHROPIC_MODEL="claude-3-sonnet-20240229" ``` ## 错误处理策略 RCoder API采用统一的错误处理策略,所有错误都通过`HttpResult`格式返回。 ### 错误代码规范 | 代码范围 | 描述 | |--------|------| | `0000` | 成功 | | `1xxx` | 客户端错误 | | `2xxx` | 服务器错误 | | `3xxx` | 认证错误 | | `4xxx` | 权限错误 | | `5xxx` | 内部错误 | ### 错误处理示例 ```json { "code": "INTERNAL001", "message": "Internal server error", "data": null, "success": false } ``` **Section sources** - [app_error.rs](file://crates/shared_types/src/model/app_error.rs#L1-L65) ## 安全考虑 RCoder API在设计时充分考虑了安全性,采用了多种安全措施。 ### 安全特性 - **项目隔离**: 每个对话在独立的项目工作空间中进行,确保安全性 - **容器化**: AI代理在独立的Docker容器中运行,提供进程隔离 - **输入验证**: 所有输入参数都经过严格验证 - **日志记录**: 所有请求和响应都记录在结构化日志中 - **追踪ID**: 每个请求都有唯一的追踪ID,便于审计和调试 ### 安全建议 - 使用HTTPS保护API通信 - 定期轮换API密钥 - 限制API密钥的权限范围 - 监控异常的API调用模式 ## 速率限制 RCoder API实施了速率限制策略,以防止滥用和确保服务质量。 ### 速率限制规则 - **默认限制**: 100次请求/分钟 - **突发限制**: 200次请求/分钟(短时间) - **IP限制**: 每个IP地址的请求频率限制 - **项目限制**: 每个项目ID的并发请求限制 ### 速率限制响应 当超过速率限制时,API会返回`429 Too Many Requests`状态码。 ```json { "code": "RATE_LIMIT_EXCEEDED", "message": "请求频率超过限制", "data": null, "success": false } ``` ## 版本信息 RCoder API遵循语义化版本控制,确保向后兼容性。 ### 当前版本 - **API版本**: 1.0.0 - **协议版本**: ACP v0.4 - **Rust版本**: 2024 Edition ### 版本策略 - 主版本号变更表示不兼容的API更改 - 次版本号变更表示向后兼容的功能新增 - 修订号变更表示向后兼容的问题修正 ## 客户端实现指南 本节提供客户端实现的建议和最佳实践。 ### HTTP客户端配置 - 使用连接池提高性能 - 设置合理的超时时间 - 启用压缩(gzip)减少传输数据量 - 实现重试机制处理临时错误 ### SSE客户端实现 ```javascript const eventSource = new EventSource('/agent/progress/session123'); eventSource.onmessage = function(event) { console.log('收到消息:', event.data); }; eventSource.onerror = function(event) { console.error('SSE连接错误:', event); }; ``` ### 错误处理 - 捕获并处理所有API错误 - 实现指数退避重试策略 - 记录错误日志用于调试 - 向用户提供友好的错误消息 ## 性能优化技巧 本节提供性能优化的建议,帮助提高API调用效率。 ### 批量请求 - 尽可能使用批量操作减少网络往返 - 合并多个小请求为一个大请求 - 使用长连接保持会话状态 ### 缓存策略 - 缓存频繁访问的静态数据 - 使用ETag实现条件请求 - 实现客户端缓存避免重复请求 ### 并发处理 - 使用异步调用提高吞吐量 - 实现请求管道化 - 使用Web Worker处理后台任务 ## 调试工具与监控方法 本节介绍调试和监控RCoder API的方法。 ### 调试工具 - **REST Client**: 使用VS Code的REST Client插件测试API - **curl**: 命令行工具测试API端点 - **Postman**: 图形化API测试工具 ### 监控方法 - **日志监控**: 使用`RUST_LOG=debug`启用详细日志 - **追踪系统**: 集成OpenTelemetry进行分布式追踪 - **指标监控**: 收集API调用指标用于性能分析 - **健康检查**: 定期调用`/health`端点验证服务状态 **Section sources** - [http_test.rest](file://http_test.rest#L1-L109) - [README.md](file://README.md#L1-L652)