在前端开发中,请求接口,是必不可少的一个环节,

请求接口,通俗来说,就是我们通过请求服务器的数据,来达到响应式地渲染数据

那如何请求接口,才会更高效且简单呢?

以下方法可以参考借鉴借鉴

一.接口文档目录位置

可以参考这个目录,进行文档的存放

 二.思路

封装接口主要分为4个版块

(1)环境(本地/测试/正式)切换

(2)域名拼接

(3)封装数据接口

(4)调用数据接口

三.具体思路

(1)地址环境切换

 1-1)首先在实际的开发过程中,

一般来说,后端会提供3个地址给到我们,

分别是本地地址、测试环境地址、正式环境地址

然后我们设置一个域名变量

再通过三元表达式来进行本地/测试 以及 本地/正式环境的切换

demo示例

// // 本地/测试环境地址
const BASE_API_URL = process.env.NODE_ENV === 'development' ? '本地地址,后端给你' : '测试地址,后端给你'

// // 本地/正式环境地址
const BASE_API_URL = process.env.NODE_ENV === 'development' ? '本地地址,后端给你' : '正式地址,后端给你'

1-2)当我们npm run dev 让项目跑起来的时候

npm run dev 就与process.env.NODE_ENV === 'development' 内部配置是全等状态,

所以就会执行本地地址 !

如果我们是想要打包(npm build )的话,

npm build 就与process.env.NODE_ENV === 'development' 不一致

所以就会执行后面的测试/正式环境地址

1-3)最后,我们通过写两个三元表达式,把测试和正式环境的地址进行区分开来, 

当后端同事要求我们更新测试环境时(就是npm build打包的时候)

我们需要把正式环境的那个三元表达式隐藏,反之

(2)域名拼接

配置完内部环境地址之后, 我们需要进行域名拼接

demo示例:

import { BASE_API_URL } from '@/config' //(需要加上域名的路径)

class Apis {
    //域名 
    API_URL = BASE_API_URL 
   //定义一个新的域名变量,来将我们内部配置环境的域名变量(BASE_API_URL)赋到里面

    //首页数据
    indexIndex = `${this.API_URL}/index/index`

    //学习列表
    articleIndex = `${this.API_URL}/article/index`
    // 定义一个接口变量(articleIndex),
    // 然后将上面定义的新域名变量(API_URL),进行运用,
    // 后面的/xxx/xxx是后端同事给我们的接口文档里的地址

    //学习详情
    articleDetail = `${this.API_URL}/index/detail`

    //学习列表
    joinIndex = `${this.API_URL}/course/index`

    //上传类
    uploadFile = `${this.API_URL}/tools/upload`
}

class User {
    //域名
    API_URL = BASE_API_URL
    //个人基本信息
    userIndex = `${this.API_URL}/user/index`
    //修改密码模块
    userPassword = `${this. API_URL}/user/password`
    //上传个人信息模块
    userUpdate = `${this.userURL}/user/index`


}

const apis = new Apis()  //细分版块
const user = new User()

export {
    apis,   //进行引入
    user
}

(3)封装数据接口

demo 示例

import Http from '@/assets/js/http'
import { apis } from '@/assets/js/apis'  //进行引入域名拼接的地址
import {user} from '@/assets/js/apis'
const indexIndex = (data) => {
    return Http.get(apis.indexIndex, data)
}
// const 请求 = (传进来的参数) => {
//     return Http.get(后端给定的完整地址, 传进来的参数)
 }

const articleIndex = (data) => {  
//articleIndex:是一个我们自定义的函数接口变量
//data:代表的是我们后端文档里,在请求接口前,需要传入的参数,例如page、limit 拿第几页的数据
    return Http.get(apis.articleIndex, data) 
//apis.articleIndex:就是我们前面进行域名拼接的地址,也是完整地址
//data:就是传进来的参数
}

const articleDetail = (data) => {
    return Http.get(apis.articleDetail, data)
}

const userIndex = (data) => {
    return Http.get(user.userIndex, data)
}

const  userUpdate = (data) => {
    return Http.post(user.userUpdate, data)
}


const joinIndex = (data) => {
    return Http.get(apis.joinIndex, data)
}

const password = (data) => {
    return Http.post(user.userPassword,data)
}

const toolsUploadImg = (data) => {
    return Http.post(apis.uploadFile,data)
}

export {    //进行引入
    indexIndex,
    articleIndex,
    articleDetail,
    joinIndex,
    userIndex,
    userUpdate,
    password,
    toolsUploadImg
}

(4)具体页面请求接口

完成前面3个步骤以后,我们的接口就已经完成封装了

所以在页面的任何一个位置,我们都可以进行调用

下面是示例

首先,先调用接口数据:


getInfo(i) {
    articleIndex({ 
        limit_rows:15, 
        page: i 
    }).then(res => { 
        let myData = res.data;
        this.linklist = myData.list;
        this.totalPage = myData.total_page;
        this.totalNumber = myData.total_number
    })
},

解析:

getInfo(i) {
    articleIndex({ 
   //这个是第三步封装好的数据接口
   //articleIndex:这个是第三步我们自定义的那个函数接口变量
   //data:里面是传进来的参数,就是后端接口文档里面的参数(前半部分)就是下面这些总条数,页数参数
        limit_rows:15, //总条数
        page: i //第几页
    }).then(res => { //这个是后端接口文档里面的具体数据
        let myData = res.data; 
        this.linklist = myData.list;
        this.totalPage = myData.total_page;
        this.totalNumber = myData.total_number
    })
},
然后,在需要数据渲染的位置,进行动态渲染(就是把数据填入)
<ul>
    <li v-for="item in linklist" :key="item.id" :title="item.title" >
//item:就是指数据里面具体到某一条数据 
        <div class="link-left">
            <a href="" @click="toDetail(item.id)" 
// item.id、item.title :就是具体某一条数据里面的具体内容,例如一条数据里面的标题、序号等
               slot="reference">·  {{item.title}}</a>
        </div>
        <div class="link-right">
            <p>{{item.create_time}}</p>
        </div>
    </li>
</ul>

以上就是前端接接口的全部步骤和思路了,可参考借鉴,大神们如果有更好的思路也请多多指教!

Logo

前往低代码交流专区

更多推荐