Skip to content

前端 API 层

前端 API 层负责封装后端接口的 HTTP 请求。每个业务模块对应一个 API 文件,使用项目封装的 Axios 工具发送请求。

文件位置

ui/src/api/tool/example.ts

完整代码

typescript
import { http } from '@/utils/http/axios';

/**
 * @description: 案例分页列表
 */
export function getExamplePage(params?) {
  return http.request({
    url: '/example/page',
    method: 'GET',
    params,
  });
}

/**
 * 获取全部案例列表
 * @param params 参数
 * @returns 返回结果
 */
export function getExampleList(params?) {
  return http.request({
    url: '/example/list',
    method: 'GET',
    params,
  });
}

/**
 * @description: 根据ID获取案例详情
 * @param id 案例ID
 */
export function getExampleDetail(id) {
  return http.request({
    url: '/example/detail/' + id,
    method: 'get',
  });
}

/**
 * @description: 添加案例
 * @param data 案例数据
 */
export function exampleAdd(data: any) {
  return http.request({
    url: '/example/add',
    method: 'POST',
    data,
  });
}

/**
 * @description: 更新案例
 * @param data 案例数据
 */
export function exampleUpdate(data: any) {
  return http.request({
    url: '/example/update',
    method: 'PUT',
    data,
  });
}

/**
 * @description: 删除案例
 * @param id 案例ID
 */
export function exampleDelete(id) {
  return http.request({
    url: '/example/delete/' + id,
    method: 'DELETE',
  });
}

/**
 * @description: 批量删除案例
 * @param data 案例ID数组
 */
export function exampleBatchDelete(data: any) {
  return http.request({
    url: '/example/batchDelete',
    method: 'DELETE',
    data,
  });
}

代码解析

HTTP 客户端

typescript
import { http } from '@/utils/http/axios';

http 是项目封装的 Axios 实例,自动处理:

  • 请求拦截:添加 JWT Token(Authorization: Bearer xxx
  • 响应拦截:统一处理错误码、弹出提示
  • 基础路径:自动拼接 /api 前缀(通过 Vite 代理转发到后端)

请求方式

typescript
http.request({
  url: '/example/page',   // 接口路径(不含 /api 前缀)
  method: 'GET',           // HTTP 方法
  params,                  // GET 参数(拼接到 URL 查询字符串)
})
参数用途
url接口路径,与后端 urls.py 定义的 path 对应
methodHTTP 方法:GET / POST / PUT / DELETE
paramsGET 请求参数(拼接到 URL)
dataPOST/PUT/DELETE 请求体(JSON)

函数命名规范

模式示例说明
get{Module}PagegetExamplePage分页列表查询
get{Module}ListgetExampleList全量列表查询
get{Module}DetailgetExampleDetail详情查询
{module}AddexampleAdd新增
{module}UpdateexampleUpdate更新
{module}DeleteexampleDelete单条删除
{module}BatchDeleteexampleBatchDelete批量删除

参数传递区别

typescript
// GET:参数通过 params 传递(拼接到 URL 查询字符串)
http.request({ url: '/example/page', method: 'GET', params })

// POST/PUT/DELETE:参数通过 data 传递(放入请求体 JSON)
http.request({ url: '/example/add', method: 'POST', data })

// 路径参数:直接拼接到 URL
http.request({ url: '/example/delete/' + id, method: 'DELETE' })

页面中的调用方式

vue
<script setup>
import { getExamplePage, exampleDelete, exampleBatchDelete } from '@/api/tool/example';

// 分页查询
const result = await getExamplePage({ pageNo: 1, pageSize: 10, name: '测试' });

// 详情查询
const detail = await getExampleDetail(1);

// 新增
await exampleAdd({ name: '新案例', type: 1, status: 1, sort: 0 });

// 更新
await exampleUpdate({ id: 1, name: '修改后', type: 1, status: 1, sort: 1 });

// 单条删除
await exampleDelete(1);

// 批量删除
await exampleBatchDelete([1, 2, 3]);
</script>

开发要点

  1. 一个模块一个文件:放在 ui/src/api/{group}/ 目录下
  2. URL 不含 /api 前缀:Vite 代理自动拼接
  3. GET 用 params,POST/PUT/DELETE 用 data:参数传递方式不同
  4. 路径参数直接拼接到 URL:如 /example/delete/ + id
  5. 批量删除的参数是数组data: [1, 2, 3]

总结

前端 API 层使用封装后的 Axios 发送请求,URL 使用相对路径(不含 /api 前缀),函数命名采用 get{Module}Page / {module}Add 格式。GET 请求用 params,POST/PUT/DELETE 用 data,响应拦截器自动处理错误。

小蚂蚁云团队 · 提供技术支持