Skip to content

请求和接口

请求封装

前端使用 Axios 进行 HTTP 请求,封装位于 web/src/utils/request.ts

基本使用

typescript
import request from '@/utils/request'

// GET 请求
const response = await request.get('/user/list', { params: { page: 1 } })

// POST 请求
const response = await request.post('/user', { username: 'admin' })

// PUT 请求
const response = await request.put('/user/1', { nickname: '管理员' })

// DELETE 请求
const response = await request.delete('/user/1')

API 模块化

API 接口按模块组织在 web/src/api/ 目录下:

typescript
// api/system/user.ts
import request from '@/utils/request'

export function fetchUserList(params: UserListParams) {
  return request.get<UserListResponse>('/user/list', { params })
}

export function createUser(data: CreateUserParams) {
  return request.post<BaseResponse>('/user', data)
}

响应格式

后端统一响应格式:

json
{
  "code": 200,
  "msg": "操作成功",
  "success": true,
  "data": {},
  "time": "2024-01-01T00:00:00"
}

响应字段说明

字段类型说明
codenumber状态码
msgstring提示信息
successboolean是否成功
dataany响应数据
timestring响应时间

错误处理

请求拦截器会自动处理常见错误:

  • 401 - 未授权,跳转登录页
  • 403 - 无权限访问
  • 404 - 资源不存在
  • 500 - 服务器错误
typescript
// 自定义错误处理
try {
  const response = await fetchUserList({ page: 1 })
} catch (error) {
  console.error('请求失败:', error)
}

后端接口

路由定义

python
from fastapi import APIRouter, Depends

router = APIRouter(prefix="/user")

@router.get("/list")
async def get_user_list(
    page: int = 1,
    page_size: int = 10
):
    # 业务逻辑
    return ResponseUtil.success(data=result)

参数验证

使用 Pydantic 进行参数验证:

python
from pydantic import BaseModel, Field

class CreateUserParams(BaseModel):
    username: str = Field(..., min_length=2, max_length=20)
    password: str = Field(..., min_length=6)
    email: str | None = None

Released under the MIT License.