- 实现用户登录、登出、密码修改等认证功能 - 添加会话管理和权限控制中间件 - 创建图片批注组件和相关API路由 - 实现批注的增删改查功能 - 添加Docker和Git忽略配置文件 - 创建系统架构文档和开发约定说明 - 集成认证模块到前端应用路由中
95 lines
3.3 KiB
Markdown
95 lines
3.3 KiB
Markdown
# API 接入指南
|
||
|
||
## 认证方式
|
||
|
||
工作台网页使用 HttpOnly Cookie 会话。外部客户端使用:
|
||
|
||
```http
|
||
Authorization: Bearer dd_live_xxx
|
||
```
|
||
|
||
API Key 明文只在创建时返回一次,数据库仅保存 SHA-256 哈希。平台管理员创建平台级 Key;组管理员创建本组项目级 Key。失效或越权请求会返回 `401` 或 `403`。
|
||
|
||
## 主要路由
|
||
|
||
| 路由组 | 用途 |
|
||
|---|---|
|
||
| `/api/auth/*` | 登录、退出、当前账号、修改密码 |
|
||
| `/api/management/groups` | 运营组创建、改名、启停和管理员更换 |
|
||
| `/api/management/users` | 账号创建、改名、启停和重置密码 |
|
||
| `/api/management/api-keys` | API Key 创建、查询和吊销 |
|
||
| `/api/management/audit-logs` | 审计日志查询 |
|
||
| `/api/management/storage-configs` | COS 配置、连接测试和启用 |
|
||
| `/api/projects` | 项目创建、查询和编辑 |
|
||
| `/api/projects/:projectId/collections` | 作品交付集创建、查询和编辑 |
|
||
| `/api/notes` | 作品查询与 multipart 上传 |
|
||
| `/api/notes/:noteId/versions` | 上传作品新版本 |
|
||
| `/api/notes/:noteId/status` | 草稿与待验收状态切换 |
|
||
| `/api/notes/:noteId/text-annotations` | 标题/正文批注 |
|
||
| `/api/images/:imageId/annotations` | 图片坐标批注 |
|
||
| `/api/review/:slug/*` | 客户登录、浏览、反馈与验收 |
|
||
| `/api/health` | 数据库就绪检查 |
|
||
|
||
## 创建项目
|
||
|
||
平台级 API Key 可以指定目标运营组。项目级 Key 不能创建项目。
|
||
|
||
```bash
|
||
curl -X POST http://localhost:3001/api/projects \
|
||
-H "Authorization: Bearer $DELIVERY_DESK_API_KEY" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"name":"7 月内容计划","slug":"july-content","groupId":1,"client_description":"客户可见说明"}'
|
||
```
|
||
|
||
`slug` 仅支持小写字母、数字和连字符,并作为客户验收链接的一部分。
|
||
|
||
## 创建作品交付集
|
||
|
||
```bash
|
||
curl -X POST http://localhost:3001/api/projects/1/collections \
|
||
-H "Authorization: Bearer $DELIVERY_DESK_API_KEY" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"name":"2026 年 7 月交付","client_description":"本月交付内容"}'
|
||
```
|
||
|
||
## 上传作品
|
||
|
||
作品上传使用 `multipart/form-data`,至少一张、最多 30 张图片,单图最大 20 MB。图片数组顺序就是初始展示顺序,第一张为封面。
|
||
|
||
```bash
|
||
curl -X POST http://localhost:3001/api/notes \
|
||
-H "Authorization: Bearer $DELIVERY_DESK_API_KEY" \
|
||
-F "collectionId=1" \
|
||
-F "title=作品标题" \
|
||
-F "description=正文内容" \
|
||
-F "tags=用户填写的标签原文" \
|
||
-F "images=@./01.jpg" \
|
||
-F "images=@./02.jpg"
|
||
```
|
||
|
||
当前接受 JPEG、PNG、GIF、WebP 和 AVIF。标签按一段原文保存和展示,不会自动添加 `#` 或拆分为标签库。
|
||
|
||
## 创建新版本
|
||
|
||
```bash
|
||
curl -X POST http://localhost:3001/api/notes/12/versions \
|
||
-H "Authorization: Bearer $DELIVERY_DESK_API_KEY" \
|
||
-F "title=修改后的标题" \
|
||
-F "description=修改后的正文" \
|
||
-F "tags=修改后的标签原文" \
|
||
-F "images=@./v2-01.jpg"
|
||
```
|
||
|
||
批注绑定作品版本或具体图片,不会因新版本覆盖历史验收证据。
|
||
|
||
## 错误响应
|
||
|
||
错误统一以 JSON 返回:
|
||
|
||
```json
|
||
{ "error": "错误说明" }
|
||
```
|
||
|
||
常见状态码:`400` 输入无效、`401` 未认证、`403` 越权、`404` 资源不存在、`409` 唯一性或状态冲突、`500` 服务端错误。
|
||
|