本文件用于从零搭建 Pluto iOS App(Swift 原生)。面向「浏览 + 相册 + 登录/管理/上传 + 评论/密码相册」的首版 MVP。你可以直接按此文档完成开发。
首版功能
- 首页照片瀑布流浏览(分页 / 筛选 / 排序)
- 相册列表与相册详情
- 密码相册解锁(OTP Token)
- 点赞(媒体 / 相册)
- 相册评论(列表 + 提交)
- 管理端:登录 / 媒体上传 / 相册管理 / 评论管理(基础)
不包含(后续再做)
- 多用户系统
- 高级搜索、地图视图、幻灯片
- 离线全部下载
在 App 的 Config.plist 或 Environment.swift 中配置:
BASE_URL:站点地址(例如https://photos.example.com)API_BASE_URL(可选):默认与BASE_URL相同DEFAULT_LOCALE:zh或en
MEDIA_THUMB_STYLE/MEDIA_MEDIUM_STYLE/MEDIA_LARGE_STYLE- 控制图片 URL 尺寸参数(App 只使用接口返回
url_*)
- 控制图片 URL 尺寸参数(App 只使用接口返回
所有接口统一返回 ok 字段:
ok: true→ 成功ok: false→ 失败,返回error或err
常用错误码
PASSWORD_REQUIRED(403)INVALID_PASSWORD(403)UNAUTHORIZED(401)NOT_FOUND(404)
分页约定
page从 1 开始pageSize默认 20
详细字段示例请参阅
API_DOC_APP_ZH.md
GET /api/media/list
用于首页瀑布流。
GET /api/media/{id}
用于灯箱/详情页。
GET /api/albums
GET /api/albums/{id}
若为密码相册:返回 403 + PASSWORD_REQUIRED
GET /api/albums/{id}/media
POST /api/albums/{id}/unlock
请求:
{ "password": "..." }返回:
{ "ok": true, "token": "..." }之后访问相册时在 Header 中加:
Authorization: Bearer <token>
POST /api/media/{id}/likePOST /api/albums/{id}/like
请求:
{ "action": "like" }GET /api/albums/{id}/commentsPOST /api/albums/{id}/comments
POST /api/admin/login
返回 Cookie(HttpOnly)。App 内部 WebView 或 API 端需要维持 Cookie。
所有后台接口都在 /api/admin/*,需要登录 Cookie。
建议做法
- App 管理端使用 内置 WebView 承载后台
- 若 App 原生管理页面:需要 Cookie 持久化
接口:
POST /api/admin/media/upload
支持多图上传,multipart/form-data:
files: File[]- 可选字段:
provider,title,alt,folder,tags,category_ids
上传流程建议
- App 选择多张照片
- 去重(按文件 hash)
- 显示缩略图与进度
- 批量上传
- 失败重试
- UI:SwiftUI
- 网络:URLSession + async/await
- 图片:Kingfisher / SDWebImageSwiftUI
- 本地缓存:URLCache + 本地轻量缓存
APIClientAuthManagerMediaServiceAlbumServiceUploadServiceCacheManager
- Media
- Album
- Comment
- Category
字段对齐 API_DOC_APP_ZH.md
- 列表页用
url_thumb/url_medium - 详情页加载
url_large - 加载中使用模糊过渡(可用 blur 或低清图)
- 缓存 7 天(HTTP Cache-Control)
- 点击密码相册立即弹出密码框
- 支持回车提交
- 解锁成功返回 OTP Token
- Token 缓存到本地(Keychain)
- 网络错误:统一 toast/alert
- 403 +
PASSWORD_REQUIRED:展示密码输入 - 401:回到登录
- 500:显示“服务异常”
PlutoApp/
├─ App/
├─ Networking/
├─ Models/
├─ Views/
├─ Services/
├─ Components/
└─ Resources/
- APIClient + 基础模型
- 首页媒体列表
- 相册列表 + 详情 + 媒体
- 密码解锁
- 点赞
- 评论
- 管理端:登录 + 上传(或 WebView)
- 多语言切换
- 本地离线收藏
- 高级搜索
- 评论管理
API_DOC_APP_ZH.md(App 精简版 API)API_DOC_ZH.md(完整 API 文档)CONFIGURATION_ZH.md(配置说明)
如需更细粒度的 Swift 代码模板、模块初始化或 SwiftUI 示例页面结构,我可以继续补充。