Vue项目api接口封装、拆分管理

项目使用vue-cli+axios,看了很多项目在api封装时候都是以函数方法定义的,我们推荐使用对象进行定义,再由一个index.js进行统一分发,函数的部分也方便日后改造

结果预览:

api内容管理

const user = {
  get: {
    name: '获取用户列表',
    type: 'post',
    path: '/user/get'
  },
  add: {
    name: '添加用户',
    type: 'post',
    path: '/user/add'
  },
  edit: {
    name: '编辑用户',
    type: 'post',
    path: '/user/edit'
  }
}

– 业务代码中调用api

async editUser() {
  const params = {
    //your param
  }
  const res = await this.$api.user.edit(params)
}

操作步骤

目录结构
src
– api
– -- modules 不同模块的业务api
– -- – demo.js 业务模块
– -- index.js 用于api函数注册
– -- request.js 用于axios对象定义
目录结构

1.定义axios: /src/api/request.js
在这个步骤中我们可以定义axios的全局配置、请求拦截、响应拦截,这一步中安装qs来处理form-urlencoded的post请求

import axios from 'axios'
import qs from 'qs'

const service = axios.create({
  timeout: 20000
})

service.defaults.headers.common['Content-Type'] = 'application/json'

service.interceptors.request.use(
  config => {
    if (config.method === 'post' && config.headers['Content-Type'] === 'application/x-www-form-urlencoded') {
      config.data = qs.stringify(config.data)
    }
    return config
  },
  error => {
    Promise.reject(error)
  }
)

service.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    return Promise.reject(error)
  }
)

export default service

2.定义api业务接口: /src/api/modules/demo.js

const user = {
  get: {
    name: '获取用户列表',
    type: 'post',
    path: '/user/get'
  },
  add: {
    name: '添加用户',
    type: 'post',
    path: '/user/add'
  },
  edit: {
    name: '编辑用户',
    type: 'post',
    path: '/user/edit'
  }
}

const company = {
  get: {
    name: '获取企业列表',
    type: 'post',
    path: '/company/get',
  }
}

const usetTest = {
  add: {
    name: '这是一个示例接口,你可以单独改变它的请求域名或请求头参数',
    type: 'post',
    path: '/user/add',
    host: 'http://www.baidu.com',
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  }
}

export default { user, company, usetTest }

3.注册api函数: /src/api/index.js
在这里我们引入axios实例与业务模块统一进行函数注册

import request from './request'
import demo from './modules/demo'

const modules = {
  ...demo
}

const api = (type, url, params = {}, options = {}) => {
  if (type === 'get') {
    return request({
      url,
      method: 'get',
      params,
      ...options
    })
  } else if (type === 'post') {
    return request({
      url,
      method: 'post',
      data: params,
      ...options
    })
  }
}

const baseHost = process.env.VUE_APP_URL

const result = {}

for (const module in modules) {
  const methods = modules[module]
  result[module] = {}
  for (const method in methods) {
    const { type, path, host, headers = {} } = methods[method]
    result[module][method] = (parmas = {}, options = {}) => {
      const url = (options.host || host || baseHost) + path
      return api(type, url, parmas, { ...options, headers: { ...headers, ...options.headers }, host: null })
    }
  }
}

export default result

4.挂载api方法: /src/main.js
将方法挂载至vue的原型中

import api from './api'
Vue.prototype.$api = api

#####最后我们就可以在项目中使用了
1.常规用法

async editUser() {
  const params = {
    item: {
      id: 1,
      name: '张三'
    }
  }
  const res = await this.$api.user.edit(params)
}

2.扩展用法
axios有许多扩展参数,我们也可以在请求api时候带入,例如onUploadProgress、onDownloadProgress等

async editUser() {
  const params = {
    item: {
      id: 1,
      name: '张三'
    }
  }
  const res = await this.$api.user.edit(params, {
    headers: { //自定义头部
      username: 'test'
    },
    onUploadProgress: e => { //处理上传进度事件
      console.log('onUploadProgress:', e)
    },
    onDownloadProgress: e => { //处理下载进度事件
      console.log('onDownloadProgress:', e)
    }
  })
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3中封装API接口是一个常见的任务,因为这是在Vue应用程序中使用API的主要方式。在Vue3中,我们可以使用Axios这个工具来处理HTTP请求。Axios对于Vue应用程序非常有用,并且能够轻松地编写模块化、可重用的API代码。 首先,在Vue3项目中,我们需要首先安装并引入Axios库。我们可以在Vue的main.js文件中导入Axios,然后将其安装到Vue实例中。在这个过程中,我们可以为Axios设置一些默认的配置,例如请求方式、请求url、请求超时时间等等。 接下来,我们可以在Vue的组件中定义一个API服务,并使用Axios库来进行API请求。我们可以通过封装一个统一的API服务来避免在不同的组件中重复写相同的请求代码,提高代码的封装性和重用性。可以将常用的API请求封装为方法,以便在Vue组件中轻松调用,并提供诸如请求参数、错误处理和成功处理等功能。 在Vue3中,我们可以使用Axios的拦截器来处理请求或响应数据,例如为请求添加统一的headers、过滤响应数据等等,从而提高API请求的灵活性。 最后,我们需要将API服务作为插件添加到Vue实例中,以方便在应用程序中全局使用。这是通过在Vue的main.js文件中安装一个Vue插件并将API服务作为选项导入实现的。 总的来说,在Vue3中封装API接口可以提高代码的可维护性和重用性,同时也能够使我们更容易地统一管理API请求,从而提高应用程序的性能和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值