Vue項(xiàng)目中API設(shè)計(jì)及攔截器使用

合理添加攔截器、明確API設(shè)計(jì)的好處:

  • 統(tǒng)一管理接口
  • 減少參數(shù)重傳
  • 規(guī)范前端開發(fā)
  • 提升開發(fā)效率

合理設(shè)計(jì)攔截器

import axios from 'axios'
import Router from '@/router'
import { Notification } from 'element-ui'
// 獲取全局baseURL
const baseUrl = window.g.baseURL
// 設(shè)置axios默認(rèn)URL
axios.defaults.baseURL = baseUrl
// 對(duì)token添加過期處理
export default async (url, data) => {
  let res
  // 判斷是否需要有下載設(shè)置
  if (data.isBlob === 1) {
    res = await axios.post(url, data, { responseType: 'blob' })
  } else {
    res = await axios.post(url, data)
  }
  // access_token過期,返回登錄頁
  if (res.data.res === 1100) {
    Notification.error({
      title: '錯(cuò)誤',
      message: res.data.msg,
      duration: 1500
    })
    Router.push('/')
  } else if (res.data.res !== 0 && !data.isBlob) {
    // 返回值不為0且不是下載文件時(shí)(下載文件時(shí)返回二進(jìn)制流,沒有res),提示用戶錯(cuò)誤信息
    Notification.error({
      title: '錯(cuò)誤',
      message: res.data.msg,
      duration: 1500
    })
  }
  return res
}

// 一、請(qǐng)求攔截器
axios.interceptors.request.use(function (config) {
  // 攔截器處理(這里使用FormData傳參,并簡(jiǎn)單添加token)
  const fm = new FormData()
  if (config.data) {
    // 添加access_token
    if (sessionStorage.access_token) {
      fm.append('access_token',sessionStorage.access_token)
    }
  config.data = fm
  return config
}, function (error) {
  // 對(duì)請(qǐng)求錯(cuò)誤做些什么
  Notification.error({
    title: '系統(tǒng)錯(cuò)誤',
    message: '服務(wù)器連接失敗',
    duration: 1500
  })
  return Promise.reject(error)
})
// 二、響應(yīng)攔截器
axios.interceptors.response.use(function (response) {
  return response
}, function (error) {
  // 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么
  Notification.error({
    title: '系統(tǒng)錯(cuò)誤',
    message: '服務(wù)器連接失敗',
    duration: 1500
  })
  return Promise.reject(error)
})

統(tǒng)一設(shè)計(jì)管理API

import axios from './axios'

const SUPERKET= 'superket'

// 登錄
const ADMIN = '/admin'
export const adminLogin = (data) => axios(SUPERKET+ ADMIN + '/login', data)
// 管理員管理
export const adminList = (data) => axios(SUPERKET+ ADMIN + '/list', data)
export const adminAdd = (data) => axios(SUPERKET+ ADMIN + '/add', data)
export const adminEdit = (data) => axios(SUPERKET+ ADMIN + '/changePassword', data)
export const adminDel = (data) => axios(SUPERKET+ ADMIN + '/del', data)

// 系統(tǒng)設(shè)置
const SYSTEM = '/system'
export const systemList = (data) => axios(SUPERKET+ SYSTEM + '/list', data)
export const systemEdit = (data) => axios(SUPERKET+ SYSTEM + '/edit', data)

// 人員管理
const MEMBER = '/member'
export const memberList = (data) => axios(SUPERKET+ MEMBER + '/list', data)
export const memberAdd = (data) => axios(SUPERKET+ MEMBER + '/add', data)
export const memberEdit = (data) => axios(SUPERKET+ MEMBER + '/edit', data)
export const memberDel = (data) => axios(SUPERKET+ MEMBER + '/del', data)

附錄
項(xiàng)目目錄示意圖
未完待續(xù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 去年有段時(shí)間得空,就把谷歌GAE的API權(quán)威指南看了一遍,收獲頗豐,特別是在自己幾乎獨(dú)立開發(fā)了公司的云數(shù)據(jù)中心之后...
    騎單車的勛爵閱讀 21,080評(píng)論 0 41
  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中。。。 其實(shí)如果沒有APIManager這一層是沒法使用delegate的,畢竟多個(gè)單...
    yhtang閱讀 5,466評(píng)論 1 23
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,619評(píng)論 1 32
  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,458評(píng)論 0 13
  • 隨著近年央視《中國(guó)詩(shī)詞大會(huì)》熱播,有關(guān)古詩(shī)詞的話題一時(shí)成為炙手可熱的大眾話題,大會(huì)冠軍少年英雄武亦姝脫穎...
    玩推理閱讀 463評(píng)論 1 2

友情鏈接更多精彩內(nèi)容