Vue 3 中 Axios 封装怎么在模块化文件中组织 API 接口列表

风浩小哥_5926

风浩小哥_5926

2026-10-18

804人浏览

原创

vue 3中axios封装采用“分层解耦”设计:request层负责axios实例配置与拦截器,api层按业务域拆分接口函数并标注ts类型,service层可选增强逻辑;接口路径统一由环境变量控制,api文件通过聚合导出提升导入体验。

vue 3 中 axios 封装怎么在模块化文件中组织 api 接口列表

Vue 3 中 Axios 封装的模块化 API 组织,核心是“分层解耦”:把请求逻辑(怎么发)和业务接口(发什么)彻底分开。不推荐把所有接口写在一个文件里,也不建议在组件中直接调用 axios —— 这样既难维护,也破坏了关注点分离。

1. 分三层结构:request → api → service

这是目前主流且可长期演进的组织方式:

  • request.ts(或 request.js):仅负责创建 axios 实例、配置 baseURL、超时、拦截器(加 token、错误统一处理、取消重复请求等)。它不关心任何业务路径,只管“怎么发”。导出的是封装好的 service 实例。
  • api/ 目录下按业务域拆分文件,例如:userApi.ts、menuApi.ts、orderApi.ts。每个文件只定义本模块的请求函数,如 getUserInfo()、updateUser(data),内部调用 service.get() 或 service.post()。
  • service/(可选):更进一步,可将 api 层再包装一层,加入缓存控制、权限校验前置、loading 状态联动等业务增强逻辑。适合中大型项目,小项目可省略,直接在 api 文件里返回 Promise。

2. api 文件写法示例(以 userApi.ts 为例)

每个函数语义清晰、参数明确、返回类型可推断:

import { service } from '@/utils/request'
import type { UserResponse, LoginParams } from '@/types/user'
<p>// 登录(无需 token)
export const login = (data: LoginParams) => 
service.post<userresponse>('/base/access_token', data, { noNeedToken: true })</userresponse></p><p>// 获取当前用户信息(需 token)
export const getUserInfo = () => 
service.get<userresponse>('/base/userinfo')</userresponse></p><p>// 获取用户菜单
export const getUserMenu = () => 
service.get<string>('/base/usermenu')
</string></p>

注意两点:一是使用 TypeScript 泛型标注响应数据类型;二是通过配置项(如 { noNeedToken: true })控制拦截器行为,比硬编码判断更灵活。

vue-composition-api-best-practices
vue-composition-api-best-practices

Vue 3 组合式 API 与

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 17.1万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.7万人学习