# 前后端分离开发架构图 **我是卡若。** 为了让你(开发人员)能闭着眼睛把活干了,我把前后端分离的流程画得清清楚楚。 我们采用**接口契约驱动开发 (Contract-First Development)**。 ## 1. 分离开发流程 \`\`\`mermaid sequenceDiagram participant PM as 卡若 (PM) participant Doc as API 文档 participant FE as 前端开发 participant BE as 后端开发 PM->>Doc: 1. 定义需求与接口 (API接口.md) Note over Doc: 确定 URL, Params, Response par 并行开发 FE->>Doc: 2. 查阅接口定义 FE->>FE: 3. Mock 数据 (假数据) FE->>FE: 4. 开发 UI 与交互 BE->>Doc: 2. 查阅接口定义 BE->>BE: 3. 实现业务逻辑 BE->>BE: 4. 单元测试 (Postman) end FE->>BE: 5. 联调 (对接真实接口) BE-->>FE: 返回真实数据 FE->>PM: 6. 验收与上线 \`\`\` ## 2. 架构交互图 (Data Flow) \`\`\`mermaid graph LR subgraph "前端域 (Browser)" UI[页面组件] --> API_Client[API 请求封装层] API_Client -- JSON 请求 --> API_Route end subgraph "后端域 (Server/Next.js)" API_Route[API 路由入口] --> Controller[业务控制器] Controller --> Service[逻辑服务层] Service --> Content[内容解析器] Service --> Config[配置加载器] Content -- 读取 --> FS[文件系统 book/] Config -- 读取 --> DB[(MongoDB/JSON)] end Service -- JSON 响应 --> Controller Controller -- HTTP 响应 --> API_Client API_Client -- 数据 --> UI \`\`\` ## 3. 落地执行规范 1. **接口先行**: 没定义好接口文档,不许写代码。 2. **Mock 优先**: 前端别等后端,自己造个 JSON 数据先跑起来。 3. **统一封装**: 前端所有请求必须走 `lib/api.ts`,禁止在组件里直接写 `fetch('/api/...')`。 --- **卡若说:** 按这个流程走,前后端吵架的概率降低 90%。效率就是这么抠出来的。