3.8 KiB
3.8 KiB
MVP v3.0 — API 扩展设计(基于 v2.5)
v3.0 的原则是:尽量复用 v2.5 API,只增量增加 “数据闭环” 与 “WebUI 支持” 所需的最小接口。
1) 认证与权限
沿用 v2.5:
- Header:
Authorization: Bearer <token> - admin token:来自
MVP_INTERNAL_TOKEN - 普通用户 token:由 admin 颁发并持久化在 SQLite
权限规则:
- 非 admin:只能访问自己的 task、自己的数据空间(
/private/users/<user_id>/...)。 - 跨用户访问返回 404(不泄露存在性)。
2) 用户与 SFTPGo 联动(管理员接口)
2.1 创建用户(复用 v2.5)
POST /api/v2/users
- v3.0 行为:成功后,可选联动创建 SFTPGo 用户
- v3.0 默认启用联动:创建 SFTPGo 用户 + 生成一次性密码(password 认证)
- v3.0 仅保留该方案(方案 A):不做外部认证/SSO 集成(留到更后续版本)
data.sftpgo.admin_api_base推荐形如:http://argus-sftpgo:8080/api/v2(包含/api/v2前缀)
2.2 下发 token(复用 v2.5)
POST /api/v2/users/{user_id}/tokens
2.3 禁用用户(复用 v2.5)
POST /api/v2/users/{user_id}:disable
- v3.0 行为:联动禁用 SFTPGo 用户(可选)
2.4 SFTP 凭据管理(新增,管理员或用户自助)
(具体由你确认 v3.0 需要“用户自助”还是“管理员操作”)
重置 SFTP 密码(管理员)
POST /api/v2/users/{user_id}/sftp:reset_password
- 返回:一次性密码(只返回一次,服务端不保存明文)
v3.0 先只做 password 方案;SSH public key 作为后续版本可选增强(不在 v3.0 范围)。
3) 用户自助信息(新增)
3.1 获取当前用户信息
GET /api/v2/me
- 返回示例:
{
"user_id": "alice",
"is_admin": false,
"paths": {
"home": "/private/users/alice",
"datasets": "/private/users/alice/datasets",
"models": "/private/users/alice/models",
"code": "/private/users/alice/code",
"jobs": "/private/users/alice/jobs",
"trash_jobs": "/private/users/alice/trash/jobs"
},
"retention": {
"jobs_trash_after_days": 3,
"jobs_purge_after_days": 7
},
"sftp": {
"host": "h1.example.internal",
"port": 2022,
"username": "alice"
}
}
3.2 Jobs Retention 提示(新增)
为了支撑 WebUI 展示与用户预期管理,可在 /api/v2/me 或单独接口返回:
jobs_trash_after_days:默认 3jobs_purge_after_days:默认 7jobs_root:/private/users/<me>/jobstrash_jobs_root:/private/users/<me>/trash/jobsrecommendations:提示用户把需要长期保存的产物移动到models/或datasets/
4) 数据浏览/下载(可选,v3.0 最小化)
说明:上传/下载主通道仍是 SFTP。
WebUI 如果要提供“快速浏览/查看”,可实现只读接口(避免实现大文件上传/断点等复杂逻辑)。
4.1 列目录
GET /api/v2/files?path=/private/users/alice
- 权限:path 必须在
/private/common/或/private/users/<me>/下 - 返回:文件列表(name/type/size/mtime)
4.2 下载文件(小文件为主)
GET /api/v2/files:download?path=/private/users/alice/jobs/.../logs/...
- 返回:流式下载
- 大文件仍建议走 SFTP
5) TaskSpec 路径校验升级(v3.0 关键)
v2.5:仅允许 /private/common/...
v3.0:允许 /private/common/... 与 /private/users/<me>/...
应用字段(至少):
train_file/val_filecode_path:仍仅允许/private/common/...(v3.0 不支持执行用户 code)- 本地模型路径字段(如果引入):允许
/private/users/<me>/models/...
6) WebUI 路由(新增)
由 API server 托管:
GET /ui:主页面GET /ui/login:token 登录页- 静态资源:
/ui/static/...
WebUI 的所有操作均调用同源 API(不额外开 CORS)。