Ech0 API 设计文档
本文件基于 Ech0/internal/router、Ech0/internal/handler 与 Ech0/internal/swagger/swagger.json 汇总当前全部接口。
相关文档
1. 通用约定
1.1 基础路径
- REST API:默认以
/api为前缀。 - ActivityPub/资源:位于根路径(如
/.well-known/webfinger、/users/:username、/rss)。 - WebSocket:
/ws/dashboard/metrics。
1.2 响应结构
所有 JSON 响应统一封装为:
{
"code": 1,
"msg": "请求成功",
"data": {}
}code=1 表示成功,code=0 表示失败。错误时通常返回 HTTP 400/401 并包含 msg。
1.3 认证方式
- JWT Bearer:
Authorization: Bearer <token>。 - 匿名可访问:
GET /api/echo/page、GET /api/echo/today、GET /api/echo/:id、GET /api/echo/tag/:tagidGET /api/s3/settings(返回脱敏信息)
- 特殊 Token:
GET /api/backup/export:token查询参数GET /ws/dashboard/metrics:token查询参数
2. REST API(/api)
2.1 用户与认证
POST /api/login登录(body: LoginDto)POST /api/register注册(body: RegisterDto)GET /api/user获取当前用户信息(JWT)PUT /api/user更新当前用户(JWT,body: UserInfoDto)DELETE /api/user/:id删除用户(JWT,管理员)PUT /api/user/admin/:id更新用户管理员权限(JWT,管理员)GET /api/allusers获取用户列表(公开)
2.2 OAuth2 / OIDC(根路径 + /api)
GET /oauth/github/login登录跳转(query: redirect_uri)GET /oauth/github/callback回调(query: code, state)GET /oauth/google/login登录跳转(query: redirect_uri)GET /oauth/google/callback回调(query: code, state)GET /oauth/qq/login登录跳转(query: redirect_uri)GET /oauth/qq/callback回调(query: code, state)GET /oauth/custom/login登录跳转(query: redirect_uri)GET /oauth/custom/callback回调(query: code, state)POST /api/oauth/github/bind绑定 GitHub(JWT,body: {redirect_uri})POST /api/oauth/google/bind绑定 Google(JWT,body: {redirect_uri})POST /api/oauth/qq/bind绑定 QQ(JWT,body: {redirect_uri})POST /api/oauth/custom/bind绑定自定义 OAuth(JWT,body: {redirect_uri})GET /api/oauth/info查询绑定信息(JWT,query: provider)
2.3 Passkey(WebAuthn)
POST /api/passkey/login/begin开始 Passkey 登录(公开)POST /api/passkey/login/finish完成 Passkey 登录(公开,body: PasskeyFinishReq)POST /api/passkey/register/begin开始 Passkey 绑定(JWT,body: PasskeyRegisterBeginReq)POST /api/passkey/register/finish完成 Passkey 绑定(JWT,body: PasskeyFinishReq)GET /api/passkeys列出设备(JWT)DELETE /api/passkeys/:id删除设备(JWT)PUT /api/passkeys/:id更新设备名称(JWT,body: PasskeyUpdateDeviceNameReq)
2.4 Echo 与标签
POST /api/echo创建 Echo(JWT,body: Echo)PUT /api/echo更新 Echo(JWT,body: Echo)DELETE /api/echo/:id删除 Echo(JWT)GET /api/echo/:id获取 Echo 详情(JWT 或匿名)GET|POST /api/echo/page分页查询 Echo(JWT 或匿名,query 或 body: PageQueryDto)GET /api/echo/today获取今日 Echo(JWT 或匿名)PUT /api/echo/like/:id点赞 Echo(公开)GET /api/echo/tag/:tagid按标签查询 Echo(JWT 或匿名,支持分页 query)GET /api/tags获取全部标签(公开)DELETE /api/tag/:id删除标签(JWT)
2.5 媒体与资源
POST /api/images/upload上传图片(JWT,multipart form: file + ImageSource)DELETE /api/images/delete删除图片(JWT,body: ImageDto)POST /api/audios/upload上传音频(JWT,multipart form: file)DELETE /api/audios/delete删除音频(JWT)PUT /api/s3/presign获取 S3 预签名(JWT,body: GetPresignURLDto)
2.6 系统状态与公共信息
GET /api/status系统状态(公开)GET /api/heatmap发布热力图(公开)GET /api/hello版本与欢迎信息(公开)GET /api/getmusic获取可播放音乐 URL(公开)GET /api/playmusic音频流播放(公开)GET /api/website/title获取网站标题(公开,query: website_url)GET /rssRSS 订阅源(公开,资源路由)
2.7 待办事项
GET /api/todo获取待办列表(JWT)POST /api/todo新增待办(JWT,body: Todo)PUT /api/todo/:id完成待办(JWT)DELETE /api/todo/:id删除待办(JWT)
2.8 收件箱
GET /api/inbox收件箱分页(JWT,query: page/pageSize/search)GET /api/inbox/unread未读消息(JWT)PUT /api/inbox/:id/read标记已读(JWT)DELETE /api/inbox/:id删除消息(JWT)DELETE /api/inbox清空收件箱(JWT)
2.9 Ech0 Connect
GET /api/connect获取本实例信息(公开)GET /api/connect/list获取已添加连接列表(公开)GET /api/connects/info获取已添加实例详情(公开)POST /api/addConnect添加连接(JWT,body: Connected)DELETE /api/delConnect/:id删除连接(JWT)
2.10 设置与管理
GET /api/settings获取系统设置(公开)PUT /api/settings更新系统设置(JWT,body: SystemSettingDto)GET /api/comment/settings获取评论设置(公开)PUT /api/comment/settings更新评论设置(JWT,body: CommentSettingDto)GET /api/s3/settings获取 S3 设置(公开,脱敏)PUT /api/s3/settings更新 S3 设置(JWT,body: S3SettingDto)GET /api/oauth2/settings获取 OAuth2 设置(JWT)PUT /api/oauth2/settings更新 OAuth2 设置(JWT,body: OAuth2SettingDto)GET /api/oauth2/status获取 OAuth2 状态(公开)GET /api/fediverse/settings获取联邦设置(JWT)PUT /api/fediverse/settings更新联邦设置(JWT,body: FediverseSettingDto)GET /api/agent/info获取 Agent 配置摘要(公开)GET /api/agent/settings获取 Agent 设置(JWT)PUT /api/agent/settings更新 Agent 设置(JWT,body: AgentSettingDto)GET /api/backup/schedule获取备份计划(JWT)POST /api/backup/schedule更新备份计划(JWT,body: BackupScheduleDto)GET /api/access-tokens列出访问令牌(JWT)POST /api/access-tokens创建访问令牌(JWT,body: AccessTokenSettingDto)DELETE /api/access-tokens/:id删除访问令牌(JWT)
2.11 Webhook
GET /api/webhook获取 Webhook 列表(JWT)POST /api/webhook创建 Webhook(JWT,body: WebhookDto)PUT /api/webhook/:id更新 Webhook(JWT,body: WebhookDto)DELETE /api/webhook/:id删除 Webhook(JWT)
2.12 备份
GET /api/backup执行备份(JWT)GET /api/backup/export导出备份(公开,query: token)POST /api/backup/import导入备份(JWT,multipart form: file)
2.13 Dashboard 与监控
GET /api/dashboard/metrics获取系统指标(JWT)GET /ws/dashboard/metricsWebSocket 指标订阅(query: token)
2.14 Agent
GET /api/agent/recent生成近期活动总结(公开)
3. ActivityPub / Fediverse(根路径)
3.1 Discovery
GET /.well-known/webfinger?resource=acct:username@domain- 返回
application/jrd+json
- 返回
3.2 Actor / Inbox / Outbox
GET /users/:username获取 Actor(application/activity+json)POST /users/:username/inbox接收 ActivityGET /users/:username/outbox获取 Outbox 概览或分页page/pageSize可选
3.3 Followers / Following
GET /users/:username/followers获取粉丝集合或分页page/pageSize可选
GET /users/:username/following获取关注集合或分页
3.4 Object
GET /objects/:id获取内容对象
4. Swagger 文档
GET /swagger/*any:OpenAPI UI
5. 路径差异提醒
注意
由于 Swagger 注释与路由注册存在差异,实际路径以
internal/router/*.go为准:
- Webhook 更新接口:Swagger 使用
/api/webhook/{id},但路由当前注册为PUT /api/webhook;更新逻辑依赖id路径参数。- Dashboard 指标:Swagger 使用
/api/metrics与/ws/metrics,但路由注册为/api/dashboard/metrics与/ws/dashboard/metrics。- RSS 订阅:Swagger 基础路径为
/api,但实际路由为根路径/rss。