# API集成 **本文引用的文件** - [request.ts](file://my-uniapp-vue3/src/utils/request.ts) - [config.ts](file://my-uniapp-vue3/src/utils/config.ts) - [debug.ts](file://my-uniapp-vue3/src/utils/debug.ts) - [book-generator-api.ts](file://my-uniapp-vue3/src/utils/book-generator-api.ts) - [publish-api.ts](file://my-uniapp-vue3/src/utils/publish-api.ts) - [video-generator-api.ts](file://my-uniapp-vue3/src/utils/video-generator-api.ts) - [auth.ts](file://server/src/middleware/auth.ts) - [errorHandler.ts](file://server/src/middleware/errorHandler.ts) - [cache.ts](file://server/src/middleware/cache.ts) - [rate-limiter.ts](file://server/src/middleware/rate-limiter.ts) - [performance.ts](file://server/src/middleware/performance.ts) - [tts.controller.ts](file://server/src/modules/tts/tts.controller.ts) - [book-generator.controller.ts](file://server/src/modules/book-generator/book-generator.controller.ts) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考量](#性能考量) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本文件面向AI有声书生成平台的前端与后端API集成,系统性阐述HTTP请求封装、拦截器配置、错误处理机制、认证与令牌管理、请求重试与超时策略、数据缓存与离线处理、网络状态与断网重连、以及性能监控方案。文档同时提供API接口规范、参数校验与响应处理最佳实践,帮助开发者快速理解并高效扩展API能力。 ## 项目结构 前端采用UniApp生态,API封装集中在utils目录;后端基于Koa,中间件与控制器分层清晰。整体结构如下: ```mermaid graph TB subgraph "前端" FE_Config["配置工具
config.ts"] FE_Request["请求封装
request.ts"] FE_Debug["调试工具
debug.ts"] FE_API_BG["书籍生成API
book-generator-api.ts"] FE_API_PUB["发布API
publish-api.ts"] FE_API_VG["视频生成API
video-generator-api.ts"] end subgraph "后端" BE_Router["路由与控制器
tts.controller.ts
book-generator.controller.ts"] BE_MW_Auth["认证中间件
auth.ts"] BE_MW_Error["错误处理中间件
errorHandler.ts"] BE_MW_Cache["缓存中间件
cache.ts"] BE_MW_Rate["限流中间件
rate-limiter.ts"] BE_MW_Perf["性能监控中间件
performance.ts"] end FE_Config --> FE_Request FE_Request --> FE_API_BG FE_Request --> FE_API_PUB FE_Request --> FE_API_VG FE_Request --> BE_Router BE_Router --> BE_MW_Auth BE_Router --> BE_MW_Error BE_Router --> BE_MW_Cache BE_Router --> BE_MW_Rate BE_Router --> BE_MW_Perf ``` 图表来源 - [config.ts:1-80](file://my-uniapp-vue3/src/utils/config.ts#L1-L80) - [request.ts:1-207](file://my-uniapp-vue3/src/utils/request.ts#L1-L207) - [debug.ts:1-305](file://my-uniapp-vue3/src/utils/debug.ts#L1-L305) - [book-generator-api.ts:1-571](file://my-uniapp-vue3/src/utils/book-generator-api.ts#L1-L571) - [publish-api.ts:1-140](file://my-uniapp-vue3/src/utils/publish-api.ts#L1-L140) - [video-generator-api.ts:1-188](file://my-uniapp-vue3/src/utils/video-generator-api.ts#L1-L188) - [auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81) - [errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67) - [cache.ts:1-98](file://server/src/middleware/cache.ts#L1-L98) - [rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120) - [performance.ts:1-110](file://server/src/middleware/performance.ts#L1-L110) - [tts.controller.ts:1-274](file://server/src/modules/tts/tts.controller.ts#L1-L274) - [book-generator.controller.ts:1-199](file://server/src/modules/book-generator/book-generator.controller.ts#L1-L199) 章节来源 - [config.ts:1-80](file://my-uniapp-vue3/src/utils/config.ts#L1-L80) - [request.ts:1-207](file://my-uniapp-vue3/src/utils/request.ts#L1-L207) - [debug.ts:1-305](file://my-uniapp-vue3/src/utils/debug.ts#L1-L305) - [book-generator-api.ts:1-571](file://my-uniapp-vue3/src/utils/book-generator-api.ts#L1-L571) - [publish-api.ts:1-140](file://my-uniapp-vue3/src/utils/publish-api.ts#L1-L140) - [video-generator-api.ts:1-188](file://my-uniapp-vue3/src/utils/video-generator-api.ts#L1-L188) - [auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81) - [errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67) - [cache.ts:1-98](file://server/src/middleware/cache.ts#L1-L98) - [rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120) - [performance.ts:1-110](file://server/src/middleware/performance.ts#L1-L110) - [tts.controller.ts:1-274](file://server/src/modules/tts/tts.controller.ts#L1-L274) - [book-generator.controller.ts:1-199](file://server/src/modules/book-generator/book-generator.controller.ts#L1-L199) ## 核心组件 - 前端请求封装与拦截器 - 统一HTTP请求封装,支持GET/POST/PUT/DELETE,内置重试、超时、缓存、加载提示、调试日志与错误处理。 - 自动注入Authorization头与JSON Content-Type,统一响应格式兼容与错误分支处理。 - 配置与环境适配 - 自动识别H5/APP/Web平台,按NODE_ENV选择生产或开发API地址,支持微信小程序模拟器特殊处理。 - 调试与可观测性 - 提供页面切换、导航拦截、API请求/响应/错误日志,便于问题定位与性能分析。 - 后端中间件体系 - 认证中间件:支持强制认证与可选认证,Token校验与用户上下文注入。 - 错误处理中间件:统一错误响应格式与状态码映射,开发环境返回堆栈。 - 缓存中间件:基于Redis的响应缓存与键空间清理。 - 限流中间件:内存与Redis双栈限流,支持多场景限流策略。 - 性能监控中间件:统计请求总量、平均耗时、慢请求、错误率与端点维度指标。 - 业务API模块 - 书籍生成:创建/查询/生成/进度/工作流/音频/视频/合并等全链路API。 - 发布模块:平台账号绑定/解绑/校验、发布任务创建/重试、预览信息。 - 视频生成:项目管理、素材管理、生成进度、从书籍生成视频项目。 章节来源 - [request.ts:34-168](file://my-uniapp-vue3/src/utils/request.ts#L34-L168) - [config.ts:26-66](file://my-uniapp-vue3/src/utils/config.ts#L26-L66) - [debug.ts:158-191](file://my-uniapp-vue3/src/utils/debug.ts#L158-L191) - [auth.ts:7-49](file://server/src/middleware/auth.ts#L7-L49) - [errorHandler.ts:3-24](file://server/src/middleware/errorHandler.ts#L3-L24) - [cache.ts:13-47](file://server/src/middleware/cache.ts#L13-L47) - [rate-limiter.ts:49-71](file://server/src/middleware/rate-limiter.ts#L49-L71) - [performance.ts:29-75](file://server/src/middleware/performance.ts#L29-L75) - [book-generator-api.ts:138-571](file://my-uniapp-vue3/src/utils/book-generator-api.ts#L138-L571) - [publish-api.ts:42-140](file://my-uniapp-vue3/src/utils/publish-api.ts#L42-L140) - [video-generator-api.ts:78-188](file://my-uniapp-vue3/src/utils/video-generator-api.ts#L78-L188) ## 架构总览 前后端交互遵循“前端请求封装 → 后端路由与控制器 → 中间件链路(认证/限流/缓存/性能)→ 业务服务”的标准流程。认证与错误处理贯穿始终,性能与缓存中间件提供横切能力。 ```mermaid sequenceDiagram participant UI as "前端页面" participant Req as "请求封装
request.ts" participant Cfg as "配置工具
config.ts" participant DBG as "调试工具
debug.ts" participant Ctrl as "控制器
tts.controller.ts" participant MW_A as "认证中间件
auth.ts" participant MW_E as "错误处理中间件
errorHandler.ts" participant MW_R as "限流中间件
rate-limiter.ts" participant MW_C as "缓存中间件
cache.ts" participant MW_P as "性能监控中间件
performance.ts" UI->>Req : 调用API方法 Req->>Cfg : 获取API基础地址 Req->>DBG : 记录请求日志 Req->>Ctrl : 发起HTTP请求 Ctrl->>MW_A : 认证校验 Ctrl->>MW_R : 限流检查 Ctrl->>MW_C : 缓存命中检测 Ctrl->>MW_P : 记录性能指标 Ctrl-->>Req : 返回统一响应 Req->>DBG : 记录响应/错误日志 Req-->>UI : Promise结果 ``` 图表来源 - [request.ts:34-168](file://my-uniapp-vue3/src/utils/request.ts#L34-L168) - [config.ts:44-66](file://my-uniapp-vue3/src/utils/config.ts#L44-L66) - [debug.ts:158-191](file://my-uniapp-vue3/src/utils/debug.ts#L158-L191) - [tts.controller.ts:12-127](file://server/src/modules/tts/tts.controller.ts#L12-L127) - [auth.ts:7-49](file://server/src/middleware/auth.ts#L7-L49) - [rate-limiter.ts:49-71](file://server/src/middleware/rate-limiter.ts#L49-L71) - [cache.ts:13-47](file://server/src/middleware/cache.ts#L13-L47) - [performance.ts:29-75](file://server/src/middleware/performance.ts#L29-L75) ## 详细组件分析 ### 前端请求封装与拦截器 - 统一入口 - request(url, options):支持method/data/header/showLoading/config(重试/延迟/超时/缓存/TTL)。 - 仅GET请求支持内存缓存,缓存键为url+params序列化,TTL默认5分钟。 - 认证与头部 - 自动从本地存储读取token并注入Authorization头;统一Content-Type为application/json。 - 重试与超时 - retry/retryDelay/timeout可配置,默认重试0次、延迟1000ms、超时30000ms。 - 成功后写入缓存,失败抛出最后一次错误。 - 响应处理 - 兼容两种响应格式:{ code: 0, data: ... } 与 { success: true, data: ... }。 - 401跳转登录并清理本地token;429返回“请求过于频繁”;5xx弹Toast并拒绝;其他错误统一提示。 - 辅助方法 - get/post/put/del:对request的便捷封装。 - clearRequestCache:按模式或清空缓存。 - 加载与调试 - showLoading=true时自动显示/隐藏loading;debugApiRequest/debugApiResponse/debugApiError输出详细日志。 ```mermaid flowchart TD Start(["进入 request"]) --> BuildURL["拼接BASE_URL与路径"] BuildURL --> LoadToken["读取token并注入Authorization"] LoadToken --> SetHeaders["设置Content-Type"] SetHeaders --> CheckCache{"GET且启用缓存?"} CheckCache --> |是| CacheHit{"缓存未过期?"} CacheHit --> |是| ReturnCache["返回缓存数据"] CacheHit --> |否| MakeReq["发起实际请求"] CheckCache --> |否| MakeReq MakeReq --> RetryLoop{"重试循环"} RetryLoop --> TryReq["makeRequest执行"] TryReq --> RespOK{"响应成功?"} RespOK --> |是| WriteCache["写入缓存GET"] WriteCache --> HideLoading["隐藏loading"] HideLoading --> Resolve["Promise成功返回"] RespOK --> |否| Delay["等待retryDelay"] Delay --> RetryLoop RetryLoop --> |超过次数| ThrowErr["抛出最后错误"] ReturnCache --> End(["结束"]) Resolve --> End ThrowErr --> End ``` 图表来源 - [request.ts:34-168](file://my-uniapp-vue3/src/utils/request.ts#L34-L168) 章节来源 - [request.ts:34-168](file://my-uniapp-vue3/src/utils/request.ts#L34-L168) ### 配置与环境适配 - 平台识别:H5/APP/Web三类平台自动识别,微信小程序模拟器走Web路径。 - 环境区分:生产环境固定域名,开发环境H5使用反向代理路径,APP使用真实域名。 - 服务器地址:getServerBaseUrl用于拼接静态资源URL(如音频文件)。 章节来源 - [config.ts:26-72](file://my-uniapp-vue3/src/utils/config.ts#L26-L72) ### 调试与可观测性 - 页面与导航拦截:记录页面切换、navigateTo/redirectTo/switchTab/reLaunch/navigateBack调用与失败。 - API日志:请求方法、URL、参数、所在页面、耗时、响应状态与消息。 - 全局错误捕获:UnhandledRejection与window/global error事件,uni.onError回调。 章节来源 - [debug.ts:158-278](file://my-uniapp-vue3/src/utils/debug.ts#L158-L278) ### 后端中间件体系 #### 认证中间件 - 强制认证:未开启AUTH_ENABLED时注入测试用户;开启后校验Authorization头格式与JWT签名。 - 可选认证:无Token则注入测试用户,Token无效也注入测试用户,保证部分接口可用。 章节来源 - [auth.ts:7-81](file://server/src/middleware/auth.ts#L7-L81) #### 错误处理中间件 - 统一响应:{ code, message, data },状态码继承自错误对象。 - 开发环境附加stack信息;429错误携带retryAfter字段。 章节来源 - [errorHandler.ts:3-67](file://server/src/middleware/errorHandler.ts#L3-L67) #### 缓存中间件 - 命中优先:Redis可用时优先从缓存返回,设置X-Cache头。 - 写入缓存:200且body存在时写入,TTL可配置。 - 清理:支持按前缀删除键空间。 章节来源 - [cache.ts:13-98](file://server/src/middleware/cache.ts#L13-L98) #### 限流中间件 - 双栈限流:Redis可用走Redis限流,否则回退内存限流。 - 多场景策略:API全局限流、登录、短信、TTS、上传等。 - 429响应:设置Retry-After头与友好提示。 章节来源 - [rate-limiter.ts:17-120](file://server/src/middleware/rate-limiter.ts#L17-L120) #### 性能监控中间件 - 指标采集:总请求数、平均耗时、慢请求、错误数、端点维度统计。 - 响应头:X-Response-Time标注本次耗时。 - 指标路由:提供性能指标查询接口。 章节来源 - [performance.ts:29-110](file://server/src/middleware/performance.ts#L29-L110) ### 业务API模块 #### 书籍生成API - 能力覆盖:创建/查询/删除、生成大纲/章节/全文、工作流状态、音频/视频生成与合并、进度查询、重新生成等。 - 统一返回:外层包裹{ code, message, data },data内聚合具体字段。 - 前端封装:基于request封装各方法,自动注入Authorization头。 章节来源 - [book-generator-api.ts:138-571](file://my-uniapp-vue3/src/utils/book-generator-api.ts#L138-L571) - [request.ts:34-168](file://my-uniapp-vue3/src/utils/request.ts#L34-L168) #### 发布API - 账号管理:绑定/解绑/校验平台账号(抖音/快手/B站)。 - 任务管理:创建并发布、重试发布、查询列表与详情。 - 预览:获取视频发布预览信息。 章节来源 - [publish-api.ts:42-140](file://my-uniapp-vue3/src/utils/publish-api.ts#L42-L140) #### 视频生成API - 项目管理:创建/更新/删除、查询列表与详情、开始生成、获取进度。 - 素材管理:上传/删除、分类查询。 - 从书籍生成:一键从书籍生成视频项目。 章节来源 - [video-generator-api.ts:78-188](file://my-uniapp-vue3/src/utils/video-generator-api.ts#L78-L188) ## 依赖关系分析 - 前端依赖 - request.ts依赖config.ts与debug.ts;业务API模块依赖request.ts。 - 后端依赖 - 控制器依赖中间件;中间件依赖redisService与rate-limiter-flexible;控制器依赖数据库与业务服务。 ```mermaid graph LR FE_REQ["request.ts"] --> FE_CFG["config.ts"] FE_REQ --> FE_DBG["debug.ts"] FE_BG["book-generator-api.ts"] --> FE_REQ FE_PUB["publish-api.ts"] --> FE_REQ FE_VG["video-generator-api.ts"] --> FE_REQ BE_CTRL_TTS["tts.controller.ts"] --> BE_MW_AUTH["auth.ts"] BE_CTRL_TTS --> BE_MW_ERR["errorHandler.ts"] BE_CTRL_TTS --> BE_MW_RATE["rate-limiter.ts"] BE_CTRL_TTS --> BE_MW_CACHE["cache.ts"] BE_CTRL_TTS --> BE_MW_PERF["performance.ts"] BE_CTRL_BG["book-generator.controller.ts"] --> BE_MW_AUTH BE_CTRL_BG --> BE_MW_ERR BE_CTRL_BG --> BE_MW_RATE BE_CTRL_BG --> BE_MW_CACHE BE_CTRL_BG --> BE_MW_PERF ``` 图表来源 - [request.ts:1-207](file://my-uniapp-vue3/src/utils/request.ts#L1-L207) - [config.ts:1-80](file://my-uniapp-vue3/src/utils/config.ts#L1-L80) - [debug.ts:1-305](file://my-uniapp-vue3/src/utils/debug.ts#L1-L305) - [book-generator-api.ts:1-571](file://my-uniapp-vue3/src/utils/book-generator-api.ts#L1-L571) - [publish-api.ts:1-140](file://my-uniapp-vue3/src/utils/publish-api.ts#L1-L140) - [video-generator-api.ts:1-188](file://my-uniapp-vue3/src/utils/video-generator-api.ts#L1-L188) - [auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81) - [errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67) - [rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120) - [cache.ts:1-98](file://server/src/middleware/cache.ts#L1-L98) - [performance.ts:1-110](file://server/src/middleware/performance.ts#L1-L110) - [tts.controller.ts:1-274](file://server/src/modules/tts/tts.controller.ts#L1-L274) - [book-generator.controller.ts:1-199](file://server/src/modules/book-generator/book-generator.controller.ts#L1-L199) 章节来源 - [request.ts:1-207](file://my-uniapp-vue3/src/utils/request.ts#L1-L207) - [auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81) - [errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67) - [rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120) - [cache.ts:1-98](file://server/src/middleware/cache.ts#L1-L98) - [performance.ts:1-110](file://server/src/middleware/performance.ts#L1-L110) - [tts.controller.ts:1-274](file://server/src/modules/tts/tts.controller.ts#L1-L274) - [book-generator.controller.ts:1-199](file://server/src/modules/book-generator/book-generator.controller.ts#L1-L199) ## 性能考量 - 前端 - 合理设置timeout与retry,避免长时间阻塞UI;对高频GET接口启用缓存降低网络开销。 - 使用debug工具定位慢请求与错误高发接口。 - 后端 - 使用性能监控中间件观察端点耗时与慢请求占比,结合Redis缓存与限流策略平衡吞吐与稳定性。 - 对热点接口(如音色列表、热门书籍)配置长TTL缓存,减少数据库压力。 ## 故障排查指南 - 常见错误与处理 - 401未授权:前端清除本地token并跳转登录;后端抛出UnauthorizedError。 - 429请求频繁:前端等待Retry-After秒数再试;后端设置Retry-After头。 - 5xx服务器错误:前端弹Toast并记录错误日志;后端统一错误响应。 - 调试建议 - 启用DEBUG开关,查看API请求/响应/错误日志与页面切换轨迹。 - 使用性能监控指标定位慢请求与错误率异常端点。 - 限流与缓存 - 若出现429,检查限流策略与客户端重试逻辑;若命中缓存但数据陈旧,考虑调整TTL或主动清理。 章节来源 - [request.ts:133-159](file://my-uniapp-vue3/src/utils/request.ts#L133-L159) - [errorHandler.ts:39-67](file://server/src/middleware/errorHandler.ts#L39-L67) - [rate-limiter.ts:60-71](file://server/src/middleware/rate-limiter.ts#L60-L71) - [debug.ts:158-191](file://my-uniapp-vue3/src/utils/debug.ts#L158-L191) - [performance.ts:29-75](file://server/src/middleware/performance.ts#L29-L75) ## 结论 本API集成方案通过前端统一请求封装与后端中间件体系,实现了认证、限流、缓存、性能监控与错误处理的横切能力,配合业务API模块覆盖了从书籍生成到视频发布的完整链路。建议在生产环境中合理配置缓存与限流策略,持续监控性能指标,并完善离线与断网重连策略以提升用户体验。 ## 附录 ### API接口文档与最佳实践 - 统一响应格式 - 成功:{ code: 0, message: "success", data: any } - 失败:{ code: number, message: string, data: null } - 特殊:429包含retryAfter字段;401触发前端登录跳转 - 参数校验 - 前端:request封装自动注入Authorization与Content-Type;业务API需在调用侧确保必填参数齐全。 - 后端:控制器内进行参数校验与业务规则检查,必要时抛出对应错误类型。 - 响应处理 - 前端:根据code与success字段判断成功与否;401清理token并跳转登录;429提示重试;5xx弹Toast。 - 后端:错误处理中间件统一格式化;开发环境返回stack便于定位。 - 超时与重试 - 前端:合理设置timeout与retry;对幂等GET启用缓存;对非幂等操作谨慎重试。 - 后端:结合限流与熔断策略,避免雪崩效应。 - 离线与断网 - 建议:对关键写操作增加本地队列与重放机制;对读操作启用缓存与降级策略。 - 性能监控 - 建议:定期查看性能指标,识别慢端点与异常波动,优化热点接口与数据库查询。