部分重构
This commit is contained in:
+276
@@ -0,0 +1,276 @@
|
||||
# OPS API 快速参考
|
||||
|
||||
## 基础信息
|
||||
|
||||
**Base URL**: `http://localhost:8080/api/v1/`
|
||||
**认证方式**: Bearer Token, Cookie, 或POST body `userCookieValue`
|
||||
**响应格式**: JSON
|
||||
|
||||
## 认证端点
|
||||
|
||||
| 方法 | 端点 | 描述 | 需要认证 |
|
||||
|------|------|------|----------|
|
||||
| POST | `/users/register` | 用户注册 | ❌ |
|
||||
| POST | `/users/login` | 用户登录 | ❌ |
|
||||
| POST | `/users/forgot-password` | 忘记密码 | ❌ |
|
||||
| POST | `/users/reset-password` | 重置密码 | ❌ |
|
||||
| GET | `/users/profile` | 获取用户资料 | ✅ |
|
||||
| PUT | `/users/profile` | 更新用户资料 | ✅ |
|
||||
| POST | `/users/logout` | 用户登出 | ✅ |
|
||||
|
||||
## 文件管理端点
|
||||
|
||||
| 方法 | 端点 | 描述 | 需要认证 |
|
||||
|------|------|------|----------|
|
||||
| POST | `/files/upload` | 上传文件 | ✅ |
|
||||
| GET | `/files/list` | 获取文件列表 | ✅ |
|
||||
| GET | `/files/{id}` | 获取文件信息 | ✅ |
|
||||
| DELETE | `/files/{id}` | 删除文件 | ✅ |
|
||||
| GET | `/files/download/{hash}` | 下载文件 | ❌ |
|
||||
| GET | `/files/get/{hash}` | 预览文件 | ❌ |
|
||||
|
||||
## 采购订单端点
|
||||
|
||||
### 兼容前端API
|
||||
| 方法 | 端点 | 描述 | 需要认证 |
|
||||
|------|------|------|----------|
|
||||
| POST | `/purchase/getorders` | 获取订单列表 | ✅ |
|
||||
| POST | `/purchase/addorder` | 创建订单 | ✅ |
|
||||
|
||||
### RESTful API
|
||||
| 方法 | 端点 | 描述 | 需要认证 |
|
||||
|------|------|------|----------|
|
||||
| GET | `/purchase/orders` | 获取订单列表 | ✅ |
|
||||
| POST | `/purchase/orders` | 创建订单 | ✅ |
|
||||
| GET | `/purchase/orders/{id}` | 获取订单详情 | ✅ |
|
||||
|
||||
## 系统管理端点
|
||||
|
||||
| 方法 | 端点 | 描述 | 需要认证 | 需要管理员 |
|
||||
|------|------|------|----------|------------|
|
||||
| GET | `/system/status` | 系统状态 | ❌ | ❌ |
|
||||
| GET | `/system/config` | 获取配置 | ✅ | ✅ |
|
||||
| PUT | `/system/config` | 更新配置 | ✅ | ✅ |
|
||||
|
||||
## 请求头示例
|
||||
|
||||
### Bearer Token
|
||||
```http
|
||||
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
||||
```
|
||||
|
||||
### Cookie
|
||||
```http
|
||||
Cookie: ops_session=abc123def456
|
||||
```
|
||||
|
||||
### Content-Type
|
||||
```http
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
## 响应格式
|
||||
|
||||
```json
|
||||
{
|
||||
"code": "0", // 错误码
|
||||
"message": "Success", // 消息
|
||||
"data": {} // 数据
|
||||
}
|
||||
```
|
||||
|
||||
## 核心错误码
|
||||
|
||||
| 错误码 | 含义 | 说明 |
|
||||
|--------|------|------|
|
||||
| `0` | 成功 | 请求成功完成 |
|
||||
| `-1` | 内部错误 | 服务器内部错误 |
|
||||
| `-2` | 参数错误 | 请求参数不正确 |
|
||||
| `-3` | 未登录 | 用户未登录或令牌无效 |
|
||||
| `-4` | 用户已存在 | 注册时用户名已存在 |
|
||||
| `-5` | 用户不存在 | 用户记录不存在 |
|
||||
| `-42` | 凭证错误 | 用户名或密码错误 |
|
||||
|
||||
## 分页参数
|
||||
|
||||
所有列表接口支持分页:
|
||||
- `page`: 页码 (默认: 1)
|
||||
- `entries`: 每页数量 (默认: 20)
|
||||
|
||||
```http
|
||||
GET /api/v1/purchase/orders?page=2&entries=50
|
||||
```
|
||||
|
||||
## 文件上传
|
||||
|
||||
支持的文件类型:
|
||||
- 图片: PNG, JPEG, GIF, WebP
|
||||
- 最大文件大小: 5MB
|
||||
|
||||
```http
|
||||
POST /api/v1/files/upload
|
||||
Content-Type: multipart/form-data
|
||||
```
|
||||
|
||||
## 采购订单数据结构
|
||||
|
||||
### 创建订单请求体
|
||||
```json
|
||||
{
|
||||
"title": "订单标题",
|
||||
"order_status": "pending",
|
||||
"part_name": "物品名称",
|
||||
"remark": "备注信息",
|
||||
"link": "https://example.com",
|
||||
"photos": ["hash1", "hash2"],
|
||||
"tracking_number": "TN123456789",
|
||||
"update_time": "2026-03-31T18:00:00",
|
||||
"costs": [
|
||||
{
|
||||
"cost": 1000,
|
||||
"costt": 1000,
|
||||
"currencytype": "CNY",
|
||||
"int": 2,
|
||||
"type": "类型"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 订单状态值
|
||||
- `pending`: 待处理
|
||||
- `processing`: 处理中
|
||||
- `shipped`: 已发货
|
||||
- `completed`: 已完成
|
||||
- `cancelled`: 已取消
|
||||
|
||||
## 快速示例
|
||||
|
||||
### 1. 用户登录
|
||||
```bash
|
||||
curl -X POST http://localhost:8080/api/v1/users/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name": "admin", "password": "password123"}'
|
||||
```
|
||||
|
||||
### 2. 获取订单列表
|
||||
```bash
|
||||
curl -X GET "http://localhost:8080/api/v1/purchase/orders?page=1" \
|
||||
-H "Authorization: Bearer YOUR_TOKEN"
|
||||
```
|
||||
|
||||
### 3. 上传文件
|
||||
```bash
|
||||
curl -X POST http://localhost:8080/api/v1/files/upload \
|
||||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||||
-F "file=@image.png"
|
||||
```
|
||||
|
||||
## 状态码映射
|
||||
|
||||
| OPS错误码 | HTTP状态码 | 含义 |
|
||||
|-----------|------------|------|
|
||||
| `0` | 200 OK | 成功 |
|
||||
| `-2` | 400 Bad Request | 参数错误 |
|
||||
| `-3`, `-42` | 401 Unauthorized | 认证失败 |
|
||||
| `-4` | 409 Conflict | 资源冲突 |
|
||||
| `-5`, `-100` | 404 Not Found | 资源不存在 |
|
||||
| `-102` | 413 Payload Too Large | 文件太大 |
|
||||
| `-101` | 415 Unsupported Media Type | 文件类型不支持 |
|
||||
| `-1` | 500 Internal Server Error | 服务器错误 |
|
||||
|
||||
## 开发环境配置
|
||||
|
||||
### 数据库配置
|
||||
```yaml
|
||||
# backend/data/config.yaml
|
||||
database:
|
||||
driver: "sqlite" # sqlite, mysql, postgres
|
||||
path: "./data/db.db" # SQLite文件路径
|
||||
# 或MySQL配置:
|
||||
# host: "localhost"
|
||||
# port: 3306
|
||||
# name: "ops"
|
||||
# user: "root"
|
||||
# password: "password"
|
||||
```
|
||||
|
||||
### 启动命令
|
||||
```bash
|
||||
# 开发模式
|
||||
go run cmd/ops-server/main.go
|
||||
|
||||
# 生产模式
|
||||
go build -o ops-server cmd/ops-server/main.go
|
||||
./ops-server
|
||||
```
|
||||
|
||||
## 前端集成示例
|
||||
|
||||
### 存储令牌
|
||||
```javascript
|
||||
// 登录后存储令牌
|
||||
localStorage.setItem('ops_token', response.data.cookie_value);
|
||||
|
||||
// 后续请求自动附加令牌
|
||||
const token = localStorage.getItem('ops_token');
|
||||
fetch('/api/v1/users/profile', {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${token}`
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### 处理响应
|
||||
```javascript
|
||||
async function apiRequest(endpoint, options = {}) {
|
||||
const token = localStorage.getItem('ops_token');
|
||||
|
||||
const response = await fetch(`/api/v1${endpoint}`, {
|
||||
...options,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': `Bearer ${token}`,
|
||||
...options.headers
|
||||
}
|
||||
});
|
||||
|
||||
const result = await response.json();
|
||||
|
||||
if (result.code === '0') {
|
||||
return result.data;
|
||||
} else {
|
||||
throw new Error(result.message);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 常见问题
|
||||
|
||||
1. **401 Unauthorized**
|
||||
- 检查令牌是否过期
|
||||
- 确保请求头格式正确
|
||||
- 尝试重新登录获取新令牌
|
||||
|
||||
2. **400 Bad Request**
|
||||
- 检查请求体JSON格式
|
||||
- 验证必填字段是否提供
|
||||
- 检查字段类型和值范围
|
||||
|
||||
3. **500 Internal Server Error**
|
||||
- 查看服务器日志
|
||||
- 检查数据库连接
|
||||
- 验证文件权限
|
||||
|
||||
### 日志位置
|
||||
- 后端日志: 控制台输出或日志文件
|
||||
- 访问日志: `backend/logs/access.log`
|
||||
- 错误日志: `backend/logs/error.log`
|
||||
|
||||
---
|
||||
|
||||
*文档版本: v1.0.0*
|
||||
*最后更新: 2026-03-31*
|
||||
*保持联系: support@example.com*
|
||||
Reference in New Issue
Block a user