5.6 KiB
5.6 KiB
HTTP API
1. 用户注册
- URL:
/api/register
- 方法:
POST
- 请求头:
Content-Type: application/json
- 请求体:
{
"username": "string",
"password": "string",
"avatar": "string" // 可选,默认为'default_avatar.png'
}
- 响应:
- 成功:
{
"type": "register_1",
"error": false,
"message": "User registered successfully"
}
- 用户名已存在:
{
"type": "register_0",
"success": false,
"message": "Username already exists"
}
- 用户名格式错误(返回状态码400):
{
"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):
{
"type": "register_0",
"success": False,
"message": "Invalid avatar format. Only .png or .jpg allowed"
}
- 其他错误(如数据库错误):
{
"type": "register_-1",
"error": true,
"message": "错误详情"
}
2. 用户登录
- URL:
/api/login
- 方法:
POST
- 请求头:
Content-Type: application/json
- 请求体:
{
"username": "string",
"password": "string"
}
- 响应:
- 成功:
{
"type": "login_1",
"status": "success",
"token": "string", // 令牌,用于后续请求
"avatar": "string" // 用户头像的URL
}
- 账号已登录(返回状态码409):
{
"type": "login",
"status": "error_0",
"message": "Account already logged in"
}
- 凭证错误:
{
"type": "login_0",
"status": "error",
"message": "Invalid credentials"
}
3. 发送聊天消息
- URL:
/api/chat
- 方法:
POST
- 请求头:
Content-Type: application/json
Authorization: <token>
// 登录时获取的令牌- 请求体:
{
"message": "string"
}
- 响应:
- 成功:
{
"type": "chat",
"status": "success"
}
- 令牌无效或缺失(返回状态码401):
{
"type": "chat",
"status": "error"
}
4. 获取头像
- URL:
/avatar/<username>/<filename>
- 方法:
GET
- 响应:
- 返回用户头像文件(如果存在),否则返回默认头像。
Socket API
Socket服务器运行在8889
端口。客户端连接后,可以发送JSON格式的消息。每个消息必须包含type
字段,表示操作类型。
消息格式
所有消息均为JSON格式,编码为UTF-8字符串发送。
1. 注册
- 请求:
{
"type": "register",
"username": "string",
"password": "string",
"avatar": "string" // 可选
}
- 响应:
- 成功:
{
"type": "register_1",
"error": false,
"message": "User registered successfully"
}
- 用户名已存在:
{
"type": "register_0",
"success": false,
"message": "Username already exists"
}
- 用户名格式错误:
{
"type": "register_-2",
"success": false,
"message": "Invalid username format"
}
- 头像格式错误:
{
"type": "register_-3",
"success": false,
"message": "Invalid avatar format. Only .png or .jpg allowed"
}
2. 登录
- 请求:
{
"type": "login",
"username": "string",
"password": "string"
}
- 响应:
- 成功:
{
"type": "login",
"status": "success",
"message": "Login successful",
"token": "string", // 用于后续操作的令牌
"username": "string", // 登录的用户名
"avatar": "string" // 头像URL
}
- 账号已登录:
{
"type": "login",
"status": "error_-1",
"message": "Account already logged in"
}
- 凭证错误:
{
"type": "login",
"status": "error_0",
"message": "Invalid credentials"
}
3. 发送聊天消息
- 请求:
{
"type": "chat",
"token": "string", // 登录时获取的令牌
"message": "string" // 聊天内容
}
- 响应:
- 成功:
{
"type": "chat",
"status": "success"
}
- 令牌无效:
{
"type": "chat",
"status": "error_It",
"message": "Invalid token"
}
- 未登录:
{
"type": "chat",
"status": "error_Nli",
"message": "Not logged in"
}
4. 心跳检测
- 请求:
{
"type": "heartbeat",
"token": "string"
}
- 响应:
- 成功:
{
"type": "heartbeat",
"status": "success"
}
- 失败:
{
"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返回409,Socket返回错误)。
-
服务器会定期(5分钟)检查不活跃的连接并清理。
-
客户端应每5分钟发送一次心跳包以保持连接活跃。
注意事项
-
令牌有效期为1小时,每次使用会刷新有效期。
-
头像的获取通过HTTP GET请求,路径为
/avatar/<username>/<filename>
。
请根据实际情况调整使用。