Files
FileShare/docs/api/00-overview.md
T
SKYMirror 6f1a925833
Release 镜像 / 测试(推送前置门禁) (push) Failing after 12s
Release 镜像 / 多架构构建并推送 ACR (push) Skipped
26.9:品牌统一(fileshare)+ 版本号改为日期式
- 数据库默认文件 filecodebox.db → fileshare.db(config.go 默认值与全部文档/编排同步)
- Go module filecodebox → fileshare(全部 import 同步,build/vet/test 全绿)
- 应用版本 APP_VERSION 2.5.6 → 26.9(health 接口已验证返回 26.9)
- deploy 编排统一:compose 项目名、Postgres 默认凭据、minio 桶名、env 注释
- JWT issuer、存储临时目录前缀、web 包名同步 fileshare
- CI:镜像 tag 以 APP_VERSION 为唯一版本源,main/tag 推送即发布
  ${VER} + latest;tag 触发时校验 tag 名与 APP_VERSION 一致,防错版
- 本地开发库文件已改名 fileshare.db(含 -shm/-wal 清理)
2026-09-05 06:32:18 +08:00

101 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# API 概述
文件快传 Go 版(26.9)对外提供一套 REST API,覆盖文本/文件分享、分片上传、
预签名直传、管理后台与审计日志查询。本文档与 `server/internal/api/` 实际实现逐一对齐,
交互式规范见站内 `/openapi`(源文件 `docs/openapi.yaml`)。
## Base URL
- 服务默认监听 `:8466`Base URL 为 `http://<host>:8466`(下文示例统一用 `http://localhost:8466`)。
- **业务路由挂根路径**(与参考实现一致):`/share/*``/chunk/*``/presign/*``/admin/*``/setup`
- 仅两个公共接口带 `/api/v1` 前缀:`/api/v1/health``/api/v1/config`
## 统一响应封装
所有 JSON 接口返回统一结构,HTTP 状态码与 `code` 一致;失败时 `data` 缺省:
```json
{ "code": 200, "msg": "ok", "data": { } }
```
失败示例(404):
```json
{ "code": 404, "msg": "文件不存在" }
```
个别端点直接返回原始内容而非 JSON 封装(文档中已单独标注):
| 端点 | 响应形式 |
|---|---|
| `GET /share/select?code=`(文本分享) | `text/plain; charset=utf-8` 正文 |
| `GET /share/select?code=`(文件分享) | 文件二进制流(200/206,支持 Range |
| `GET /share/download?key=&code=`(文件分享) | 文件二进制流(200/206,支持 Range |
| `GET /admin/file/download?id=`(文件分享) | 文件二进制流 |
| `GET /setup` / `POST /setup`(表单) | HTML 向导/成功页 |
## 字段命名约定
- 接口字段以 **snake_case** 为主(`file_code``size_bytes`)。
- 文件列表与审计日志的行字段同时输出 **snake_case 与 camelCase 双份**(如 `expired_at``expiredAt`),文档以 snake_case 为准,camelCase 仅为前端兼容保留。
## 认证
- 游客接口无需认证;是否允许游客上传由配置 `openUpload` 控制(关闭时上传类接口要求管理员 `Authorization: Bearer <token>`,否则 403)。
- 管理接口(`/admin/login` 除外)一律要求 `Authorization: Bearer <JWT>`,无效/缺失返回 401。
- 详情见《认证与限流》。
## 限流
按 IP(可信代理场景解析 `X-Forwarded-For`)维度限流,超限返回 **423**
| 规则 | 计数时机 | 默认(次/窗口) | 相关配置 |
|---|---|---|---|
| `upload` | **上传成功**后计数 | 10 次 / 1 分钟 | `uploadCount` / `uploadMinute` |
| `error` | 取件失败(404/过期)时计数 | 10 次 / 1 分钟 | `errorCount` / `errorMinute` |
| `login` | 登录失败时计数 | 5 次 / 15 分钟 | `loginCount` / `loginMinute` |
| `metadata` | 每次访问即计数 | 同 `error` | `errorCount` / `errorMinute` |
## 初始化守卫
系统未初始化(未设置管理员密码)时,除 `GET|POST /setup``GET /api/v1/health` 外,
**所有接口一律返回 428**
```json
{ "code": 428, "msg": "系统未初始化,请先完成初始化" }
```
首次部署请先访问 `GET /setup` 获取 HTML 向导,或直接 `POST /setup` 完成初始化(见《管理后台 API》初始化章节)。
## 审计
所有上传/下载端点经审计中间件自动落库(操作时间/IP/UA/设备解析/动作/结果/字节数/耗时/角色),
失败与被拒绝的请求同样记录;管理端经 `GET /admin/audit/list` 查询,详见《审计日志》。
## 端点总览
| 模块 | 端点 |
|---|---|
| 公共 | `GET /api/v1/health` · `GET /api/v1/config` · `GET /robots.txt`(输出 `robotsText` 配置) |
| 初始化 | `GET /setup` · `POST /setup` |
| 文本分享 | `POST /share/text` |
| 文件分享 | `POST /share/file` |
| 查询与取件 | `GET/POST /share/metadata` · `GET /share/select` · `POST /share/select` · `GET /share/download` |
| 分片上传 | `POST /chunk/upload/init` · `POST /chunk/upload/{uploadID}/{chunkIndex}` · `GET /chunk/upload/status/{uploadID}` · `POST /chunk/upload/complete/{uploadID}` · `DELETE /chunk/upload/{uploadID}` |
| 预签名直传 | `POST /presign/upload/init` · `PUT /presign/upload/proxy/{uploadID}` · `POST /presign/upload/confirm/{uploadID}` · `GET /presign/upload/status/{uploadID}` · `DELETE /presign/upload/{uploadID}` |
| 管理后台 | `POST /admin/login` · `GET /admin/verify` · `POST /admin/logout` · `GET /admin/dashboard` · 文件管理 `/admin/file/*` · 配置 `/admin/config/*` · 密码 `/admin/settings/password` |
| 审计日志 | `GET /admin/audit/list`(别名 `/admin/audit/logs` |
## 时间与编码
- 时间字段一律 RFC 3339(如 `2025-06-01T12:00:00+08:00`);管理员会话过期时间为 Unix 秒。
- 请求体支持 `application/json``application/x-www-form-urlencoded`(上传类为 `multipart/form-data`),文档示例以 JSON/curl 为主。
- CORS:公开接口放开(Bearer 认证,无 Cookie CSRF 面);**管理端 `/admin/*` 已收紧**——携带 Origin 且既不同源也不在 `site_domain` 白名单时不下发 CORS 头(浏览器拦截跨域读取)。
## 交互式文档
- 站内文档页:`/docs`(渲染本目录 markdown,构建时内嵌)。
- Swagger UI`/openapi`(渲染 `docs/openapi.yaml`,构建时内嵌)。
- OpenAPI 规范源文件为仓库内 `docs/openapi.yaml`;如需经后端直接下载,
需在部署时把它拷贝进前端静态产物 `web/dist/`(未拷贝时该路径按 SPA 回退返回页面)。