Skip to content

API 参考

RecordPlatform REST API 文档。

交互式文档

默认凭据:admin / 123456

基础 URL

http://localhost:8000/record-platform

认证

/auth/** 外,所有端点都需要 JWT 认证。

获取 Token

http
POST /auth/login
Content-Type: application/json

{
  "username": "admin",
  "password": "123456"
}

响应:

json
{
  "code": 200,
  "data": {
    "token": "eyJhbGciOiJIUzUxMiJ9...",
    "expiresIn": 86400
  }
}

使用 Token

在所有后续请求中包含:

http
Authorization: Bearer <token>

API 端点

认证

方法端点说明
POST/api/v1/auth/login用户登录
POST/api/v1/auth/register用户注册
POST/api/v1/auth/logout用户登出
GET/api/v1/auth/me获取当前用户信息

用户注册

http
POST /api/v1/auth/register
Content-Type: application/json

{
  "email": "user@example.com",
  "code": "123456",
  "username": "user1",
  "password": "securepass",
  "nickname": "显示名称"
}
字段类型必填说明
emailstring用户邮箱地址
codestring邮箱验证码
usernamestring登录用户名
passwordstring用户密码
nicknamestring显示名称(最大 50 字符)

文件

方法端点说明
POST/api/v1/files/upload/start开始分块上传
POST/api/v1/files/upload/chunk上传文件块
POST/api/v1/files/upload/complete完成分块上传
POST/api/v1/files/upload/pause暂停上传
POST/api/v1/files/upload/resume恢复上传
POST/api/v1/files/upload/cancel取消上传
GET/api/v1/files/upload/check检查上传状态
GET/api/v1/files/upload/progress获取上传进度
GET/api/v1/files列出用户文件
GET/api/v1/files/{hash}获取文件详情
GET/api/v1/files/{hash}/download下载文件
DELETE/api/v1/files/{hash}删除文件
GET/api/v1/files/search搜索文件

图片

方法端点说明
POST/api/v1/images/upload/avatar上传用户头像
POST/api/v1/images/upload/image上传通用图片
GET/api/v1/images/download/**下载图片

文件分享

方法端点说明
POST/api/v1/files/share创建分享链接
GET/api/v1/share/{code}/info获取分享信息(公开)
GET/api/v1/files/share/{code}访问分享文件
GET/api/v1/files/shares列出用户分享
DELETE/api/v1/files/share/{code}撤销分享
GET/api/v1/files/share/{code}/logs获取分享访问日志

获取分享信息(公开)

公开端点 - 无需认证。

http
GET /api/v1/share/{shareCode}/info

返回分享详情(包含文件列表)。使用业务码表示分享状态:

业务码含义
200成功
50009分享不存在
50010分享已取消
50011分享已过期

响应:

json
{
  "code": 200,
  "data": {
    "shareCode": "abc123",
    "shareType": 0,
    "expireTime": "2025-01-15T00:00:00Z",
    "files": [
      {
        "fileId": "...",
        "fileName": "document.pdf",
        "fileSize": 1024000
      }
    ]
  }
}

管理(文件管理)

方法端点说明
GET/api/v1/admin/files列出所有文件(管理员)
GET/api/v1/admin/files/{hash}文件详情(含溯源链)
PUT/api/v1/admin/files/{hash}/status更新文件状态
DELETE/api/v1/admin/files/{hash}强制删除文件
GET/api/v1/admin/files/shares列出所有分享
DELETE/api/v1/admin/files/shares/{code}强制取消分享
GET/api/v1/admin/files/shares/{code}/logs分享访问日志
GET/api/v1/admin/files/shares/{code}/stats分享访问统计

权限管理(仅管理员)

方法端点说明
GET/api/v1/system/permissions/users列出所有用户
PUT/api/v1/system/permissions/users/{id}/role更新用户角色
GET/api/v1/system/permissions/roles列出所有角色
GET/api/v1/system/permissions/permissions列出所有权限

工单

方法端点说明
POST/api/v1/tickets创建支持工单
GET/api/v1/tickets列出用户工单
GET/api/v1/tickets/{id}获取工单详情
POST/api/v1/tickets/{id}/reply回复工单
PUT/api/v1/tickets/{id}/status更新工单状态
GET/api/v1/tickets/admin列出所有工单(管理员)
PUT/api/v1/tickets/admin/{id}/assign分配处理人(管理员)
PUT/api/v1/tickets/admin/{id}/status更新状态(管理员)

创建工单

http
POST /api/v1/tickets
Content-Type: application/json

{
  "title": "无法上传大文件",
  "content": "上传超过1GB的文件时,上传失败...",
  "priority": 1,
  "category": 0,
  "attachmentIds": ["file-id-1", "file-id-2"]
}
字段类型必填说明
titlestring工单标题(最大 200 字符)
contentstring工单描述
priorityint0=低, 1=中(默认), 2=高
categoryint见下方类别表(默认:99)
attachmentIdsstring[]关联文件 ID

工单状态

代码状态说明
0PENDING待处理
1PROCESSING处理中
2CONFIRMING待用户确认
3COMPLETED已解决
4CLOSED已关闭

工单优先级

代码优先级
0
1
2

工单类别

代码类别
0Bug 报告
1功能请求
2问题咨询
3反馈建议
99其他

回复工单

http
POST /api/v1/tickets/{id}/reply
Content-Type: application/json

{
  "content": "感谢您的反馈,我们正在调查...",
  "attachmentIds": []
}

好友

方法端点说明
POST/api/v1/friends/requests发送好友请求
GET/api/v1/friends/requests/received获取收到的请求
GET/api/v1/friends/requests/sent获取发送的请求
POST/api/v1/friends/requests/{id}/accept接受好友请求
POST/api/v1/friends/requests/{id}/reject拒绝好友请求
DELETE/api/v1/friends/requests/{id}取消好友请求
GET/api/v1/friends/requests/pending-count获取待处理请求数量
GET/api/v1/friends获取好友列表(分页)
GET/api/v1/friends/all获取所有好友(选择器)
DELETE/api/v1/friends/{id}解除好友关系
PUT/api/v1/friends/{id}/remark更新好友备注
GET/api/v1/friends/search搜索用户

发送好友请求

http
POST /api/v1/friends/requests
Content-Type: application/json

{
  "addresseeId": "user-external-id",
  "message": "你好,交个朋友吧!"
}
字段类型必填说明
addresseeIdstring目标用户的外部 ID
messagestring请求附言(最大 255 字符)

好友请求状态

代码状态说明
0PENDING待处理
1ACCEPTED已接受
2REJECTED已拒绝
3CANCELLED已取消

好友文件分享

方法端点说明
POST/api/v1/friend-shares分享文件给好友
GET/api/v1/friend-shares/received获取收到的分享
GET/api/v1/friend-shares/sent获取发送的分享
GET/api/v1/friend-shares/{id}获取分享详情
POST/api/v1/friend-shares/{id}/read标记为已读
DELETE/api/v1/friend-shares/{id}取消分享
GET/api/v1/friend-shares/unread-count获取未读数量

分享文件给好友

http
POST /api/v1/friend-shares
Content-Type: application/json

{
  "friendId": "friend-external-id",
  "fileHashes": ["hash1", "hash2"],
  "message": "看看这些文件!"
}
字段类型必填说明
friendIdstring好友的外部 ID
fileHashesstring[]要分享的文件哈希数组
messagestring分享附言(最大 255 字符)

SSE(服务器推送事件)

方法端点说明
GET/api/v1/sse/connect订阅事件
DELETE/api/v1/sse/disconnect断开 SSE 连接
GET/api/v1/sse/status检查连接状态

系统监控(仅管理员)

方法端点说明
GET/api/v1/system/stats获取系统统计(用户数、文件数、存储用量、交易数)
GET/api/v1/system/chain-status获取区块链状态(区块高度、节点数、链类型)
GET/api/v1/system/health获取系统健康状态(数据库、Redis、区块链、存储)
GET/api/v1/system/monitor获取聚合监控指标

系统审计(仅管理员)

方法端点说明
GET/api/v1/system/audit/overview获取审计概览数据
GET/api/v1/system/audit/logs/page分页查询审计日志(GET 参数)
POST/api/v1/system/audit/logs/page分页查询审计日志(POST Body)
GET/api/v1/system/audit/logs/{id}获取日志详情
POST/api/v1/system/audit/logs/export导出审计日志到 Excel
GET/api/v1/system/audit/high-frequency获取高频操作记录
POST/api/v1/system/audit/sensitive/page获取敏感操作记录(分页)
GET/api/v1/system/audit/error-stats获取错误操作统计
GET/api/v1/system/audit/time-distribution获取用户时间分布
GET/api/v1/system/audit/configs获取审计配置
PUT/api/v1/system/audit/configs更新审计配置
GET/api/v1/system/audit/check-anomalies检查操作异常
POST/api/v1/system/audit/backup-logs备份历史日志

注意:完整的 REST API 文档(包含所有端点、请求/响应示例和详细字段描述)请参阅项目根目录的 API_DOCUMENTATION.md

响应格式

所有响应遵循此结构:

json
{
  "code": 200,
  "message": "success",
  "data": { ... }
}

状态码

代码含义
200成功
400请求错误
401未授权
403禁止访问
404未找到
429请求过于频繁
500服务器错误

错误响应

json
{
  "code": 400,
  "message": "验证失败",
  "data": null
}

分页

列表端点支持分页:

http
GET /file/list?page=1&size=20&sort=createdAt,desc

响应包含分页信息:

json
{
  "code": 200,
  "data": {
    "records": [...],
    "total": 100,
    "current": 1,
    "size": 20,
    "pages": 5
  }
}

文件上传

单文件上传

http
POST /file/upload
Content-Type: multipart/form-data

file: <binary>

分块上传

对于大文件(>10MB),使用动态分块上传:

动态分块大小策略

系统根据文件大小自动选择最优分块大小以提高性能:

文件大小推荐分块大小
< 10MB2MB
< 100MB5MB
< 500MB10MB
< 2GB20MB
>= 2GB50MB

最大分块限制:80MB(Dubbo 载荷限制为 100MB)

开始分块上传

http
POST /file/upload/start
Content-Type: application/json

{
  "fileName": "large-file.zip",
  "fileSize": 1073741824,
  "contentType": "application/zip",
  "chunkSize": 20971520,
  "totalChunks": 52
}

上传分块

http
POST /file/upload/chunk
Content-Type: multipart/form-data

chunk: <binary>
chunkNumber: 1
totalChunks: 10
fileHash: abc123...

完成上传

所有分块上传完成后:

http
POST /api/v1/files/upload/complete
Content-Type: application/x-www-form-urlencoded

clientId=abc123...

速率限制

API 请求按用户限速:

端点类别限制
认证10次/分钟
文件上传20次/分钟
文件下载100次/分钟
其他60次/分钟

速率限制响应头:

http
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 55
X-RateLimit-Reset: 1609459200

Dubbo 服务

内部服务使用 Dubbo Triple 协议(非 REST)。

BlockChainService

java
// 存储文件到区块链
SharingVO storeFile(String fileHash, String fileKey, String fileName);

// 查询区块链记录
SharingVO queryFile(String txHash);

// 删除区块链记录
void deleteFile(String txHash);

DistributedStorageService

java
// 上传文件块
void uploadChunk(String bucket, String objectKey, byte[] data);

// 下载文件
byte[] downloadFile(String bucket, String objectKey);

// 删除文件
void deleteFile(String bucket, String objectKey);

// 检查文件是否存在
boolean exists(String bucket, String objectKey);

WebSocket 事件(SSE)

订阅实时事件:

javascript
const eventSource = new EventSource('/record-platform/api/v1/sse/connect', {
  headers: { 'Authorization': 'Bearer <token>' }
});

eventSource.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log(data.type, data.payload);
};

注意:原生 EventSource 不支持自定义请求头。平台使用通过查询参数传递的短期令牌来建立认证的 SSE 连接。

事件类型(kebab-case 格式):

  • message-received - 新私信
  • announcement-published - 新系统公告
  • ticket-updated - 工单状态更新或回复
  • friend-request - 收到新好友请求
  • friend-accepted - 好友请求被接受
  • friend-share - 好友分享了文件给你
  • heartbeat - 连接心跳
  • connected - 连接建立成功

Released under the Apache 2.0 License.