API集成与接口设计
**本文引用的文件** - [[[[bi-common/api/auth/v1/auth.proto]]]](../ai/file/bi-common/api/auth/v1/auth.proto) - [[[[bi-common/auth/middleware.go]]]](../ai/file/bi-common/auth/middleware.go) - [[[[bi-sys/api/sys/v1/auth.proto]]]](../ai/file/bi-sys/api/sys/v1/auth.proto) - [[[[bi-tenant/api/tenant/v1/auth_http.pb.go]]]](../ai/file/bi-tenant/api/tenant/v1/auth-http.pb.go) - [[[[bi-analysis/api/anls/v1/common.proto]]]](../ai/file/bi-analysis/api/anls/v1/common.proto) - [[[[bi-analysis/api/anls/v1/query.proto]]]](../ai/file/bi-analysis/api/anls/v1/query.proto) - [[[[bi-chat/bi-chat-web/src/hooks/use-chat.ts]]]](../ai/file/bi-chat/bi-chat-web/src/hooks/use-chat.ts) - [[[[bi-chat/bi-chat-web/src/context/ChatContext.tsx]]]](../ai/file/bi-chat/bi-chat-web/src/context/chatcontext.tsx) - [[[[bi-chat/bi_chat/src/routes/chat.py]]]](../ai/file/bi-chat/bi-chat/src/routes/chat.py) - [[[[bi-chat/bi_chat/src/routes/sessions.py]]]](../ai/file/bi-chat/bi-chat/src/routes/sessions.py) - [[[[bi-chat/bi_chat/src/controllers/chat.py]]]](../ai/file/bi-chat/bi-chat/src/controllers/chat.py) - [[[[bi-chat/bi_chat/src/controllers/sessions.py]]]](../ai/file/bi-chat/bi-chat/src/controllers/sessions.py) - [[[[bi-chat/bi_chat/src/utils/websocket.py]]]](../ai/file/bi-chat/bi-chat/src/utils/websocket.py) - [[[[bi-api-jushuitan/internal/data/ratelimit/merchant_limiter.go]]]](../ai/file/bi-api-jushuitan/internal/data/ratelimit/merchant-limiter.go) - [[[[bi-api-jushuitan/internal/data/ratelimit/concurrency_limiter.go]]]](../ai/file/bi-api-jushuitan/internal/data/ratelimit/concurrency-limiter.go) - [[[[bi-api-jushuitan/internal/data/ratelimit/token_bucket.go]]]](../ai/file/bi-api-jushuitan/internal/data/ratelimit/token-bucket.go) - [[[[bi-intra/apisix/create-op-bi-sys.sh]]]](../ai/file/bi-intra/apisix/create-op-bi-sys.sh) - [[[[bi-common/fx/httpx/httpx.go]]]](../ai/file/bi-common/fx/httpx/httpx.go) - [[[[bi-api-leke/APITYPES_INTEGRATION.md]]]](../ai/file/bi-api-leke/apitypes-integration.md)
目录
引言
本文件面向BI分析平台的AI智能体系统API集成,系统化梳理RESTful API设计原则与实现规范,覆盖HTTP方法选择、URL路径设计、状态码使用;详述聊天接口(单智能体对话与多智能体协作)与会话管理API;介绍用户管理接口(认证、权限控制、个性化设置);说明WebSocket实时通信(连接建立、消息传递、断线重连);给出API版本管理策略与向后兼容性保障;并提供安全防护(身份验证、授权检查、速率限制)与完整使用示例及客户端集成指引。
项目结构
本仓库采用多模块微服务架构,围绕“分析系统”“聊天系统”“认证与权限”“网关与限流”等维度划分。API层主要由gRPC/HTTP网关、OpenAPI注解、前端Web应用与Python后端聊天服务构成。
图表来源
- [[[bi-chat/bi-chat-web/src/hooks/use-chat.ts]]]
- [[[bi-chat/bi_chat/src/routes/chat.py]]]
- [[[bi-chat/bi_chat/src/routes/sessions.py]]]
- [[[bi-analysis/api/anls/v1/query.proto]]]
- [[[bi-common/api/auth/v1/auth.proto]]]
- [[[bi-common/auth/middleware.go]]]
- [[[bi-sys/api/sys/v1/auth.proto]]]
- [[[bi-tenant/api/tenant/v1/auth_http.pb.go]]]
- [[[bi-intra/apisix/create-op-bi-sys.sh]]]
- [[[bi-api-jushuitan/internal/data/ratelimit/merchant_limiter.go]]]
章节来源
- [[[bi-chat/bi-chat-web/src/hooks/use-chat.ts]]]
- [[[bi-analysis/api/anls/v1/query.proto]]]
- [[[bi-common/api/auth/v1/auth.proto]]]
- [[[bi-common/auth/middleware.go]]]
- [[[bi-intra/apisix/create-op-bi-sys.sh]]]
核心组件
- 认证与权限服务:统一的AuthService(JWT校验、权限查询、权限检查、Token刷新、失效),配合中间件实现JWT认证与RBAC授权。
- 分析API:基于gRPC/HTTP网关的查询服务,提供数据预览与SQL生成能力。
- 聊天与会话:前端Next.js应用通过HTTP与SSE消费后端聊天与会话接口;后端Python服务提供路由、控制器与WebSocket工具。
- 网关与限流:APISIX路由脚本统一入口、限流与插件;业务侧实现令牌桶与并发控制器。
- HTTP客户端:统一的HTTP客户端封装,支持重试与参数编码。
章节来源
- [[[bi-common/api/auth/v1/auth.proto]]]
- [[[bi-common/auth/middleware.go]]]
- [[[bi-analysis/api/anls/v1/query.proto]]]
- [[[bi-chat/bi-chat-web/src/hooks/use-chat.ts]]]
- [[[bi-api-jushuitan/internal/data/ratelimit/merchant_limiter.go]]]
架构总览
下图展示API集成的关键交互:前端通过Next.js应用发起HTTP/SSE请求;后端Python服务处理聊天与会话;认证中间件进行JWT与RBAC校验;分析服务提供查询能力;APISIX作为统一入口与限流网关。
图表来源
- [[[bi-chat/bi-chat-web/src/hooks/use-chat.ts]]]
- [[[bi-chat/bi_chat/src/routes/chat.py]]]
- [[[bi-chat/bi_chat/src/controllers/chat.py]]]
- [[[bi-common/auth/middleware.go]]]
- [[[bi-analysis/api/anls/v1/query.proto]]]
- [[[bi-chat/bi_chat/src/utils/websocket.py]]]
详细组件分析
RESTful API 设计原则与实现规范
- HTTP方法选择
- GET:幂等查询(如获取用户信息、菜单、会话列表)
- POST:创建资源或提交动作(如新建会话、提交聊天消息)
- PUT/PATCH:更新资源(如更新会话元数据)
- DELETE:删除资源(如删除会话)
- URL路径设计
- 采用分层命名:/api/{version}/{domain}/
- 示例:/api/v1/tenant/auth/info、/api/v1/anls/query/preview
- 状态码使用
- 200:成功(含统一错误响应时也返回200,内部携带code/message)
- 400:参数错误/校验失败
- 401:未认证
- 403:权限不足
- 404:资源不存在
- 429:请求过于频繁(限流)
- 500:服务器内部错误
- OpenAPI注解
- 使用google.api.http与openapiv2注解,自动生成Swagger文档
章节来源
- [[[bi-analysis/api/anls/v1/query.proto]]]
- [[[bi-sys/api/sys/v1/auth.proto]]]
- [[[bi-api-leke/APITYPES_INTEGRATION.md]]]
聊天接口设计(单智能体与多智能体协作)
- 单智能体对话
- 端点:POST /api/v1/chat/messages(消息提交)
- 流程:前端发送消息 → 后端路由接收 → 控制器处理 → 调用模型/工具 → SSE流式返回
- 多智能体协作
- 端点:POST /api/v1/chat/workflows(工作流启动)
- 流程:前端提交任务/意图 → 后端调度多Agent → 通过事件/状态轮询或SSE推送进度
- 实时通信
- WebSocket:建立连接 → 订阅会话/任务事件 → 推送增量结果
- 前端示例:Next.js应用通过SSE解析“data: ”行,累积对象并渲染
图表来源
- [[[bi-chat/bi_chat/src/routes/chat.py]]]
- [[[bi-chat/bi_chat/src/controllers/chat.py]]]
- [[[bi-chat/bi_chat/src/utils/websocket.py]]]
- [[[bi-chat/bi-chat-web/src/hooks/use-chat.ts]]]
章节来源
- [[[bi-chat/bi-chat-web/src/hooks/use-chat.ts]]]
- [[[bi-chat/bi_chat/src/routes/chat.py]]]
- [[[bi-chat/bi_chat/src/utils/websocket.py]]]
会话管理API
- 会话创建
- 端点:POST /api/v1/sessions
- 返回:会话ID与初始状态
- 会话查询
- 端点:GET /api/v1/sessions/
- 返回:会话元数据与最近消息摘要
- 会话更新
- 端点:PUT /api/v1/sessions/
- 场景:重命名、标记收藏、更新偏好
- 会话删除
- 端点:DELETE /api/v1/sessions/
- 历史消息加载
- 端点:GET /api/v1/sessions/{id}/messages
- 前端示例:Next.js应用在切换会话时拉取历史消息
图表来源
- [[[bi-chat/bi_chat/src/routes/sessions.py]]]
- [[[bi-chat/bi_chat/src/controllers/sessions.py]]]
- [[[bi-chat/bi-chat-web/src/hooks/use-chat.ts]]]
章节来源
- [[[bi-chat/bi-chat-web/src/hooks/use-chat.ts]]]
- [[[bi-chat/bi_chat/src/routes/sessions.py]]]
- [[[bi-chat/bi_chat/src/controllers/sessions.py]]]
用户管理接口
- 认证
- 登录:POST /api/v1/auth/login(用户名/密码,可选验证码)
- 刷新:POST /api/v1/auth/refresh(刷新令牌)
- 注销:POST /api/v1/auth/logout
- 权限
- 获取用户信息:GET /api/v1/auth/userinfo
- 获取用户菜单:GET /api/v1/auth/menus
- 初始化BI:GET /api/v1/tenant/auth/init
- 管理端路径区分
- 客户端API:不带“-m”
- 管理端API:路径包含“-m”,通过bi-sys RPC校验
图表来源
- [[[bi-common/api/auth/v1/auth.proto]]]
- [[[bi-sys/api/sys/v1/auth.proto]]]
- [[[bi-tenant/api/tenant/v1/auth_http.pb.go]]]
章节来源
- [[[bi-common/api/auth/v1/auth.proto]]]
- [[[bi-sys/api/sys/v1/auth.proto]]]
- [[[bi-tenant/api/tenant/v1/auth_http.pb.go]]]
WebSocket 实时通信接口
- 连接建立
- 前端通过WebSocket工具建立持久连接
- 消息传递
- 服务端推送事件(如任务进度、增量结果)
- 断线重连机制
- 前端监听连接状态,指数退避重连
- 前端SSE解析
- Next.js应用按“data: ”行解析,累积对象并渲染
图表来源
章节来源
API版本管理与向后兼容
- 版本策略
- URL中显式版本:/api/v1、/api/v2
- 前端通过上下文保存版本,便于切换
- 向后兼容
- Protobuf定义保持不变,gRPC服务不受影响
- HTTP响应格式统一为{code,message,data},兼容旧客户端
章节来源
API安全防护
- 身份验证
- JWT中间件:拦截未认证请求
- 白名单:无需认证的公开端点
- 黑名单:Token失效管理
- 授权检查
- RBAC中间件:基于权限提供者进行细粒度授权
- 客户端/管理端路径区分:-m路径走管理端权限提供者
- 速率限制
- APISIX:全局限流插件(限速、突发、拒绝码)
- 业务侧:令牌桶限流(Redis分布式)、并发控制器(按商户维度)
图表来源
- [[[bi-common/auth/middleware.go]]]
- [[[bi-intra/apisix/create-op-bi-sys.sh]]]
- [[[bi-api-jushuitan/internal/data/ratelimit/merchant_limiter.go]]]
- [[[bi-api-jushuitan/internal/data/ratelimit/concurrency_limiter.go]]]
章节来源
- [[[bi-common/auth/middleware.go]]]
- [[[bi-intra/apisix/create-op-bi-sys.sh]]]
- [[[bi-api-jushuitan/internal/data/ratelimit/merchant_limiter.go]]]
- [[[bi-api-jushuitan/internal/data/ratelimit/concurrency_limiter.go]]]
依赖关系分析
- 组件耦合
- 前端对后端API的依赖通过HTTP/SSE/WS抽象;后端路由/控制器依赖中间件与分析服务
- 认证中间件与权限提供者解耦于具体业务
- 外部依赖
- APISIX网关提供统一入口与限流
- Redis支撑分布式令牌桶限流
- 循环依赖
- 当前结构清晰,未见循环导入
图表来源
- [[[bi-intra/apisix/create-op-bi-sys.sh]]]
- [[[bi-common/auth/middleware.go]]]
- [[[bi-api-jushuitan/internal/data/ratelimit/token_bucket.go]]]
章节来源
- [[[bi-intra/apisix/create-op-bi-sys.sh]]]
- [[[bi-common/auth/middleware.go]]]
- [[[bi-api-jushuitan/internal/data/ratelimit/token_bucket.go]]]
性能考量
- HTTP客户端重试
- 统一HTTP客户端支持重试与指数退避,提升稳定性
- 限流策略
- APISIX全局限流:防止雪崩
- 业务侧令牌桶:平滑突发,避免瞬时峰值
- 并发控制器:按商户维度控制并发,避免下游过载
- 缓存与分页
- 查询接口支持分页与缓存开关,降低数据库压力
章节来源
- [[[bi-common/fx/httpx/httpx.go]]]
- [[[bi-api-jushuitan/internal/data/ratelimit/merchant_limiter.go]]]
- [[[bi-api-jushuitan/internal/data/ratelimit/concurrency_limiter.go]]]
故障排查指南
- 常见错误与处理
- 401/403:检查JWT是否过期、是否在白名单、权限提供者是否可用
- 429:查看APISIX限流配置与业务侧限流策略
- 500:检查后端日志与Redis可用性
- 客户端重试
- HTTP客户端内置重试逻辑,建议结合指数退避
- 前端SSE解析
- 注意过滤“[DONE]”标记,捕获解析异常并记录
章节来源
结论
本方案以gRPC/HTTP网关与OpenAPI注解为核心,结合APISIX网关与业务侧限流,构建了高可用、可扩展的API体系。前端通过Next.js与SSE/WS实现流畅的实时交互;后端通过中间件与权限提供者确保安全可控。版本化设计与统一响应格式保障了向后兼容与客户端演进空间。
附录
- 客户端集成要点
- 保存API版本(v1/v2),在路由与请求头中体现
- 使用统一HTTP客户端,启用重试与超时
- WebSocket连接需实现断线重连与事件去重
- 示例端点清单
- 聊天:POST /api/v1/chat/messages
- 会话:GET/POST/PUT/DELETE /api/v1/sessions/
- 认证:POST /api/v1/auth/login、POST /api/v1/auth/refresh、POST /api/v1/auth/logout
- 分析:POST /api/v1/anls/query/preview、POST /api/v1/anls/query/sql