后端 API 概览¶
Inklet 后端提供 RESTful JSON API,用于认证、设备管理和计费。后端使用 Go 和 Chi 路由器构建。
基础 URL¶
Inklet 后端有两个生产域名,按路径前缀区分:
| 路径前缀 | 生产域名 |
|---|---|
/auth/* |
https://auth.iminklet.com |
/api/*、/health |
https://dev.iminklet.com |
本地开发时,两个前缀统一使用 http://localhost:4000。
响应格式¶
所有响应返回 JSON 并附带相应的 HTTP 状态码。成功响应使用 200 或 201;错误响应返回包含 error 字段的 JSON 内容:
认证¶
受保护的接口需要在 Authorization 请求头中提供有效的 JWT 访问令牌:
访问令牌有较长的有效期,并带有滑动续签机制。使用刷新接口可以在无需重新认证的情况下获取新令牌。
令牌生命周期
访问令牌默认 72 小时过期(可通过 ACCESS_TOKEN_EXPIRY 环境变量调整)。刷新令牌有效期较长,但每次使用后会进行轮换 --- 当签发新的令牌对时,旧的刷新令牌将被废止。
滑动续签(X-Renewed-Token)
当访问令牌的剩余有效期不足 24 小时时,后端会在每个受保护接口的响应头中自动附带一个新的访问令牌:
客户端应检查此响应头,若存在则用它替换本地存储的访问令牌,这样就无需等到过期再调用刷新接口。该响应头已在 CORS 的 ExposedHeaders 中声明,浏览器可直接读取。
API 分组¶
API 分为四组:
认证(/auth/*)— https://auth.iminklet.com¶
用户注册、登录、OAuth(Google 和 Apple)、会话管理、个人资料更新以及订阅计费。
设备(/api/devices/*)— https://dev.iminklet.com¶
设备列表、绑定(NFC 和配对码)、解绑、命令下发和状态查询。
参见:设备
内容(/api/*)— https://dev.iminklet.com¶
原始内容上传(文本 + 附件包)、文件下载及手动触发分析任务。
POST /api/raw-items/upload— 请求上传预签名 URLPOST /api/raw-items/{id}/confirm— 确认文件已上传GET /api/raw-items— 列出当前用户的 itemsGET /api/raw-items/{id}— 获取单个 itemGET /api/raw-items/stats— 最近 7 天处理统计GET /api/files/{fileId}/download— 获取文件下载重定向POST /api/analyze/trigger— 手动触发分析 Worker(需认证)
健康检查(/health)— https://dev.iminklet.com¶
一个简单的健康检查接口,供负载均衡器和监控系统使用。
常见 HTTP 状态码¶
| 状态码 | 含义 |
|---|---|
200 |
成功 |
201 |
资源已创建 |
400 |
请求无效 --- 字段缺失或格式错误 |
401 |
未授权 --- 令牌缺失或已过期 |
403 |
禁止访问 --- 你不是该资源的所有者 |
404 |
资源未找到 |
409 |
冲突 --- 邮箱、用户名重复或设备已被绑定 |
410 |
已失效 --- 资源已被删除或过期 |
500 |
服务器内部错误 |
频率限制¶
生产环境中的 API 请求可能受到频率限制。如果超出限制,你将收到 429 Too Many Requests 响应。请等待 Retry-After 响应头指定的时间后重试。
CORS¶
生产环境后端允许来自 https://portal.iminklet.com 的跨域请求。本地开发允许 http://localhost:5173。