Skip to content

外部 API ​

基址与内容类型 ​

项值
基址/api,例如 https://tickets.example.com/api/tickets
内容类型application/json,文件上传为 multipart/form-data
Web 认证Authorization: Bearer <accessToken>
Refresh Token后端通过 HttpOnly Cookie lt_refresh_token 下发

API 响应体中的 refreshToken 为灰度兼容字段,浏览器端不得将其写入 localStorage。正常刷新流程完全依赖 Cookie。

响应 envelope 结构 ​

成功响应的结果置于 data 字段内:

jsonc
{
  "success": true, // 成功响应的固定取值
  "data": {
    "tickets": [], // 业务结果,字段随端点而异
    "total": 0,
    "page": 1,
    "pageSize": 20
  }
}

失败响应包含错误码与错误消息:

jsonc
{
  "success": false,            // 失败响应的固定取值
  "statusCode": 400,           // 与 HTTP 状态码一致
  "message": "参数校验失败"     // 面向开发者的错误消息
}

各端点页面中的响应示例只展示 envelope 内 data 的内容;实际响应在外层再包一层 { "success": true, "data": … },返回数组的端点则为其包装的数组。

以下三类响应不套用 envelope:

  • 204 No Content 的响应体为空,如 DELETE /api/tickets/:ticketId/comments/:commentId 与 POST /api/auth/logout。

  • GET /api/health 不套用 envelope,响应体为:

    jsonc
    {
      "status": "ok" // 服务可用时的固定取值
    }
  • GET /api/docs/openapi.json 直接返回规范 JSON,不套用 envelope,详见 OpenAPI 规范。

认证档位 ​

接口按认证强度分为五档。

档位请求头行为代表端点
public无任何人可调用GET /api/health、GET /api/setup/site-config、GET /api/i18n/languages、GET /api/branding/:slot
bearerAuthorization: Bearer <accessToken> 必填缺失或失效返回 401POST /api/tickets、PATCH /api/users/me/username、GET /api/tickets/:id/attachments
可选 bearer(条件鉴权)可选未登录按匿名访客处理;站点开启「要求登录」后须有有效 tokenGET /api/tickets、GET /api/tickets/:id、GET /api/labels、附件读取
staffbearer + 角色 staff 或 admin角色不足返回 403PUT /api/tickets/:id/assignees、POST /api/tickets/:id/labels、完成钩子端点
adminbearer + 角色 admin角色不足返回 403/api/admin/*、PATCH /api/setup/settings、POST /api/labels、PUT /api/branding/:slot

/api/templates 在认证方式上为例外:该端点接受浏览器 JWT,也接受 X-Server-Key 服务器 Key;两者均缺失时返回 401。

后端判定 Bearer token 是否失效时,除签名外还比对数据库中的用户状态:用户被删除或 tokenEpoch 已变更(如修改密码)时,旧 token 立即返回 401。

「要求登录」设置对读接口的影响 ​

站点设置中的 requireLogin 由 conditionalAuthMiddleware 读取,作用于全部「可选 bearer」读接口:

requireLogin未携带 token携带有效 token
false(默认)按匿名访客返回公开数据按该用户可见范围返回
true401 未登录按该用户可见范围返回

匿名访客仅可读取公开议题;普通用户在此基础上还可读取本人创建的隐藏议题;staff 与 admin 可读取全部议题。隐藏议题对无权用户统一返回 404,以防止通过关联资源判断其是否存在。

错误码与触发条件 ​

HTTP语义典型触发
400参数校验失败字段类型错误、缺失必填、选项不合法、状态迁移参数无效
401未登录或登录已过期缺少 token、token 过期、刷新令牌无效
403权限不足非 staff 提交 assigneeId、普通用户指定 serverId、功能开关关闭
404资源不存在议题、评论、附件、模板不存在,或对当前用户不可见
409资源冲突邮箱/Minecraft 账号已绑定、并发状态迁移失去迁移权、已完成钩子重复提交
429触发限流全局或认证限流窗口内超限
502上游失败SMTP 连接验证失败、S3 连接测试失败

错误响应体始终为标准错误 envelope;错误不以 200 状态码返回 success: false。

分页参数与列表结构 ​

分页参数为 page 与 pageSize:

参数类型默认值范围
pageinteger1正整数
pageSizeinteger201-100

分页型端点返回 { items, total, page, pageSize } 形式的对象,其中 items 的实际名称为资源名:

端点data 结构
GET /api/tickets{ tickets, total, page, pageSize }
GET /api/users{ users, total, page, pageSize }

不分页的集合型端点返回数组:GET /api/tickets/:id/comments、GET /api/labels、GET /api/tickets/:ticketId/audit、GET /api/templates、GET /api/users/assignable。

限流策略 ​

限流策略保存在数据库 AppConfig 中,修改后立即生效,并可在管理后台调整。

策略默认值统计维度
全局每 60 秒 100 次按 IP 统计所有 API 请求
认证每 60 秒 10 次按 IP 统计所有挂载认证限流器的接口,共享额度
邮件冷却60 秒注册验证码按规范化邮箱、密码重置按用户账号
Minecraft 绑定5 次失败 / 15 分钟锁定按登录用户

窗口内前 maxRequests 次请求放行,超出的请求返回 429,窗口结束后重新计数。窗口秒数上限为 86400,额度上限为 100000。认证限流器挂载于登录、注册、刷新、登出、密码重置、link-minecraft、验证码及邮件相关端点。

路由前缀 ​

前缀说明详见
/api/health健康检查,不包 envelope本页
/api/docs/openapi.json构建生成的 OpenAPI 规范OpenAPI 规范
/api/setupsite-config 公开配置、初始化、管理员站点设置认证与账户、管理后台 API
/api/auth注册、登录、刷新、登出、密码重置、Minecraft 绑定认证与账户
/api/auth/federatedauth外部登录流程(start / callback / 注册会话)认证与账户
/api/i18n语言清单与扁平化语言资源认证与账户
/api/templates启用模板列表与单个模板定义模板接口
/api/player-groups登录用户侧的玩家组搜索管理后台 API
/api/admin/templates后台模板 CRUD 与原始 YAML 维护管理后台 API
/api/admin/player-groups玩家组与成员维护管理后台 API
/api/admin/storage存储配置读取、更新与连通性测试管理后台 API
/api/admin/federatedauth外部登录 Provider 管理与身份解绑管理后台 API
/api/admin/minecraft-hook-deliveries失败钩子投递查询与重试管理后台 API
/api/branding站点图标与 Logo 的读取、上传、删除管理后台 API
/api/tickets议题 CRUD、审计、评论与附件子路由议题、评论与附件
/api/labels标签增删改查,写操作需要 admin议题、评论与附件
/api/attachments附件上传、下载、删除议题、评论与附件
/api/serversMinecraft 服务器与 API Key 管理,仅 admin管理后台 API
/api/users当前用户资料、通知偏好、外部身份绑定;管理员用户管理认证与账户、管理后台 API
/api/mc插件专用接口,X-Server-Key 认证Server API

OpenAPI 规范端点 ​

运行时端点:

http
GET /api/docs/openapi.json

规范未生成时,该端点返回 404 标准错误响应。产物、生成命令与校验方式见 OpenAPI 规范。

索引我维护的项目、服务与文档。