Skip to content

API 规范

后端所有路由统一挂载在 /api 前缀下,并遵循一致的响应与校验规则。

统一响应格式

成功响应:

json
{
  "code": 0,
  "message": "success",
  "data": {}
}

失败时 code 为非零值,并包含明确的错误信息。

分页返回格式

所有列表接口返回 PaginatedResponse<T>

json
{
  "list": [],
  "total": 100,
  "page": 1,
  "pageSize": 10
}

认证方式

项目采用 Access Token + Refresh Token 双 token 机制:

Token存储 Key说明
Access Tokenzenith_token短期 token,附在每次请求头中
Refresh Tokenzenith_refresh_token长期 token,用于在 Access Token 过期时自动续期

需要认证的请求需携带:

http
Authorization: Bearer <access_token>

当 Access Token 过期时,前端 request.ts 会自动携带 Refresh Token 向后端换取新的 Access Token,对业务代码透明。

认证中间件会在上下文中注入用户信息,供后续权限判断使用。

参数校验

所有入参必须通过 schema.safeParse() 进行校验。

校验失败时,应返回:

json
{
  "code": 400,
  "message": "参数错误"
}

路由组织建议

  • 按资源拆分到 packages/server/src/routes/
  • 保持资源命名直观,如 users.tsroles.tsdicts.ts
  • 和前端页面、共享 schema 尽量保持一一对应,便于排查问题

共享约定

  • 类型统一放到 @zenith/shared/src/types.ts
  • Zod schema 统一放到 @zenith/shared/src/validation.ts
  • 枚举和常量统一放到 @zenith/shared/src/constants.ts

Built with VitePress for local documentation preview.