chatserver/API3.1.3.md
2025-06-14 03:25:22 +08:00

338 lines
5.6 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.

## HTTP API
### 1. 用户注册
- **URL**: `/api/register`
- **方法**: `POST`
- **请求头**: `Content-Type: application/json`
- **请求体**:
```json
{
"username": "string",
"password": "string",
"avatar": "string" // 可选,默认为'default_avatar.png'
}
```
- **响应**:
- 成功:
```json
{
"type": "register_1",
"error": false,
"message": "User registered successfully"
}
```
- 用户名已存在:
```json
{
"type": "register_0",
"success": false,
"message": "Username already exists"
}
```
- 用户名格式错误返回状态码400:
```json
{
"type": "register_-2",
"success": false,
"message": "Invalid username. Must be 2-20 characters, start with a letter or symbol, and contain only letters, numbers, or symbols: _!@#$%^&+-~?"
}
```
- 头像格式错误(仅允许.png或.jpg:
```json
{
"type": "register_0",
"success": False,
"message": "Invalid avatar format. Only .png or .jpg allowed"
}
```
- 其他错误(如数据库错误):
```json
{
"type": "register_-1",
"error": true,
"message": "错误详情"
}
```
### 2. 用户登录
- **URL**: `/api/login`
- **方法**: `POST`
- **请求头**: `Content-Type: application/json`
- **请求体**:
```json
{
"username": "string",
"password": "string"
}
```
- **响应**:
- 成功:
```json
{
"type": "login_1",
"status": "success",
"token": "string", // 令牌,用于后续请求
"avatar": "string" // 用户头像的URL
}
```
- 账号已登录返回状态码409:
```json
{
"type": "login",
"status": "error_0",
"message": "Account already logged in"
}
```
- 凭证错误:
```json
{
"type": "login_0",
"status": "error",
"message": "Invalid credentials"
}
```
### 3. 发送聊天消息
- **URL**: `/api/chat`
- **方法**: `POST`
- **请求头**: `Content-Type: application/json`
- `Authorization: <token>` // 登录时获取的令牌
- **请求体**:
```json
{
"message": "string"
}
```
- **响应**:
- 成功:
```json
{
"type": "chat",
"status": "success"
}
```
- 令牌无效或缺失返回状态码401:
```json
{
"type": "chat",
"status": "error"
}
```
### 4. 获取头像
- **URL**: `/avatar/<username>/<filename>`
- **方法**: `GET`
- **响应**:
- 返回用户头像文件(如果存在),否则返回默认头像。
## Socket API
Socket服务器运行在`8889`端口。客户端连接后可以发送JSON格式的消息。每个消息必须包含`type`字段,表示操作类型。
### 消息格式
所有消息均为JSON格式编码为UTF-8字符串发送。
### 1. 注册
- **请求**:
```json
{
"type": "register",
"username": "string",
"password": "string",
"avatar": "string" // 可选
}
```
- **响应**:
- 成功:
```json
{
"type": "register_1",
"error": false,
"message": "User registered successfully"
}
```
- 用户名已存在:
```json
{
"type": "register_0",
"success": false,
"message": "Username already exists"
}
```
- 用户名格式错误:
```json
{
"type": "register_-2",
"success": false,
"message": "Invalid username format"
}
```
- 头像格式错误:
```json
{
"type": "register_-3",
"success": false,
"message": "Invalid avatar format. Only .png or .jpg allowed"
}
```
### 2. 登录
- **请求**:
```json
{
"type": "login",
"username": "string",
"password": "string"
}
```
- **响应**:
- 成功:
```json
{
"type": "login",
"status": "success",
"message": "Login successful",
"token": "string", // 用于后续操作的令牌
"username": "string", // 登录的用户名
"avatar": "string" // 头像URL
}
```
- 账号已登录:
```json
{
"type": "login",
"status": "error_-1",
"message": "Account already logged in"
}
```
- 凭证错误:
```json
{
"type": "login",
"status": "error_0",
"message": "Invalid credentials"
}
```
### 3. 发送聊天消息
- **请求**:
```json
{
"type": "chat",
"token": "string", // 登录时获取的令牌
"message": "string" // 聊天内容
}
```
- **响应**:
- 成功:
```json
{
"type": "chat",
"status": "success"
}
```
- 令牌无效:
```json
{
"type": "chat",
"status": "error_It",
"message": "Invalid token"
}
```
- 未登录:
```json
{
"type": "chat",
"status": "error_Nli",
"message": "Not logged in"
}
```
### 4. 心跳检测
- **请求**:
```json
{
"type": "heartbeat",
"token": "string"
}
```
- **响应**:
- 成功:
```json
{
"type": "heartbeat",
"status": "success"
}
```
- 失败:
```json
{
"type": "heartbeat",
"status": "error"
}
```
## 错误码说明
### 注册相关
- `register_1`: 注册成功
- `register_0`: 用户名已存在
- `register_-1`: 数据库错误
- `register_-2`: 用户名格式错误
- `register_-3`: 头像格式错误仅Socket
### 登录相关
- `login_1`: 登录成功HTTP
- `login_0`: 凭证错误HTTP或登录失败Socket中为`error_0`
- `error_-1`Socket: 账号已登录
### 聊天相关
- `error_Mt`: 令牌缺失Socket
- `error_It`: 令牌无效Socket
- `error_Nli`: 未登录Socket
## 用户名校验规则
- 长度2-20个字符
- 只能包含字母、数字以及特定符号:`_!@#$%^&+-~?`
- 不能以数字开头
## 头像规则
- 头像文件名必须以`.png``.jpg`结尾。
- 每个用户有专属的头像目录,位于`avatar/<username>`下。
- 默认头像为`avatar/default/default_avatar.png`
## 连接管理
- 每个用户只能有一个活跃连接。如果尝试登录时已有活跃连接则拒绝登录HTTP返回409Socket返回错误
- 服务器会定期5分钟检查不活跃的连接并清理。
- 客户端应每5分钟发送一次心跳包以保持连接活跃。
## 注意事项
- 令牌有效期为1小时每次使用会刷新有效期。
- 头像的获取通过HTTP GET请求路径为`/avatar/<username>/<filename>`
请根据实际情况调整使用。