4.0 KiB
4.0 KiB
API
Base path: /api/v1。除初始化、登录和健康检查外,接口均要求 dodo_session Cookie;同源写请求使用双提交 CSRF 校验。登录后可访问 /api/docs 和 /api/openapi.json。
账户与会话
GET /setup/status、POST /setup/initializePOST /auth/login、POST /auth/logout、POST /auth/change-passwordGET/PATCH /meGET /sessions、DELETE /sessions/{session_id}、DELETE /sessions/othersGET /audit-logs
文件夹、清单与任务
- 文件夹:
GET/POST /folders,PATCH/DELETE /folders/{id},以及排序接口 - 清单:
GET/POST /lists,PATCH/DELETE /lists/{id},归档恢复、永久删除、移动与排序接口 - 归档清单只标记
deleted_at,不会把任务移到收集箱;清单归档期间,其任务在普通列表和详情中不可见,恢复清单后重新出现 - 任务:
GET/POST /tasks、GET/PATCH/DELETE /tasks/{id}、POST /tasks/{id}/restore、DELETE /trash/{id} GET /tasks和GET /trash使用不透明游标;limit为 1–100POST /tasks/batch支持批量完成、移动、截止时间与软删除;任务写入使用version乐观锁- 一层子任务必须与父任务同清单;任务可带日期型或具体时间型截止时间
重复任务
GET /tasks/{task_id}/recurrencePOST /recurrences、PATCH/DELETE /recurrences/{id}POST /recurrences/{id}/complete- 支持 RRULE 计划重复与按用户本地完成日期计算的“完成后重复”
习惯、倒数日与备忘录
- 习惯:创建、列表/周网格、部分更新、排序、归档/恢复/永久删除、日志、暂停和统计
- 倒数日:创建、列表、编辑、置顶、归档/恢复/永久删除;支持公历/农历及周/月/年重复
- 备忘录:游标列表、创建、读取、乐观锁更新、软删除、恢复和归档后永久删除
附件
GET/POST /tasks/{task_id}/attachmentsGET/DELETE /attachments/{attachment_id}- 文件保存在服务端附件目录;上传受大小与类型限制,访问始终校验当前用户归属
完整备份 ZIP v2
GET /backup/export.zip
导出 dodo-backup version 2 ZIP。归档包含 manifest.json、每类实体的 data/*.json、附件元数据和附件原始字节。manifest 声明实体数量及每个条目的 SHA-256。
实体范围:folders、lists、tasks、recurrences、recurrence_exceptions、habits、habit_logs、habit_pauses、countdowns、memos、attachments。会话、密码散列、审计日志及备份内部账本不导出。
POST /backup/preflight?mode=merge|replace
以 multipart 字段 file 上传 ZIP。服务端流式暂存,并在返回令牌前验证:ZIP 路径与条目、压缩比/容量、manifest 版本与计数、全部校验和、字段与业务约束、关系拓扑、一层任务树、用户隔离以及附件元数据/字节一致性。
成功返回 valid、短期 preflight_token、backup_id、归档摘要和各实体数量。预检有每用户待处理数量/容量配额和过期时间;令牌绑定用户、文件摘要和恢复模式。
POST /backup/restore
请求体:
{"preflight_token":"...","mode":"merge"}
merge 使用持久化 source→target ID/内容摘要账本实现可重试合并;跨用户或同 ID 不同内容冲突会拒绝。replace 在事务内替换当前用户业务实体,并通过同文件系统隔离区协调附件删除和失败补偿。令牌单次消费;若数据库已提交但隔离区清理失败,同一令牌仅重试清理,不重复导入。
旧格式兼容
GET /export、GET /export.csv:旧版 JSON/UTF-8-BOM CSV v1 轻量导出,不是完整备份POST /restore?mode=merge|replace、POST /restore.csv?mode=merge|replace:兼容旧 JSON/CSV v1- 旧格式只覆盖文件夹、清单、任务、重复模板、习惯、倒数日和备忘录;不包含日志、暂停、重复例外和附件字节
健康检查
GET /health/liveGET /health/ready