chatserver/API3.1.2.md
2025-06-14 03:23:50 +08:00

5.6 KiB
Raw Blame History

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_-1Socket: 账号已登录

聊天相关

  • 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>

请根据实际情况调整使用。