我的编程空间,编程开发者的网络收藏夹
学习永远不晚

关于vue中api统一管理的那些事

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

关于vue中api统一管理的那些事

前情提要

正常写小项目的时候,关于请求接口的存放可能没有那么在意,毕竟纵观整个项目可能也就那么十几二十个接口,当出现问题进行定位的时候也能很轻松的定位到。

但是当接口的数量达到百级的时候,出现接口调整等的问题时就会出现捉襟见肘的情况,再多点可能改一个api接口就要找好久。而且有的接口可能好多地方用,如果这个接口发生更好,好家伙,光修改个接口地址或者参数什么的就得要一两个小时,太影响效率和开发心情。

此时将api模块解耦出来就显得尤为重要。现在收集到了api统一管理的几种方案,各有千秋,具体优劣还有待各位看官的探讨。

针对的是vue脚手架项目,不是在html中引入vue的项目。

针对小项目而言(没有单独二次封装axios)

无需管理,直接干。仅限于接口数量在20-30的

上代码:

<script>
import axios from 'axios';
export default {
  methods: {
    async request() {
      let data = {}
      try {
        // host指的是请求的域名,path指的是请求的路径, data是相关的参数和请求头配置
        let res = await axios.post(`${host}${path}`, {
          data
        })
        console.log(res)
      } catch(err) {
        this.$message.error(err.message)
      }
    }
  }
}
</script>

统一api.js文件管理

将所有的api的接口信息都写在一个js文件里去维护。页面接口请求直接引入即可

  • 在根目录下创建api文件夹,然后创建index.js
export default {
  getInfo: 'https://xxx.x.com/getinfo'
}
  • 具体页面使用
<script>
import axios from 'axios';
import api from '@/api/index';
export default {
  methods: {
    async request() {
      let data = {}
      try {
        let res = await axios.post(api.getInfo, {
          data
        })
        console.log(res)
      } catch(err) {
        this.$message.error(err.message)
      }
      
    }
  }
}
</script>

针对非小型项目而言(进行axios的二次封装)

关于axios二次封装的问题在这里就不做过得赘述了,有小白不懂得可以联系我。

对于接口数量超过50的来说,还是用上述的方式去请求接口,此时无论是对于维护还是升级而言都不是很友好,此时我们需要更便利的方案。

api统一管理 + 挂载到vue实例上 + 单模块

思路:在api统一管理时,不仅仅管理请求地址,而是直接写一个request的请求方法,通过接受一些参数来实现多变性。

  • api/index.js
import request from '@/utils/axios'
export default {
  getInfo(params) {
    return request({
      url: '/xxx/xxx/xxx',
      method: 'post/get',
      params, // 如果是get请求的话
      data: params // 如果是post请求的话
    })
  }
}
  • 在main.js里
import Vue from 'vue'
import App from './App.vue'
import api from '@/api/index';
Vue.prototype.$api = api;
Vue.config.productionTip = false
new Vue({
  render: h => h(App),
}).$mount('#app')
  • 页面上得使用
<script>
import HelloWorld from './components/HelloWorld.vue'
import api from '@/api/index';
export default {
  methods: {
    async request() {
      let data = {}
      try {
        let res = await this.$api.getInfo(data)
        console.log(res)
      } catch(err) {
        this.$message.error(err.message)
      }
    }
  }
}
</script>

api统一管理 + 挂载到vue实例上 + 多模块

  • 优点:可以在任意位置调用接口
  • 缺点:如果接口数量足够大,挂载到vue实例上得数据过多,可能会造成性能问题
  • api/modules/account.js
import account from '@/utils/axios'
export default {
  getInfo(params) {
    return request({
      url: '/xxx/xxx/xxx',
      method: 'post/get',
      params, // 如果是get请求的话
      data: params // 如果是post请求的话
    })
  }
}
  • api/index.js
import account from './modules/account'
export default {
  account
}
  • 在main.js里
import Vue from 'vue'
import App from './App.vue'
import api from '@/api/index';
Vue.prototype.$api = api;
Vue.config.productionTip = false
new Vue({
  render: h => h(App),
}).$mount('#app')
  • 页面上的使用
<script>
import HelloWorld from './components/HelloWorld.vue'
import api from '@/api/index';
export default {
  methods: {
    async request() {
      let data = {}
      try {
        let res = await this.$api.account.getInfo(data)
        console.log(res)
      } catch(err) {
        this.$message.error(err.message)
      }
    }
  }
}
</script>

api统一管理 + vuex + 单模块

思路:api统一管理的方式不变,但是由挂载到vue实例上改成vuex 优点:在不挂载到vue实例的基础上可以在任何页面随意调用任何接口 缺点:为了保证在刷新页面不会报错的情况下就需要在api模块写一个接口配置,同时在store模块也需要写一次,比较繁琐。

  • 在api/index.js的写法不变。
  • main.js中的相关挂载代码删除
  • store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
import api from '@/api/index';
Vue.use(Vuex);
export default new Vuex.Store({
  action: {
    getInfo(store, params) {
      return api.getInfo(params)
    }
  }
})
  • 在页面中
<script>
export default {
  methods: {
    async request() {
      let data = {}
      try {
        let res = await this.$store.dispatch('getInfo', data)
        console.log(res)
      } catch(err) {
        this.$message.error(err.message)
      }
    }
  }
}
</script>

当然你也可以使用mapActions

<script>
import { mapActions } from 'vuex';
export default {
  methods: {
    ...mapActions([ 'getInfo' ])
    async request() {
      let data = {}
      try {
        let res = await this.getInfo(data)
        console.log(res)
      } catch(err) {
        this.$message.error(err.message)
      }
    }
  }
}
</script>

api统一管理 + vuex + 多模块

优点:可以在页面的任何位置进行调用 缺点:新增删除修改同一个接口,需要同时维护两个文件

  • 对于api文件而言,此时各个模式是相互独立的:api/account.js
import request from '@/utils/axios'
export default {
  getInfo(params) {
    return request({
      url: '/xxx/xxx/xxx',
      method: 'post/get',
      params, // 如果是get请求的话
      data: params // 如果是post请求的话
    })
  }
}
  • store/modules/account.js
import api from '@/api/account';
export default {
    namespaced: true,
    actions: {
        getInfo(store, params) {
          return api.getInfo(params)
        }
    }
}
  • store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
import account from './modules/account';
Vue.use(Vuex);
export default new Vuex.Store({
  modules: {
      account
  }
})
  • 在页面中
<script>
export default {
  methods: {
    async request() {
      let data = {}
      try {
        let res = await this.$store.dispatch('account/getInfo', data)
        console.log(res)
      } catch(err) {
        this.$message.error(err.message)
      }
    }
  }
}
</script>

总结

目前就这些方法,各有千秋。

到此这篇关于vue中api统一管理的文章就介绍到这了,更多相关vue api统一管理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

关于vue中api统一管理的那些事

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

关于WinXP系统任务管理器的一些应用或技巧

任务栏管理器系统自带的一个很方便的软件。长久以来,大家也仅仅是习惯性的点击ctrl+alt+del来调出任务管www.cppcns.com理器了,然后取消某个失去相应的程序而已。其实任务管理器很强大的,它能很直观反映有系统的许多的东西,并且
2023-06-01

关于系统管理员要定期完成的九件事

欢迎各位阅读本篇文章,本篇文章讲述了关于系统管理员要定期完成的九件事,编程学习网教育平台提醒各位:本篇文章纯干货~因此大家一定要认真阅读本篇文章哦!
关于系统管理员要定期完成的九件事
2024-04-23

关于项目管理的系统一个全面的视角

项目管理是一个涉及多个方面的工作过程,包括计划、组织、领导和控制项目以达到预定的目标。然而,对于许多人来说,项目管理可能是一个复杂的概念,涉及到大量的信息和数据。在这种情况下,使用项目管理的系统就显得尤为重要。本文将从多个角度详细介绍关于项目管理的系统,包括其功能、特点、优点和应用。项目管理的系统是一种工具,用于
关于项目管理的系统一个全面的视角
2023-12-10

关于linux中系统输入输出的管理详解

系统中输入输出的管理1.理解系统的输入输出linux系统中,1表示正确输出,2表示错误输出2.管理输入输出的符号(1)输出重定向(输出到指定的位置)> ##重定向正确输出 2> ##重定向错误输出
2022-06-04

收集的55个Linux系统管理中常用的一些shell命令

1.显示消耗内存/CPU最多的10个进程ps aux | sort -nk +4 | tailps aux | sort -nk +3 | tail2.查看进程 按内存从大到小排列ps -e -o "%C : %p : %z : %a"
2022-06-04

编程热搜

目录