API集成

📎 引用文件

本文引用的文件 - frontend/src/lib/api.ts - frontend/src/lib/apiAuth.ts - frontend/src/hooks/useSSE.ts - frontend/src/lib/tools.ts - frontend/src/lib/runReports.ts - frontend/src/lib/storage.ts - frontend/src/__tests__/viteProxy.test.ts

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向 Vibe-Trading 前端应用的API集成层,系统化说明REST API调用封装、认证机制与错误处理策略;记录工具调用接口、报告生成相关能力、实时数据流(WebSocket/SSE)的集成方式;并给出请求拦截器、响应处理器、重试机制、API版本管理、缓存策略与性能优化方案。同时提供最佳实践与调试指南,重点覆盖连接管理、流式数据处理与错误恢复。

项目结构

前端API集成主要位于以下模块: - REST 客户端与类型定义:api.ts - 认证与SSE票据:apiAuth.ts - SSE Hook(自动重连、去重、断点续传):useSSE.ts - 工具名称本地化映射:tools.ts - 报告可行性判断:runReports.ts - 安全存储封装:storage.ts - 开发代理配置验证测试:viteProxy.test.ts

graph TB A["页面/组件"] --> B["REST 客户端<br/>api.ts"] A --> C["SSE Hook<br/>useSSE.ts"] B --> D["认证头注入<br/>apiAuth.ts"] C --> D D --> E["本地存储封装<br/>storage.ts"] A --> F["工具标签映射<br/>tools.ts"] A --> G["报告可行性判断<br/>runReports.ts"] H["Vite 代理校验<br/>viteProxy.test.ts"] --> B

图表来源 - frontend/src/lib/api.ts:72-100 - frontend/src/lib/apiAuth.ts:18-53 - frontend/src/hooks/useSSE.ts:27-215 - frontend/src/lib/storage.ts:7-29 - frontend/src/__tests__/viteProxy.test.ts:5-21

章节来源 - frontend/src/lib/api.ts:1-296 - frontend/src/lib/apiAuth.ts:1-54 - frontend/src/hooks/useSSE.ts:1-216 - frontend/src/lib/tools.ts:1-47 - frontend/src/lib/runReports.ts:1-27 - frontend/src/lib/storage.ts:1-30 - frontend/src/__tests__/viteProxy.test.ts:1-22

核心组件

章节来源 - frontend/src/lib/api.ts:6-100 - frontend/src/lib/apiAuth.ts:18-53 - frontend/src/hooks/useSSE.ts:27-215 - frontend/src/lib/tools.ts:1-47 - frontend/src/lib/runReports.ts:1-27

架构总览

前端通过 api.ts 暴露的命名空间方法访问后端REST接口;所有请求均携带认证头;SSE流通过 useSSE.ts 管理连接与重连;认证票据通过 apiAuth.ts 在需要时动态获取。

sequenceDiagram participant UI as "页面/组件" participant API as "REST 客户端(api.ts)" participant AUTH as "认证(apiAuth.ts)" participant BE as "后端服务" UI->>API : 调用 api.xxx(...) API->>AUTH : 读取/注入 Authorization API->>BE : fetch(带头, 路径, 可选体) BE-->>API : Response(JSON/错误) API-->>UI : 解析结果或抛出 ApiError

图表来源 - frontend/src/lib/api.ts:72-100 - frontend/src/lib/apiAuth.ts:18-21

章节来源 - frontend/src/lib/api.ts:72-100 - frontend/src/lib/apiAuth.ts:18-21

详细组件分析

REST 客户端与错误处理

flowchart TD Start(["进入 request"]) --> Merge["合并请求头<br/>Content-Type + 认证头"] Merge --> Fetch["发起 fetch"] Fetch --> Ok{"响应 ok ?"} Ok -- 否 --> Err["构造 ApiError<br/>提取 detail/message"] Ok -- 是 --> CheckCT{"content-type 含 JSON ?"} CheckCT -- 否 --> ThrowCT["抛出类型不匹配错误"] CheckCT -- 是 --> Parse["解析 JSON 返回"] Err --> End(["结束"]) ThrowCT --> End Parse --> End

图表来源 - frontend/src/lib/api.ts:60-100

章节来源 - frontend/src/lib/api.ts:6-100

认证机制与SSE票据

sequenceDiagram participant UI as "SSE 消费者" participant AUTH as "apiAuth.ts" participant BE as "后端 /auth/sse-ticket" UI->>AUTH : withAuthTicket(url) AUTH->>AUTH : 读取本地密钥 alt 存在密钥 AUTH->>BE : POST /auth/sse-ticket (带Authorization) BE-->>AUTH : {ticket} AUTH-->>UI : url?ticket=... else 无密钥 AUTH-->>UI : 原url end

图表来源 - frontend/src/lib/apiAuth.ts:23-53 - frontend/src/lib/storage.ts:7-29

章节来源 - frontend/src/lib/apiAuth.ts:1-54 - frontend/src/lib/storage.ts:1-30

SSE Hook:连接管理、重连与断点续传

sequenceDiagram participant Comp as "组件" participant Hook as "useSSE.ts" participant ES as "EventSource" participant Auth as "apiAuth.ts" Comp->>Hook : connect(url, handlers) Hook->>Hook : buildUrl(追加 Last-Event-ID) alt 有密钥 Hook->>Auth : withAuthTicket(baseUrl) Auth-->>Hook : url?ticket=... else 无密钥 Hook-->>Hook : baseUrl end Hook->>ES : new EventSource(url) ES-->>Hook : onopen/onerror Hook->>Hook : 指数退避调度重连 Note over Hook : LRU去重 + 事件分发

图表来源 - frontend/src/hooks/useSSE.ts:63-174 - frontend/src/lib/apiAuth.ts:36-53

章节来源 - frontend/src/hooks/useSSE.ts:1-216

工具调用接口与本地化

章节来源 - frontend/src/lib/tools.ts:1-47

报告生成相关能力

章节来源 - frontend/src/lib/runReports.ts:1-27

API 版本管理与路由约定

章节来源 - frontend/src/lib/api.ts:4-5

缓存策略

章节来源 - frontend/src/lib/api.ts:72-100 - frontend/src/hooks/useSSE.ts:102-106

性能优化要点

章节来源 - frontend/src/hooks/useSSE.ts:44-56 - frontend/src/hooks/useSSE.ts:158-174

依赖关系分析

graph LR API["api.ts"] --> AUTH["apiAuth.ts"] API --> TYPES["类型定义(api.ts)"] SSE["useSSE.ts"] --> AUTH SSE --> STORAGE["storage.ts"] TOOLS["tools.ts"] --> I18N["i18n"] REPORTS["runReports.ts"] --> TYPES TEST["viteProxy.test.ts"] --> PROXY["Vite 代理配置"]

图表来源 - frontend/src/lib/api.ts:1-3 - frontend/src/lib/apiAuth.ts:1-2 - frontend/src/hooks/useSSE.ts:5-7 - frontend/src/lib/tools.ts:1-2 - frontend/src/lib/runReports.ts:1-2 - frontend/src/__tests__/viteProxy.test.ts:5-21

章节来源 - frontend/src/lib/api.ts:1-3 - frontend/src/lib/apiAuth.ts:1-2 - frontend/src/hooks/useSSE.ts:5-7 - frontend/src/lib/tools.ts:1-2 - frontend/src/lib/runReports.ts:1-2 - frontend/src/__tests__/viteProxy.test.ts:5-21

性能考虑

[本节为通用指导,不直接分析具体文件]

故障排查指南

章节来源 - frontend/src/lib/api.ts:60-100 - frontend/src/lib/apiAuth.ts:36-53 - frontend/src/hooks/useSSE.ts:122-174 - frontend/src/lib/storage.ts:7-29

结论

本集成层通过统一的 REST 客户端、严格的错误模型、安全的认证注入与票据交换、以及健壮的 SSE Hook,为前端提供了稳定可靠的API交互能力。配合工具本地化与报告可行性判断,满足日常分析与报告需求。建议在后续迭代中补充通用缓存层与更细粒度的性能监控,进一步提升稳定性与可观测性。

附录

常用API分类速查

章节来源 - frontend/src/lib/api.ts:123-296

调试与最佳实践

章节来源 - frontend/src/__tests__/viteProxy.test.ts:5-21 - frontend/src/lib/api.ts:60-100 - frontend/src/hooks/useSSE.ts:158-174