Files
my_site/docs/api-reference.md

700 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# API 参考文档
本文档是当前后端接口边界的快速参考,不是 OpenAPI 替代品。
目标是帮助开发、重构、测试和 Code Review 快速回答三个问题:
- 这个能力现在走哪组接口
- 这组接口是否需要登录或管理员身份
- 这组接口当前属于稳定主线、兼容保留,还是正在迁移中的边界
如果接口细节和本文档冲突,以当前控制器和安全配置为准:
- `backend/src/main/java/com/yoyuzh/config/SecurityConfig.java`
- `backend/src/main/java/com/yoyuzh/**/**/*Controller.java`
## 1. 接口分层总览
### 1.1 公开接口
无需登录即可访问:
- `/api/auth/**`
- `/api/app/android/**`
- `GET /api/v2/site/ping`
- `GET /api/v2/shares/{token}`
- `GET /api/v2/shares/{token}?download`
- `POST /api/v2/shares/{token}/verify-password`
- `/api/transfer/**`
- `GET /api/files/share-links/{token}`
- `/`
注意:
- `/api/transfer/**` 在安全层面是公开的,但其中“发送离线快传”“查看自己的离线快传”“导入到网盘”等操作会在控制器或业务层再要求登录。
### 1.2 登录后接口
需要 Bearer Token
- `/api/user/**`
- `/api/files/**`
- `/api/v2/files/**`
- `/api/v2/tasks/**`
- `POST /api/v2/shares`
- `GET /api/v2/shares/mine`
- `DELETE /api/v2/shares/{id}`
- `POST /api/v2/shares/{token}/import`
### 1.3 管理接口
- `/api/admin/**`
要求:
- 已登录
- 通过 `@adminAccessEvaluator.isAdmin(authentication)` 校验
当前管理员事实源:
- 当前由 `@adminAccessEvaluator.isAdmin(authentication)` 统一判定。
- 实际判定基于认证里的角色 authority而不是用户名白名单。
- 当前允许进入 `/api/admin/**` 的角色是 `ROLE_MODERATOR``ROLE_ADMIN`
- 因此这里已经不再依赖 `app.admin.usernames` 作为管理权限来源。
## 2. 认证与用户模块
控制器:
- `backend/src/main/java/com/yoyuzh/auth/AuthController.java`
- `backend/src/main/java/com/yoyuzh/auth/DevAuthController.java`
- `backend/src/main/java/com/yoyuzh/auth/UserController.java`
### 2.1 `POST /api/auth/register`
用途:
- 注册并直接签发登录态
关键规则:
- 需要邀请码
- 用户名、邮箱、手机号必须唯一
- 成功注册后自动创建默认目录
- 支持可选请求头 `X-Yoyuzh-Client: desktop|mobile`
### 2.2 `POST /api/auth/login`
用途:
- 普通登录
关键规则:
- 支持可选 `X-Yoyuzh-Client`
- 同一用户桌面端和移动端可以同时在线
- 同一客户端类型再次登录会挤掉旧会话
### 2.3 `POST /api/auth/refresh`
用途:
- 刷新 access token 和 refresh token
关键规则:
- refresh token 会旋转,旧 token 失效
- 默认按 `desktop` 兜底
- 若 refresh token 本身带有客户端类型,则沿用原客户端类型
### 2.4 `POST /api/auth/dev-login`
用途:
- 开发环境免密登录
约束:
-`dev` profile 下可用
- 支持可选 `X-Yoyuzh-Client`
### 2.5 `GET /api/user/profile`
用途:
- 获取当前登录用户资料
### 2.6 `PUT /api/user/profile`
用途:
- 修改个人资料
关键规则:
- 邮箱、手机号仍需保持唯一
### 2.7 `POST /api/user/password`
用途:
- 用户自行修改密码
关键规则:
- 旧密码必须正确
- 修改后旧会话和旧 refresh token 失效
- 会重新签发新的登录态
### 2.8 头像接口
- `POST /api/user/avatar/upload/initiate`
- `POST /api/user/avatar/upload`
- `POST /api/user/avatar/upload/complete`
- `GET /api/user/avatar/content`
用途:
- 用户头像上传与读取
关键规则:
- 头像属于资料域,不属于普通网盘目录
- 支持直传初始化和代理上传
- 完成上传时会替换旧头像引用
## 3. Android 发布接口
控制器:
- `backend/src/main/java/com/yoyuzh/config/AndroidReleaseController.java`
### 3.1 `GET /api/app/android/latest`
用途:
- 获取最新 Android 安装包元信息
特点:
- 公开接口
- 读取后端当前发布元数据
### 3.2 下载接口
- `GET /api/app/android/download`
- `GET /api/app/android/download/{fileName}`
用途:
- 下载当前或指定名称的 Android 安装包
特点:
- 公开接口
## 4. 网盘主接口(旧主线,仍在使用)
控制器:
- `backend/src/main/java/com/yoyuzh/files/core/FileController.java`
这组接口仍然是当前网盘主业务入口,尤其是:
- 列表
- 目录创建
- 文件操作
- 下载
- 回收站
- 旧分享接口
### 4.1 上传接口
- `POST /api/files/upload`
- `POST /api/files/upload/initiate`
- `POST /api/files/upload/complete`
用途:
- 兼容旧上传流程
当前定位:
- 仍可用
- 但新上传主线已经转向 v2 上传会话
关键规则:
- 路径和文件名必须合法
- 同目录禁止重名
- 受系统限制、用户限制、默认存储策略限制共同约束
### 4.2 目录与列表
- `POST /api/files/mkdir`
- `GET /api/files/list`
- `GET /api/files/recent`
用途:
- 创建目录
- 分页列目录
- 最近文件
关键规则:
- `path` 必须是合法目录路径
- 创建目录时根目录 `/` 不能再次创建
### 4.3 下载
- `GET /api/files/download/{fileId}`
- `GET /api/files/download/{fileId}/url`
用途:
- 下载文件或目录压缩包
- 获取可直接下载的 URL
关键规则:
- 目录下载会被压缩为 zip
- 普通文件优先返回直链或重定向
- 特定公开安装包走专用下载逻辑
### 4.4 文件操作
- `PATCH /api/files/{fileId}/rename`
- `PATCH /api/files/{fileId}/move`
- `POST /api/files/{fileId}/copy`
- `DELETE /api/files/{fileId}`
用途:
- 重命名
- 移动
- 复制
- 删除
关键规则:
- `DELETE` 语义是“移入回收站”,不是立即物理删除
- 目录不能移动或复制到自己或自己的子目录
- 所有写操作都要经过同名冲突和配额判断
### 4.5 回收站
- `GET /api/files/recycle-bin`
- `POST /api/files/recycle-bin/{fileId}/restore`
用途:
- 查看回收站根条目
- 恢复回收站条目
关键规则:
- 恢复按整组恢复
- 恢复前检查原路径冲突和配额
### 4.6 旧分享接口
- `POST /api/files/{fileId}/share-links`
- `GET /api/files/share-links/{token}`
- `POST /api/files/share-links/{token}/import`
用途:
- 旧版分享创建、查看、导入
当前定位:
- 仍存在
- 但新分享主线已经转向 `/api/v2/shares/**`
注意:
- 旧接口和 v2 分享接口能力并不完全一致
- 后续开发应优先确认是否继续沿用这套接口
## 5. v2 文件接口
控制器:
- `backend/src/main/java/com/yoyuzh/api/v2/files/UploadSessionV2Controller.java`
- `backend/src/main/java/com/yoyuzh/api/v2/files/FileSearchV2Controller.java`
- `backend/src/main/java/com/yoyuzh/api/v2/files/FileEventsV2Controller.java`
这组接口当前承担的是“新能力”而不是完整替代旧 `/api/files/**`
### 5.1 v2 上传会话
- `POST /api/v2/files/upload-sessions`
- `GET /api/v2/files/upload-sessions/{sessionId}`
- `DELETE /api/v2/files/upload-sessions/{sessionId}`
- `GET /api/v2/files/upload-sessions/{sessionId}/prepare`
- `POST /api/v2/files/upload-sessions/{sessionId}/content`
- `GET /api/v2/files/upload-sessions/{sessionId}/parts/{partIndex}/prepare`
- `PUT /api/v2/files/upload-sessions/{sessionId}/parts/{partIndex}`
- `POST /api/v2/files/upload-sessions/{sessionId}/complete`
用途:
- 统一上传会话生命周期
上传模式:
- `PROXY`
- `DIRECT_SINGLE`
- `DIRECT_MULTIPART`
关键规则:
- 上传模式由默认存储策略能力决定
- 会话只属于创建者
- 已完成、已取消、已过期、已失败会话不能继续上传
- multipart 必须先准备分片上传,再记录分片,再完成会话
### 5.2 文件搜索
- `GET /api/v2/files/search`
用途:
- 组合条件搜索当前用户文件
支持条件:
- 名称
- 类型 `file|directory|all`
- 大小上下界
- 创建时间上下界
- 更新时间上下界
- 分页
### 5.3 文件事件流
- `GET /api/v2/files/events`
用途:
- SSE 订阅文件变更事件
关键参数:
- `path`,默认 `/`
- 可选请求头 `X-Yoyuzh-Client-Id`
## 6. v2 分享接口
控制器:
- `backend/src/main/java/com/yoyuzh/api/v2/shares/ShareV2Controller.java`
这是当前更完整的分享接口组。
### 6.1 创建与管理
- `POST /api/v2/shares`
- `GET /api/v2/shares/mine`
- `DELETE /api/v2/shares/{id}`
用途:
- 创建分享
- 查看自己创建的分享
- 删除自己的分享
关键规则:
- 当前只支持文件,不支持目录
- 可设置密码、过期时间、最大次数、是否允许下载、是否允许导入
### 6.2 公共访问
- `GET /api/v2/shares/{token}`
- `GET /api/v2/shares/{token}?download`
- `POST /api/v2/shares/{token}/verify-password`
用途:
- 查看分享
- 下载分享
- 验证密码
关键规则:
- 公开可访问
- 过期或次数耗尽后失效
- 有密码时需要先验密,或下载时携带密码
### 6.3 导入分享
- `POST /api/v2/shares/{token}/import`
用途:
- 把分享文件导入自己的网盘
关键规则:
- 必须登录
-`allowImport` 开关控制
- 当前实现中会消耗同一个分享次数额度
## 7. 快传接口
控制器:
- `backend/src/main/java/com/yoyuzh/transfer/TransferController.java`
### 7.1 会话创建与查询
- `POST /api/transfer/sessions`
- `GET /api/transfer/sessions/lookup`
- `POST /api/transfer/sessions/{sessionId}/join`
用途:
- 创建在线或离线快传会话
- 通过取件码查找会话
- 加入在线会话或确认离线会话
关键规则:
- 创建在线快传允许匿名
- 创建离线快传要求登录
- 在线快传只允许首个接收者加入
### 7.2 离线快传文件
- `GET /api/transfer/sessions/offline/mine`
- `POST /api/transfer/sessions/{sessionId}/files/{fileId}/content`
- `GET /api/transfer/sessions/{sessionId}/files/{fileId}/download`
- `POST /api/transfer/sessions/{sessionId}/files/{fileId}/import`
用途:
- 查看自己的离线快传记录
- 上传离线快传文件
- 下载离线快传文件
- 导入离线快传文件到网盘
关键规则:
- 查看自己的离线快传记录需要登录
- 上传离线快传文件需要登录且必须是发送者本人
- 下载可匿名,但会话必须已 `ready`
- 导入需要登录
### 7.3 在线快传信令
- `POST /api/transfer/sessions/{sessionId}/signals`
- `GET /api/transfer/sessions/{sessionId}/signals`
用途:
- WebRTC/在线快传信令交换
特点:
- 公开访问
- 仅对在线会话有意义
## 8. v2 后台任务接口
控制器:
- `backend/src/main/java/com/yoyuzh/api/v2/tasks/BackgroundTaskV2Controller.java`
### 8.1 列表与详情
- `GET /api/v2/tasks`
- `GET /api/v2/tasks/{id}`
用途:
- 查看当前用户自己的后台任务
### 8.2 取消与重试
- `DELETE /api/v2/tasks/{id}`
- `POST /api/v2/tasks/{id}/retry`
用途:
- 取消自己的任务
- 重试失败任务
关键规则:
- 只有失败任务可以重试
### 8.3 创建任务
- `POST /api/v2/tasks/archive`
- `POST /api/v2/tasks/extract`
- `POST /api/v2/tasks/media-metadata`
用途:
- 为当前用户文件创建归档、解压、媒体元数据任务
关键规则:
- 任务目标文件必须属于当前用户
- 提交的 `path` 必须与文件当前逻辑路径一致
- 不同任务类型对文件类型有额外要求
## 9. 管理接口
控制器:
- `backend/src/main/java/com/yoyuzh/admin/AdminController.java`
当前管理端覆盖的是真实治理能力,不只是统计看板。
### 9.1 概览与系统设置
- `GET /api/admin/summary`
- `GET /api/admin/settings`
- `PATCH /api/admin/settings/registration/invite-code`
- `POST /api/admin/settings/registration/invite-code/rotate`
- `GET /api/admin/filesystem`
- `PATCH /api/admin/settings/offline-transfer-storage-limit`
用途:
- 查看全局指标
- 查看系统设置快照
- 修改邀请码
- 轮换邀请码
- 查看文件系统与存储能力
- 修改离线快传总容量上限
注意:
- 当前管理台“可写设置”边界很窄,很多设置只是只读快照
### 9.2 用户治理
- `GET /api/admin/users`
- `PATCH /api/admin/users/{userId}/role`
- `PATCH /api/admin/users/{userId}/status`
- `PUT /api/admin/users/{userId}/password`
- `PATCH /api/admin/users/{userId}/storage-quota`
- `PATCH /api/admin/users/{userId}/max-upload-size`
- `POST /api/admin/users/{userId}/password/reset`
用途:
- 用户查询与治理
关键规则:
- 封禁用户会让旧登录态失效
- 管理员修改用户密码会让旧登录态失效
- 密码仍需满足密码规则
### 9.3 文件、分享、任务、实体
- `GET /api/admin/files`
- `DELETE /api/admin/files/{fileId}`
- `GET /api/admin/file-blobs`
- `GET /api/admin/shares`
- `DELETE /api/admin/shares/{shareId}`
- `GET /api/admin/tasks`
- `GET /api/admin/tasks/{taskId}`
用途:
- 全局文件治理
- 全局分享治理
- 全局任务治理
- 全局文件实体 / blob 视图
### 9.4 存储策略
- `GET /api/admin/storage-policies`
- `POST /api/admin/storage-policies`
- `PUT /api/admin/storage-policies/{policyId}`
- `PATCH /api/admin/storage-policies/{policyId}/status`
- `POST /api/admin/storage-policies/migrations`
用途:
- 查询、创建、修改、启停存储策略
- 创建迁移任务
关键规则:
- 默认策略不能被禁用
- 迁移当前只支持同运行时后端类型
- 目标策略必须已启用
## 10. 站点健康接口
控制器:
- `backend/src/main/java/com/yoyuzh/api/v2/site/SiteV2Controller.java`
- `backend/src/main/java/com/yoyuzh/config/ApiRootController.java`
### 10.1 `GET /api/v2/site/ping`
用途:
- v2 站点健康检查
### 10.2 `GET /`
用途:
- 根路径可用性检查
## 11. 当前接口演进状态
### 11.1 当前稳定主线
- 认证与用户资料:`/api/auth/**``/api/user/**`
- 网盘主操作:`/api/files/**`
- 快传:`/api/transfer/**`
- 管理台:`/api/admin/**`
- 新分享主线:`/api/v2/shares/**`
- 新上传主线:`/api/v2/files/upload-sessions/**`
- 新任务主线:`/api/v2/tasks/**`
### 11.2 当前并存边界
- 旧分享:`/api/files/share-links/**`
- 新分享:`/api/v2/shares/**`
- 旧上传:`/api/files/upload/**`
- 新上传:`/api/v2/files/upload-sessions/**`
这些边界当前是“并存”,不是“完全迁移完成”。
## 12. 接口层已知风险
1. 管理员权限规则不由单一领域字段决定,容易在前后端或测试里误判。
2. 旧分享和 v2 分享并存,后续加需求时容易加错接口组。
3. 旧上传与 v2 上传会话并存,规则变更时容易只改一边。
4. `/api/transfer/**` 安全层公开、业务层局部要求登录,这个边界必须在测试里显式覆盖。
5. 当前没有一份单独文档明确“哪些接口是兼容保留,哪些接口是后续唯一主线”,后续若继续演进应优先补这条决策。
## 13. 2026-04-11 Admin 审计能力补充
管理台新增审计查询接口(只读):
- `GET /api/admin/audits`
用途:
- 查询管理端治理写操作的审计日志;
- 支持按 `actorQuery``actionType``targetType``targetId` 过滤;
- 返回字段包含 actor、action、target、summary、detailsJson、createdAt。
当前接入审计记录的写路径:
- 设置治理:邀请码更新/轮换、离线快传容量上限更新
- 用户治理:角色、封禁、密码、配额、上传上限、重置密码
- 资源治理:删除分享、删除文件
- 存储治理:策略创建、更新、启停、迁移任务创建