282 lines
11 KiB
Go
282 lines
11 KiB
Go
# nl-video-api 错误码定义文档
|
||
|
||
## 1. 错误码规范
|
||
|
||
### 1.1 错误码格式
|
||
- 错误码采用4位数字格式
|
||
- 第1位表示错误类型:1-业务错误,2-系统错误,3-第三方错误
|
||
- 第2-4位表示具体错误编号
|
||
|
||
### 1.2 响应格式
|
||
```json
|
||
{
|
||
"code": 1001,
|
||
"message": "参数错误:用户名不能为空",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
## 2. 通用错误码 (1000-1099)
|
||
|
||
| 错误码 | 错误信息 | 说明 | HTTP状态码 |
|
||
|--------|----------|------|------------|
|
||
| 0 | 成功 | 请求成功 | 200 |
|
||
| 1001 | 参数错误 | 请求参数格式错误或缺少必填参数 | 400 |
|
||
| 1002 | 业务逻辑错误 | 业务规则验证失败 | 400 |
|
||
| 1003 | 认证失败 | Token无效或已过期 | 401 |
|
||
| 1004 | 权限不足 | 用户没有访问该资源的权限 | 403 |
|
||
| 1005 | 资源不存在 | 请求的资源不存在 | 404 |
|
||
| 1006 | 资源已存在 | 创建的资源已存在(违反唯一性约束) | 409 |
|
||
| 1007 | 服务器内部错误 | 系统内部错误 | 500 |
|
||
| 1008 | 请求方法不允许 | HTTP方法不被允许 | 405 |
|
||
| 1009 | 请求频率过高 | 请求过于频繁,触发限流 | 429 |
|
||
| 1010 | 文件上传失败 | 文件上传过程中出现错误 | 400 |
|
||
|
||
## 3. 认证模块错误码 (1100-1199)
|
||
|
||
| 错误码 | 错误信息 | 说明 |
|
||
|--------|----------|------|
|
||
| 1101 | 用户名或密码错误 | 登录凭证不正确 |
|
||
| 1102 | 账户已被禁用 | 用户账户状态为禁用 |
|
||
| 1103 | 账户已被锁定 | 用户账户被临时锁定 |
|
||
| 1104 | Token已过期 | JWT Token已过期,需要重新登录 |
|
||
| 1105 | Token格式错误 | JWT Token格式不正确 |
|
||
| 1106 | 用户名已存在 | 注册时用户名已被使用 |
|
||
| 1107 | 邮箱已存在 | 注册时邮箱已被使用 |
|
||
| 1108 | 手机号已存在 | 注册时手机号已被使用 |
|
||
| 1109 | 验证码错误 | 短信或邮箱验证码不正确 |
|
||
| 1110 | 验证码已过期 | 验证码超过有效期 |
|
||
| 1111 | 原密码错误 | 修改密码时原密码不正确 |
|
||
| 1112 | 新密码不能与原密码相同 | 密码修改规则限制 |
|
||
|
||
## 4. 用户管理模块错误码 (1200-1299)
|
||
|
||
| 错误码 | 错误信息 | 说明 |
|
||
|--------|----------|------|
|
||
| 1201 | 用户不存在 | 指定的用户ID不存在 |
|
||
| 1202 | 用户名格式错误 | 用户名长度或格式不符合要求 |
|
||
| 1203 | 手机号格式错误 | 手机号格式不正确 |
|
||
| 1204 | 邮箱格式错误 | 邮箱格式不正确 |
|
||
| 1205 | 密码格式错误 | 密码长度或复杂度不符合要求 |
|
||
| 1206 | 昵称格式错误 | 昵称长度不符合要求 |
|
||
| 1207 | 性别参数错误 | 性别参数值不在允许范围内 |
|
||
| 1208 | VIP等级参数错误 | VIP等级不在允许范围内 |
|
||
| 1209 | 用户状态参数错误 | 用户状态参数值不正确 |
|
||
| 1210 | 余额不足 | 用户账户余额不足 |
|
||
| 1211 | 积分不足 | 用户积分不足 |
|
||
| 1212 | VIP已过期 | 用户VIP会员已过期 |
|
||
| 1213 | 不能删除系统用户 | 系统预设用户不允许删除 |
|
||
| 1214 | 批量操作用户数量超限 | 批量操作的用户数量超过限制 |
|
||
|
||
## 5. 影片管理模块错误码 (1300-1399)
|
||
|
||
| 错误码 | 错误信息 | 说明 |
|
||
|--------|----------|------|
|
||
| 1301 | 影片不存在 | 指定的影片ID不存在 |
|
||
| 1302 | 影片标题不能为空 | 影片标题为必填项 |
|
||
| 1303 | 影片类型错误 | 影片类型参数不正确 |
|
||
| 1304 | 分类不存在 | 指定的分类ID不存在 |
|
||
| 1305 | 年份格式错误 | 年份参数格式不正确 |
|
||
| 1306 | 国家地区不能为空 | 国家地区为必填项 |
|
||
| 1307 | 时长参数错误 | 影片时长参数不正确 |
|
||
| 1308 | 总集数参数错误 | 电视剧总集数参数不正确 |
|
||
| 1309 | 影片状态参数错误 | 影片状态参数不正确 |
|
||
| 1310 | 封面图片格式错误 | 封面图片格式不支持 |
|
||
| 1311 | 视频文件格式错误 | 视频文件格式不支持 |
|
||
| 1312 | 影片已存在 | 相同标题和年份的影片已存在 |
|
||
| 1313 | 不能删除有剧集的影片 | 存在剧集的影片不允许删除 |
|
||
| 1314 | 评分参数错误 | 评分必须在0-10之间 |
|
||
|
||
## 6. 剧集管理模块错误码 (1400-1499)
|
||
|
||
| 错误码 | 错误信息 | 说明 |
|
||
|--------|----------|------|
|
||
| 1401 | 剧集不存在 | 指定的剧集ID不存在 |
|
||
| 1402 | 集数参数错误 | 集数必须为正整数 |
|
||
| 1403 | 剧集标题不能为空 | 剧集标题为必填项 |
|
||
| 1404 | 剧集时长参数错误 | 剧集时长必须为正数 |
|
||
| 1405 | 视频文件不能为空 | 视频文件为必填项 |
|
||
| 1406 | 剧集状态参数错误 | 剧集状态参数不正确 |
|
||
| 1407 | 剧集已存在 | 相同集数的剧集已存在 |
|
||
| 1408 | 集数超出范围 | 集数不能超过影片总集数 |
|
||
| 1409 | 视频文件不存在 | 指定的视频文件不存在 |
|
||
| 1410 | 不能删除最后一集 | 至少需要保留一集 |
|
||
|
||
## 7. 权限管理模块错误码 (1500-1599)
|
||
|
||
| 错误码 | 错误信息 | 说明 |
|
||
|--------|----------|------|
|
||
| 1501 | 角色不存在 | 指定的角色ID不存在 |
|
||
| 1502 | 角色名称不能为空 | 角色名称为必填项 |
|
||
| 1503 | 角色编码不能为空 | 角色编码为必填项 |
|
||
| 1504 | 角色编码已存在 | 角色编码必须唯一 |
|
||
| 1505 | 角色等级参数错误 | 角色等级必须在1-10之间 |
|
||
| 1506 | 不能删除系统角色 | 系统预设角色不允许删除 |
|
||
| 1507 | 不能修改系统角色 | 系统预设角色不允许修改 |
|
||
| 1508 | 权限不存在 | 指定的权限ID不存在 |
|
||
| 1509 | 权限名称不能为空 | 权限名称为必填项 |
|
||
| 1510 | 权限编码不能为空 | 权限编码为必填项 |
|
||
| 1511 | 权限编码已存在 | 权限编码必须唯一 |
|
||
| 1512 | 权限类型参数错误 | 权限类型参数不正确 |
|
||
| 1513 | 父权限不存在 | 指定的父权限ID不存在 |
|
||
| 1514 | 不能删除有子权限的权限 | 存在子权限的权限不允许删除 |
|
||
| 1515 | 角色权限分配失败 | 角色权限关联操作失败 |
|
||
|
||
## 8. 分类管理模块错误码 (1600-1699)
|
||
|
||
| 错误码 | 错误信息 | 说明 |
|
||
|--------|----------|------|
|
||
| 1601 | 分类不存在 | 指定的分类ID不存在 |
|
||
| 1602 | 分类名称不能为空 | 分类名称为必填项 |
|
||
| 1603 | 分类名称已存在 | 同级分类名称必须唯一 |
|
||
| 1604 | 父分类不存在 | 指定的父分类ID不存在 |
|
||
| 1605 | 不能删除有子分类的分类 | 存在子分类的分类不允许删除 |
|
||
| 1606 | 不能删除有影片的分类 | 存在影片的分类不允许删除 |
|
||
| 1607 | 分类层级过深 | 分类层级不能超过3级 |
|
||
| 1608 | 不能将分类设为自己的子分类 | 分类层级关系错误 |
|
||
|
||
## 9. 文件上传模块错误码 (1700-1799)
|
||
|
||
| 错误码 | 错误信息 | 说明 |
|
||
|--------|----------|------|
|
||
| 1701 | 文件不能为空 | 上传文件为必填项 |
|
||
| 1702 | 文件格式不支持 | 文件格式不在允许范围内 |
|
||
| 1703 | 文件大小超限 | 文件大小超过最大限制 |
|
||
| 1704 | 文件上传失败 | 文件保存过程中出现错误 |
|
||
| 1705 | 文件不存在 | 指定的文件不存在 |
|
||
| 1706 | 文件已损坏 | 文件内容不完整或已损坏 |
|
||
| 1707 | 存储空间不足 | 服务器存储空间不足 |
|
||
| 1708 | 文件名包含非法字符 | 文件名格式不正确 |
|
||
|
||
## 10. 搜索模块错误码 (1800-1899)
|
||
|
||
| 错误码 | 错误信息 | 说明 |
|
||
|--------|----------|------|
|
||
| 1801 | 搜索关键词不能为空 | 搜索关键词为必填项 |
|
||
| 1802 | 搜索关键词过短 | 搜索关键词至少2个字符 |
|
||
| 1803 | 搜索关键词过长 | 搜索关键词不能超过50个字符 |
|
||
| 1804 | 搜索类型参数错误 | 搜索类型参数不正确 |
|
||
| 1805 | 搜索结果为空 | 没有找到匹配的结果 |
|
||
| 1806 | 搜索服务不可用 | 搜索引擎服务异常 |
|
||
|
||
## 11. 系统错误码 (2000-2999)
|
||
|
||
| 错误码 | 错误信息 | 说明 |
|
||
|--------|----------|------|
|
||
| 2001 | 数据库连接失败 | 无法连接到数据库 |
|
||
| 2002 | 数据库查询失败 | 数据库查询执行失败 |
|
||
| 2003 | 数据库事务失败 | 数据库事务回滚 |
|
||
| 2004 | Redis连接失败 | 无法连接到Redis服务 |
|
||
| 2005 | 缓存操作失败 | Redis缓存操作失败 |
|
||
| 2006 | 配置文件读取失败 | 系统配置文件不存在或格式错误 |
|
||
| 2007 | 日志写入失败 | 日志文件写入失败 |
|
||
| 2008 | 内存不足 | 系统内存不足 |
|
||
| 2009 | 磁盘空间不足 | 系统磁盘空间不足 |
|
||
| 2010 | 网络连接超时 | 网络请求超时 |
|
||
|
||
## 12. 第三方服务错误码 (3000-3999)
|
||
|
||
| 错误码 | 错误信息 | 说明 |
|
||
|--------|----------|------|
|
||
| 3001 | 短信发送失败 | 短信服务提供商返回失败 |
|
||
| 3002 | 邮件发送失败 | 邮件服务提供商返回失败 |
|
||
| 3003 | 支付接口调用失败 | 支付服务提供商返回失败 |
|
||
| 3004 | 视频处理失败 | 视频转码服务失败 |
|
||
| 3005 | 图片处理失败 | 图片处理服务失败 |
|
||
| 3006 | CDN服务异常 | CDN服务不可用 |
|
||
| 3007 | 第三方API限流 | 第三方服务请求频率超限 |
|
||
| 3008 | 第三方服务维护 | 第三方服务正在维护 |
|
||
|
||
## 13. 错误处理最佳实践
|
||
|
||
### 13.1 错误信息国际化
|
||
```go
|
||
// 错误信息支持多语言
|
||
var ErrorMessages = map[string]map[int]string{
|
||
"zh-CN": {
|
||
1001: "参数错误",
|
||
1002: "业务逻辑错误",
|
||
// ...
|
||
},
|
||
"en-US": {
|
||
1001: "Parameter error",
|
||
1002: "Business logic error",
|
||
// ...
|
||
},
|
||
}
|
||
```
|
||
|
||
### 13.2 错误日志记录
|
||
```go
|
||
// 记录详细的错误信息用于调试
|
||
func LogError(code int, message string, err error, context map[string]interface{}) {
|
||
log.Error().
|
||
Int("code", code).
|
||
Str("message", message).
|
||
Err(err).
|
||
Interface("context", context).
|
||
Msg("API Error")
|
||
}
|
||
```
|
||
|
||
### 13.3 错误响应统一处理
|
||
```go
|
||
// 统一的错误响应处理
|
||
func HandleError(r *ghttp.Request, code int, message string, err error) {
|
||
// 记录错误日志
|
||
LogError(code, message, err, map[string]interface{}{
|
||
"url": r.URL.String(),
|
||
"method": r.Method,
|
||
"ip": r.GetClientIp(),
|
||
})
|
||
|
||
// 返回错误响应
|
||
response.JsonExit(r, code, message)
|
||
}
|
||
```
|
||
|
||
### 13.4 客户端错误处理建议
|
||
```javascript
|
||
// 前端错误处理示例
|
||
function handleApiError(error) {
|
||
const { code, message } = error.response.data;
|
||
|
||
switch (code) {
|
||
case 1003:
|
||
// Token过期,跳转到登录页
|
||
router.push('/login');
|
||
break;
|
||
case 1004:
|
||
// 权限不足,显示提示
|
||
showMessage('权限不足', 'error');
|
||
break;
|
||
default:
|
||
// 其他错误,显示具体错误信息
|
||
showMessage(message, 'error');
|
||
}
|
||
}
|
||
```
|
||
|
||
## 14. 错误码维护规范
|
||
|
||
### 14.1 新增错误码规范
|
||
1. 按模块分配错误码范围,避免冲突
|
||
2. 错误码必须有明确的含义和说明
|
||
3. 错误信息要简洁明了,便于用户理解
|
||
4. 新增错误码需要更新文档和测试用例
|
||
|
||
### 14.2 错误码废弃流程
|
||
1. 标记为废弃状态,但保留定义
|
||
2. 在新版本中移除废弃的错误码
|
||
3. 更新相关文档和代码
|
||
|
||
### 14.3 错误码版本管理
|
||
- 错误码定义纳入版本控制
|
||
- 重大变更需要版本号升级
|
||
- 保持向后兼容性
|
||
|
||
---
|
||
|
||
**文档版本**: v1.0.0
|
||
**最后更新**: 2024-01-01
|
||
**维护者**: nl-video-api开发团队 |