# Apifox 指南 —— 数字图书馆(门户) - baseURL: `http://localhost:8080` - 环境变量建议:`base`、`token_user` - 通用请求头:`Authorization: Bearer {{token_user}}` ## 推荐集合结构 - 门户 / 数字图书馆 - 浏览 - 列表 GET /portal/library/list - 详情 GET /portal/library/{id} - 下载 GET /portal/library/{id}/download[?assetId] - 榜单 GET /portal/library/top - 榜单-贡献者 GET /portal/library/top/users - 我的 - 我的上传(列表)GET /portal/library/list?uploaderId={{me}} - 新增 POST /portal/library - 一次性新增 POST /portal/library/full - 编辑 PUT /portal/library - 删除 DELETE /portal/library/{ids} - 资产新增/删除 POST|DELETE /portal/library/{id}/asset... - 收藏 - 收藏/取消收藏 POST /portal/library/{id}/favorite - 收藏列表 GET /portal/library/favorite - 上传 - 上传 PDF POST /portal/upload/oss(scene=library.pdf) - 上传其他格式 POST /portal/upload/oss(scene=library.extra) ## 前置:登录 - POST /login - Body: `{ "username":"user", "password":"123456" }` - 提取:`data.token` → `token_user` ## 用例 1:浏览列表/详情/下载/榜单 - 列表:GET /portal/library/list?pageNum=1&pageSize=10&keyword=CSAPP → `code == 200` - 详情:GET /portal/library/{id} → `code == 200` 且 `data.assets` 为数组 - 下载:GET /portal/library/{id}/download → HTTP 302(断言 `Location` 存在) - 榜单:GET /portal/library/top?limit=10 → `code == 200` - 榜单用户:GET /portal/library/top/users?limit=10 → `code == 200` ## 用例 2:一次性创建(图书+资产)→ 门户可见(端到端) 1) 上传 PDF(可选) - POST /portal/upload/oss(Form-Data: `scene=library.pdf`, `file=@/path/csapp.pdf`) - 断言:`code == 200`;提取 `data.url` → `pdfUrl` 2) 新增(full) - POST /portal/library/full - Body: ```json { "title":"CSAPP", "author":"Randal", "summary":"深入理解计算机系统", "assets":[ { "assetType":"0", "format":"pdf", "fileUrl":"{{pdfUrl}}" } ] } ``` - 断言:`code == 200`;提取 `data.id` → `bookId` 3) 管理端审核通过(在管理集合中执行) 4) 门户详情可见:GET /portal/library/{{bookId}} → `code == 200` ## 用例 3:编辑与资产操作(非上架) - 编辑:PUT /portal/library(Body:`{ "id": {{bookId}}, "summary":"修订" }`)→ `code == 200` - 新增资产:POST /portal/library/{{bookId}}/asset(Body:`{ "assetType":"0","format":"epub","fileUrl":"..." }`)→ `code == 200` - 删除资产:DELETE /portal/library/{{bookId}}/asset/{{assetId}} → `code == 200` ## 用例 4:收藏 - 收藏:POST /portal/library/{{bookId}}/favorite(`{ "favorite": true }`)→ `code == 200` - 收藏列表:GET /portal/library/favorite?pageNum=1&pageSize=10 → `code == 200` ## 统一断言脚本 - 成功:`status == 200 && body.code == 200` - 列表:`Array.isArray(body.rows) && typeof body.total === 'number'` - 详情:`body.data && body.data.library && Array.isArray(body.data.assets)` ## 常见失败与处理 - 401:未登录;403:越权(非作者编辑/删除);404:未上架详情/下载 - 409:状态冲突(上架不允许编辑/增删资产)