Files
my_site/docs/api-reference.md

15 KiB
Raw Blame History

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

用途:

  • 查询管理端治理写操作的审计日志;
  • 支持按 actorQueryactionTypetargetTypetargetId 过滤;
  • 返回字段包含 actor、action、target、summary、detailsJson、createdAt。

当前接入审计记录的写路径:

  • 设置治理:邀请码更新/轮换、离线快传容量上限更新
  • 用户治理:角色、封禁、密码、配额、上传上限、重置密码
  • 资源治理:删除分享、删除文件
  • 存储治理:策略创建、更新、启停、迁移任务创建