IM/docs/接口文档(REST API) — 聊天系统.md

8.0 KiB
Raw Blame History

接口文档REST API — 聊天系统

统一响应格式JSON

{
  "code": 0,
  "message": "请求成功",
  "data": {}
}
  • code:参照响应 Code 规范0 成功,非 0 为错误)。
  • message:提示文本。
  • data:返回主体。

通用约定

  • 所有需要登录的接口必须在 Header 中带 Authorization: Bearer <token>
  • 时间戳统一使用 Unix 秒。
  • 分页统一采用 page第几页从1开始limit(每页大小)或基于时间/消息ID的 afterMessageId / beforeTimestamp
  • 幂等性:对于可能重试的写操作,请求体中带 requestId
  • Content-Type: application/json(文件上传除外)。
  • 返回错误码请参考前面的响应 Code 文档。

目录

  1. 鉴权Auth
  2. 用户User
  3. 好友Friend
  4. 会话Conversation
  5. 消息Message
  6. 文件/上传File
  7. 群组Group
  8. 通知Notification
  9. 管理后台Admin
  10. 常见错误与限流

1. 鉴权Auth

1.1 注册

  • URL: POST /api/v1/auth/register
  • 请求:
{
  "username": "alice",
  "password": "password123",
  "phone": "13800000000",
  "email":"admin@admin.com",
  "nickname":"测试用户",
  "avatar": "https://cdn.example.com/avatar/1001.png",
}
  • 成功响应:
{
  "code": 0,
  "message": "注册成功",
  "data": { "userId": 1001 }
}

1.2 登录(返回 Token

  • URL: POST /api/v1/auth/login
  • 请求:
{
  "username": "alice",
  "password": "password123",
  "deviceId": "uuid-device-001"
}
  • 成功响应:
{
  "code": 0,
  "message": "登录成功",
  "data": {
    "token": "eyJ....",
    "expires_in": 3600,
    "refreshToken": "rft-xxxx"
  }
}

1.3 刷新 Token

  • URL: POST /api/v1/auth/refresh
  • 请求:
{ "refreshToken": "rft-xxxx", "deviceId": "uuid-device-001" }
  • 响应同登录(返回新 token

2. 用户User

2.1 获取当前用户信息

  • URL: GET /api/v1/user/me
  • Header: Authorization: Bearer <token>
  • 响应 data 示例:
{
  "id": 1001,
  "username": "alice",
  "nickname": "Alice",
  "avatar": "https://cdn.example.com/avatar/1001.png",
  "status": 1
}

2.2 修改用户资料

  • URL: PUT /api/v1/user/profile
  • 请求:
{
  "nickname": "小艾",
  "olinestatus": "0",
  "avatar": "https://..."
}

2.3 根据 id 查询用户(用于搜索/加好友)

  • URL: GET /api/v1/user/{userId}
  • 响应含基本公开信息(不含敏感字段)。

3. 好友Friend

3.1 发送好友申请

  • URL: POST /api/v1/friend/request
  • 请求:
{
  "toUserId": 1002,
  "Description": "我们在项目中认识,申请加好友",
  "requestId": "uuid-req-001"  // 幂等字段
}
  • 成功返回 requestId 或新记录 id。

3.2 列出好友申请(收/发)

  • URL: GET /api/v1/friend/requests?type=received|sent&page=1&limit=20

3.3 处理好友申请(同意/拒绝)

  • URL: POST /api/v1/friend/request/{requestId}/handle
  • 请求:
{ "action": "accept" } // accept | reject

3.4 获取好友列表

  • URL: GET /api/v1/friend/list?page=1&limit=50
  • 返回好友数组id, nickname, avatar, remark

3.5 删除好友 / 拉黑

  • URL: DELETE /api/v1/friend/{friendId}
  • URL: POST /api/v1/friend/{friendId}/block

4. 会话Conversation

4.1 获取会话列表(聊天列表)

  • URL: GET /api/v1/conversations?page=1&limit=50
  • 返回每条会话示例:
{
  "targetId": 1002,
  "chatType": "single",
  "lastMessage": { "messageId": 50001, "contentType":"text", "content":"你好", "timestamp": 1700000000 },
  "unreadCount": 3,
  "updatedAt": 1700000000
}

4.2 删除会话(清空会话/历史)

  • URL: DELETE /api/v1/conversation/{chatType}/{targetId}
  • chatType 为 singlegroup。删除会影响客户端显示/未读计数,历史消息视策略保留或软删除。

5. 消息Message

说明:即时消息优先通过 WebSocket 发送/接收REST 接口用于历史消息读取、离线发送备用、ACK、撤回等。

5.1 发送消息HTTP 版备用)

  • URL: POST /api/v1/message/send
  • 请求:
{
  "requestId": "uuid-msg-001",
  "from": 1001,
  "to": 1002,
  "chatType": "single",
  "contentType": "text",
  "content": "你好",
  "timestamp": 1700000000
}
  • 响应:
{ "code": 0, "data": { "messageId": 50001, "status": "sent" } }
  • 注意:若用户在线,后端可同时通过 WebSocket 推送到接收端。

5.2 拉取历史消息分页或基于消息ID

  • URL: GET /api/v1/messages/history?chatType=single&targetId=1002&beforeMessageId=50000&limit=50
  • 返回消息数组(按时间倒序或正序,双方约定)。

5.3 同步未读/离线消息(登录/重连时)

  • URL: GET /api/v1/messages/sync?since=1700000000afterMessageId=xxxxx
  • 返回:所有未读/未同步消息(或给定时间段内消息)。

5.4 消息已读/送达回执HTTP

  • URL: POST /api/v1/message/ack
  • 请求:
{
  "messageId": 50001,
  "status": "read", // delivered | read
  "chatType": "single",
  "from": 1002, // ack 发送者(接收方)
  "to": 1001
}

5.5 撤回消息

  • URL: POST /api/v1/message/{messageId}/recall
  • 请求:
{ "requestId": "uuid-recall-001" }
  • 响应成功后,服务器会向相关在线端推送 MESSAGE_RECALL 事件,更新 message.status。

5.6 删除单条消息(客户端侧删除/服务端删除)

  • URL: DELETE /api/v1/message/{messageId}
  • 注意区分“仅自己删除”与“全局删除(撤回)”。

6. 文件/上传File

6.1 上传文件(图片/语音/文档)

  • URL: POST /api/v1/file/upload
  • Content-Type: multipart/form-data
  • 字段:file,可选 typeattachedMessageRequestId
  • 成功响应:
{
  "code": 0,
  "data": {
    "fileId": 9001,
    "fileUrl": "https://oss.example.com/xxx.jpg",
    "fileName": "xxx.jpg",
    "fileSize": 12345
  }
}
  • 建议文件先上传到对象存储OSS/S3/MinIO返回 URL消息发送时引用该 URLmessage.content

6.2 下载文件

  • 直接访问 fileUrl 或通过后端代理下载(带鉴权)。

7. 群组Group

7.1 创建群

  • URL: POST /api/v1/group/create
  • 请求:
{
  "name": "项目群",
  "ownerId": 1001,
  "memberIds": [1002,1003],
  "maxMembers": 500,
  "needApproval": true // 加群是否需要审批
}
  • 响应返回 groupId

7.2 获取群信息

  • URL: GET /api/v1/group/{groupId}

7.3 邀请入群

  • URL: POST /api/v1/group/{groupId}/invite
  • 请求:
{ "inviter":1001, "invitees":[1004,1005], "message":"来加入我们吧" }
  • 若群需要审批,发送 group_join_request;否则直接加入并更新 group_member。

7.4 加群申请(用户申请)

  • URL: POST /api/v1/group/{groupId}/join-request
  • 管理员/群主处理:POST /api/v1/group/join-request/{requestId}/handle

7.5 群成员管理(踢人/设管理员/退出群)

  • 踢人:POST /api/v1/group/{groupId}/kick
  • 退出:POST /api/v1/group/{groupId}/leave
  • 设管理员:POST /api/v1/group/{groupId}/role

8. 通知Notification

8.1 获取通知列表

  • URL: GET /api/v1/notifications?page=1&limit=50
  • 类型包含:好友请求、群邀请、系统公告等。

8.2 标记通知为已读

  • URL: POST /api/v1/notification/{notificationId}/read

9. 管理后台Admin

仅管理员或具备权限的账号访问(需在 token 中包含角色或额外权限校验)

9.1 管理员登录(同 auth

  • URL: POST /api/v1/admin/login

9.2 查询用户列表

  • URL: GET /api/v1/admin/users?page=1&limit=50&keyword=alice

9.3 禁用/启用用户

  • URL: POST /api/v1/admin/user/{userId}/ban
  • 请求:
{ "action": "ban", "reason": "违规传播" } // action: ban | unban

9.4 查询操作日志

  • URL: GET /api/v1/admin/logs?page=1&limit=50