XuqmGroup-Web/docs-site/docs/server/api.md
XuqmGroup e5552044ae docs(deploy): 添加部署文档并更新SDK API设计规范
- 新增完整的XuqmGroup部署文档,包含服务器配置、Docker Compose部署策略
- 更新SDK API重设计规范至V2.0,统一各端SDK初始化和登录接口
- 添加安全设计规范文档,涵盖密码安全、AppSecret验证等内容
- 新增离线推送架构设计文档,定义厂商推送集成方案
- 重构SDK登录流程,统一使用userId + userSig鉴权模式
- 移除dbName等外部配置参数,实现零感知平台地址配置
- 完善部署架构图和配置示例文件
2026-05-02 11:29:50 +08:00

4.6 KiB

Server API 参考

Base URLhttps://dev.xuqinmin.com

所有 API 通过 Nginx 反代,无需区分内部端口。

认证

/api/im/auth/login 外,所有 IM 接口需在请求头携带 JWT Token

Authorization: Bearer <token>

Token 由 /api/im/auth/login 接口签发。


IM 服务(/api/im/

登录 · 获取 Token

POST /api/im/auth/login

Query 参数

参数 必填 说明
appId 应用 ID
userId 用户 ID

请求头

必填 说明
X-App-Timestamp 当前时间戳(毫秒)
X-App-Nonce 随机字符串
X-App-Signature HmacSHA256 签名

签名 Payload(已简化,不再包含 nickname/avatar

{appId}\n{userId}\n{timestamp}\n{nonce}

响应

{ "token": "eyJ..." }

SDK 侧不做续签;登录态更新由业务侧重新登录完成。


WebSocket 连接

WSS /ws/im?token=<token>&appId=<appId>
  • 协议STOMP over WebSocket
  • 单聊订阅:/user/{userId}/queue/messages
  • 群聊订阅:/topic/group/{groupId}

发送消息

POST /api/im/messages
Authorization: Bearer <token>
Content-Type: application/json

请求体

{
  "toId":     "user_002",
  "chatType": "SINGLE",
  "msgType":  "TEXT",
  "content":  "Hello!"
}

chatTypeSINGLE | GROUP

msgTypeTEXT | IMAGE | VIDEO | AUDIO | FILE | CUSTOM | LOCATION | NOTIFY | RICH_TEXT | CALL_AUDIO | CALL_VIDEO | FORWARD

响应ImMessage 对象


撤回消息

PUT /api/im/messages/{messageId}/revoke
Authorization: Bearer <token>

响应:更新后的 ImMessagestatus: "REVOKED"msgType: "REVOKED"


消息历史(单聊)

GET /api/im/messages/history?appId=&userId=&toId=&page=0&size=50
Authorization: Bearer <token>

响应:分页 ImMessage 列表


创建群组

POST /api/im/groups
Authorization: Bearer <token>
Content-Type: application/json
{
  "appId":     "ak_demo_chat",
  "name":      "开发群",
  "memberIds": ["user_001", "user_002"]
}

响应ImGroup 对象


获取群列表

GET /api/im/groups?appId=ak_demo_chat
Authorization: Bearer <token>

添加群成员

POST /api/im/groups/{groupId}/members
Authorization: Bearer <token>
Content-Type: application/json

{ "userId": "user_003" }

移除群成员

DELETE /api/im/groups/{groupId}/members/{targetUserId}
Authorization: Bearer <token>

版本管理服务(/api/v1/updates/ 和 /api/v1/rn/

检查 App 更新

GET /api/v1/updates/check?appId=&platform=ANDROID&versionCode=1

响应

{
  "hasUpdate":   true,
  "versionCode": 2,
  "versionName": "1.0.1",
  "forceUpdate": false,
  "downloadUrl": "https://cdn.example.com/app.apk",
  "appStoreUrl": null,
  "releaseNotes": "修复若干问题"
}

检查 RN Bundle 热更新

GET /api/v1/rn/check?appId=&moduleId=home&version=1.0.0&platform=ANDROID

响应

{
  "hasUpdate":   true,
  "version":     "1.0.1",
  "downloadUrl": "https://cdn.example.com/bundles/home_1.0.1.bundle",
  "md5":         "a1b2c3d4...",
  "size":        204800
}

下载 Bundle

downloadUrl 返回的 URL 可直接 GET 下载,响应体为 bundle 二进制内容。


租户服务(/api/

创建应用(租户管理后台调用)

POST /api/apps
Authorization: Bearer <tenant_token>
Content-Type: application/json

{ "name": "我的 App", "platform": "ANDROID" }

数据模型

ImMessage

{
  "id":               "uuid",
  "appId":            "ak_demo_chat",
  "fromUserId":       "user_001",
  "toId":             "user_002",
  "chatType":         "SINGLE",
  "msgType":          "TEXT",
  "content":          "Hello!",
  "status":           "SENT",
  "mentionedUserIds": [],
  "createdAt":        "2026-04-24T10:00:00"
}

ImGroup

{
  "id":        "group_uuid",
  "appId":     "ak_demo_chat",
  "name":      "开发群",
  "creatorId": "user_001",
  "memberIds": ["user_001", "user_002"],
  "adminIds":  ["user_001"],
  "createdAt": "2026-04-24T10:00:00"
}

错误码

HTTP 状态 code 说明
400 400 请求参数错误
401 401 Token 无效或签名验证失败
403 403 无权限操作(如撤回他人消息)
404 404 资源不存在
500 500 服务器内部错误

错误响应格式:

{ "code": 403, "message": "只能撤回自己发送的消息" }