test-backend/.claude/contract.md

109 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 01 — 接口契约
> **这是前后端共享的唯一真相来源。** 修改本文件 = 修改协议,必须同步更新所有端。
---
## 契约生命周期(任务拆分时决定)
契约由**任务拆分时先开工的那一端**负责起草。这是任务产出物之一,不是额外工作。
```
任务拆分阶段:
┌─ 任务A后端-用户管理CRUD ──→ 产出:接口契约(后端起草)
│ + 后端代码
└─ 任务B前端-用户管理页面 ──→ 拿到契约后对接
反过来:
┌─ 任务A前端-首页改版 ──→ 产出:接口契约(前端起草)
│ + 前端页面
└─ 任务B后端-首页数据接口 ──→ 按契约实现
```
**铁律**
- 拆分任务时明确标注:**本任务包含接口契约起草**
- 契约随任务一起交付,不单独走审批
- 后开工的一方拿到契约后,发现问题直接跟起草方沟通修改
- 联调时对照本文件,不一致的以本文件为准
### 分仓库时契约放哪
```
Monorepo推荐 分仓库:
项目根/ 后端仓库/ 前端仓库/
└── rules/ ├── rules/ ├── rules/
└── 01-接口契约.md │ └── 01-接口契约.md │ └── 01-接口契约.md
← git submodule 引用同一份 →
```
---
## 返回格式(不变式)
```json
// ✅ 唯一正确格式
{ "code": 200, "message": "success", "data": { ... } }
{ "code": 500, "message": "错误原因", "data": null }
// ❌ 永远不许出现
return data; // 裸对象
return "ok"; // 裸字符串
{ "success": true, "result": {...} } // 自造格式
```
---
## 分页格式(不变式)
```json
{ "list": [...], "total": 100, "pages": 10, "current": 1, "size": 10 }
```
---
## 接口命名约定
| 前缀 | 用途 | 示例 |
|------|------|------|
| `/admin/**` | 管理后台 | `/admin/user/list` |
| `/app/**` | 移动端/H5/小程序 | `/app/task/list` |
| `/auth/**` | 登录注册(共享) | `/auth/login` |
| `/open/**` | 对外开放接口 | `/open/callback` |
---
## 状态值映射表
**← 改这里 = 改协议,必须同步后端 + 所有前端。**
| 含义 | 后端值 | 前端显示 | 前端 CSS 类 |
|------|--------|----------|------------|
| [状态1] | [值] | [文字] | [class] |
| [状态2] | [值] | [文字] | [class] |
---
## 字段名桥接表
同一个概念在不同端字段名不同时,在此登记:
| 概念 | 后端字段 | 前端A字段 | 前端B字段 |
|------|----------|-----------|-----------|
| | | | |
---
## 契约同步铁律
```
改后端接口 → grep 所有前端 → 逐个同步 → 两端都通过才算完成
步骤:
1. 改之前grep -r "接口路径" 所有前端目录/
2. 改后端 → 编译通过
3. 逐个改前端 → 构建通过
4. 更新本文件的映射表(如有新增状态值/字段差异)
```