Skip to content

API 规范

本文档定义后端 API 的响应格式、错误码、路由约定、分页参数和认证方式。

响应格式

所有 API 响应使用统一的 JSON 结构:

成功响应

json
{
    "code": 200,
    "message": "操作成功",
    "data": { ... },
    "timestamp": 1705285800
}

错误响应

json
{
    "code": 400,
    "message": "参数验证失败",
    "data": {},
    "timestamp": 1705285800
}

分页响应

json
{
    "code": 200,
    "message": "获取成功",
    "data": {
        "list": [ ... ],
        "pagination": {
            "current_page": 1,
            "per_page": 15,
            "total": 100,
            "last_page": 7
        }
    },
    "timestamp": 1705285800
}

Controller 中使用

php
// 成功响应
return $this->success('创建成功', $result);

// 错误响应
return $this->error('参数错误', 400);

// 分页响应 — 直接传入 Repository->getList() 返回值
$result = $this->adminService->getAdminList($params);
return $this->paginate($result);

core\http\Response 类提供的静态方法:

方法用途
Response::success($message, $data, $code)成功响应
Response::error($message, $code, $data)错误响应
Response::paginate($data, $message)分页响应
Response::list($list, $message)列表响应(不分页)
Response::noContent()204 无内容响应
Response::download($file, $name)文件下载响应

错误码分类

HTTP 状态码

状态码含义场景
200成功正常操作
201创建成功资源创建
204无内容删除成功
400请求错误参数验证失败、业务逻辑错误
401未认证Token 缺失或过期
403无权限权限不足
429请求过多触发限流
500服务器错误系统内部异常

业务错误码(code 字段)

1xxx — 认证相关
  1001  未登录 / Token 缺失
  1002  Token 过期
  1003  Token 无效
  1004  账户已被禁用

2xxx — 参数验证
  2001  必填字段缺失
  2002  字段格式错误
  2003  字段值超出范围

3xxx — 业务逻辑
  3001  记录不存在
  3002  数据重复(如用户名已存在)
  3003  状态不允许操作
  3004  关联数据存在,无法删除

4xxx — 支付相关
  4001  余额不足
  4002  支付超时
  4003  支付渠道异常

5xxx — 系统错误
  5001  数据库异常
  5002  缓存服务异常
  5003  第三方接口异常

异常类对应

php
// 业务异常 → code: 400
throw new BusinessException('用户名已存在');

// 验证异常 → code: 400
throw new ValidationException('密码长度不足');

// 认证异常 → code: 401
throw new AuthException('Token 已过期');

// 权限异常 → code: 403
throw new PermissionException('无权限访问');

API 路由约定

路由前缀

应用前缀说明
Admin API/adminapi/管理后台接口
C 端 API/api/用户端接口

RESTful 路由

php
// 标准 CRUD 路由
Route::group('system/admin', function () {
    Route::get('', 'v1.system.AdminController/index');           // 列表
    Route::get(':id', 'v1.system.AdminController/show');         // 详情
    Route::post('', 'v1.system.AdminController/store');          // 创建
    Route::put(':id', 'v1.system.AdminController/update');       // 更新
    Route::delete(':id', 'v1.system.AdminController/delete');    // 删除
});

// 扩展操作
Route::put(':id/status', 'v1.system.AdminController/status');            // 状态切换
Route::put(':id/reset-password', 'v1.system.AdminController/resetPassword'); // 重置密码
Route::post('batch-delete', 'v1.system.AdminController/batchDelete');    // 批量删除

路由文件组织

app/adminapi/route/
├── auth.php       — 认证路由(登录、登出)
├── system.php     — 系统管理路由(管理员、角色、菜单、配置)
├── upload.php     — 上传路由
└── ...

路由组使用中间件:

php
// 需要认证的路由
Route::group('system', function () { ... })
    ->middleware(['admin_auth', 'admin_permission', 'admin_log']);

// 无需认证的路由
Route::group('auth', function () {
    Route::post('login', 'v1.auth.AuthController/login');
})->middleware([LoginRateLimitMiddleware::class]);

分页参数

请求参数

参数类型默认值说明
pageint1页码
limitint15每页条数
keywordstring-关键词搜索
statusint-状态筛选
orderstringid desc排序字段和方向

请求示例

GET /adminapi/system/admin?page=1&limit=20&keyword=admin&status=1

响应结构

json
{
    "code": 200,
    "message": "获取成功",
    "data": {
        "list": [
            { "id": 1, "username": "admin", "status": 1, ... },
            { "id": 2, "username": "editor", "status": 1, ... }
        ],
        "pagination": {
            "current_page": 1,
            "per_page": 20,
            "total": 50,
            "last_page": 3
        }
    },
    "timestamp": 1705285800
}

认证方式

JWT Bearer Token

所有需要认证的接口在请求头中携带 Token:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Token 获取

POST /adminapi/auth/login
Content-Type: application/json

{
    "username": "admin",
    "password": "123456"
}

响应:

json
{
    "code": 200,
    "message": "登录成功",
    "data": {
        "token": "eyJhbGciOiJIUzI1NiIs...",
        "admin": { "id": 1, "username": "admin", ... }
    }
}

Token 类型

类型Payload 字段用途
adminadmin_id, username, type管理后台认证
useruser_id, typeC 端用户认证

Token 刷新与注销

POST /adminapi/auth/refresh    — 刷新 Token
POST /adminapi/auth/logout     — 注销登录
GET  /adminapi/auth/info       — 获取当前用户信息

多语言支持

API 响应消息支持多语言,通过请求头指定语言:

think-lang: zh-cn

Controller 中使用 lang() 函数:

php
return $this->success(lang('messages.create_success'), $result);
return $this->error(lang('auth.login_failed'));

语言包文件位于 app/lang/ 目录下。

基于 MIT 许可发布