Skip to content

ADR-004: 移除 Mock 层,接入真实 AI API

Status

Accepted

Date

2026-03-25

Context

MVP 初期使用 setTimeout + 预设数据模拟 AI 生成能力(文本/图片/视频)。随着后端 AI 能力 API 就绪,继续维护 Mock 层带来双重负担:

  • 代码路径分叉(Mock/Real 切换逻辑),增加理解和测试成本
  • Mock 数据与真实响应格式存在偏差,测试置信度低
  • 真实错误场景(超时、API 限额、模型不可用)无法通过 Mock 验证

Options Considered

方案 A:保留 Mock,通过环境变量切换

  • 优点:离线开发可用、测试不依赖外部服务
  • 缺点:两套代码路径的维护成本;Mock 数据与真实响应格式容易失真

方案 B:完全移除 Mock,仅保留真实 API 实现

  • 优点:代码路径唯一、测试置信度高;消除 Mock/Real 维护偏差
  • 缺点:开发环境需要真实 API;单元测试需要 mock HTTP 层

Decision

选择 方案 B

通过 AiService 接口抽象(见 ADR-006),单元测试对 ApiClient 进行 mock 即可隔离外部依赖,比维护完整 Mock 服务开销更小、置信度更高。

Consequences

正面影响:

  • services/ai/ 目录下只有一条真实代码路径(real.ts
  • 移除了 import.meta.env 分支判断和 services/mock/ 目录

负面影响 / 已知风险:

  • 开发环境需要配置 NUXT_PUBLIC_API_BASE(见 .env.example
  • 无网络时无法调试 AI 生成功能

需要的后续行动:

  • 测试策略中说明如何 mock ApiClient 进行集成测试
  • 确保 .env.example 包含所有必需的环境变量

替代此决策的条件

若后端 API 频繁变更接口格式导致前端联调成本过高,可重新评估引入 Mock 层。