docs: add code structuring, error response and frontend display standards

This commit is contained in:
erio
2026-04-02 02:02:11 +08:00
parent 180cf97588
commit bd1fefb475
2 changed files with 44 additions and 0 deletions
+22
View File
@@ -1065,6 +1065,13 @@ slog.Error("failed to set model rate limit",
)
```
#### API 错误响应规范
- 后端返回错误时,必须使用结构化 JSON,携带错误码和上下文参数,禁止直接返回拼接好的自然语言错误消息
- 前端根据错误码和参数组装国际化错误提示(i18n),后端不负责拼接用户可见的文案
- 错误响应格式:`{ "code": <错误码>, "message": "<开发者可读的英文错误描述>", "details": { <上下文参数> } }`
- `message` 字段为英文错误描述,供开发人员调试使用,前端不直接展示给用户
- `details` 携带前端渲染所需的动态参数(如 `{ "channel_id": 42, "model": "gpt-4" }`),前端根据错误码匹配 i18n key 并用 `details` 填充模板变量
### 5. 测试规范
#### Mock 函数签名同步
@@ -1166,6 +1173,21 @@ antigravityRateLimitThreshold
- [ ] 日志是否包含足够的上下文信息?
- [ ] 是否考虑了并发安全?
### 11. 代码结构化与解耦
- **禁止跨作用域传递布尔开关**:不要为了在函数末尾使用某个中间状态,将局部变量提到外层作用域。让计算结果结构体自带上下文(如 `cost.BillingMode`),下游直接读取
- **重复逻辑必须提取公共方法**:两个函数 90%+ 相同时,差异通过参数控制,而非复制粘贴后微调
- **兼容旧版本用结果分支,不用布尔开关**:新增功能需兼容旧行为时,通过结果对象的字段(如 `resolved.Mode`)自然分支,而非散落各处的 `if hasNewFeature` 检查
- **变量作用域最小化**:变量只在使用它的最小代码块内声明,不提前声明
### 12. 前端显示规范
- **浮点精度**:价格单位换算使用 `toPrecision(10)` 避免 IEEE 754 误差;倍率显示使用自适应精度,确保小数值(如 0.001)不会被截断为 0.00
- **条件渲染基于业务语义**:前端显示分支基于业务字段(如 `billing_mode`),而非数据存在性(如 `image_count > 0`)
- **数值格式化统一**:同类数值(如倍率)在所有页面(管理端、用户端、CSV 导出)使用相同的格式化函数
<div v-else>Token 明细</div>
```
---
## CI 检查与发布门禁
+22
View File
@@ -1065,6 +1065,13 @@ slog.Error("failed to set model rate limit",
)
```
#### API 错误响应规范
- 后端返回错误时,必须使用结构化 JSON,携带错误码和上下文参数,禁止直接返回拼接好的自然语言错误消息
- 前端根据错误码和参数组装国际化错误提示(i18n),后端不负责拼接用户可见的文案
- 错误响应格式:`{ "code": <错误码>, "message": "<开发者可读的英文错误描述>", "details": { <上下文参数> } }`
- `message` 字段为英文错误描述,供开发人员调试使用,前端不直接展示给用户
- `details` 携带前端渲染所需的动态参数(如 `{ "channel_id": 42, "model": "gpt-4" }`),前端根据错误码匹配 i18n key 并用 `details` 填充模板变量
### 5. 测试规范
#### Mock 函数签名同步
@@ -1166,6 +1173,21 @@ antigravityRateLimitThreshold
- [ ] 日志是否包含足够的上下文信息?
- [ ] 是否考虑了并发安全?
### 11. 代码结构化与解耦
- **禁止跨作用域传递布尔开关**:不要为了在函数末尾使用某个中间状态,将局部变量提到外层作用域。让计算结果结构体自带上下文(如 `cost.BillingMode`),下游直接读取
- **重复逻辑必须提取公共方法**:两个函数 90%+ 相同时,差异通过参数控制,而非复制粘贴后微调
- **兼容旧版本用结果分支,不用布尔开关**:新增功能需兼容旧行为时,通过结果对象的字段(如 `resolved.Mode`)自然分支,而非散落各处的 `if hasNewFeature` 检查
- **变量作用域最小化**:变量只在使用它的最小代码块内声明,不提前声明
### 12. 前端显示规范
- **浮点精度**:价格单位换算使用 `toPrecision(10)` 避免 IEEE 754 误差;倍率显示使用自适应精度,确保小数值(如 0.001)不会被截断为 0.00
- **条件渲染基于业务语义**:前端显示分支基于业务字段(如 `billing_mode`),而非数据存在性(如 `image_count > 0`)
- **数值格式化统一**:同类数值(如倍率)在所有页面(管理端、用户端、CSV 导出)使用相同的格式化函数
<div v-else>Token 明细</div>
```
---
## CI 检查与发布门禁