프런트 엔드 요청 인터페이스의 여러 방법 요약

프론트 엔드 엔지니어로서 데이터를 얻기 위해 백엔드 인터페이스를 요청하는 것은 불가피하며 프론트 엔드 직원이 마스터하는 데 필요한 기술이기도합니다. 하지만 일정 기간 동안 하나의 요청 방법 만 사용하고 갑자기 즉시 실현할 수없는 다른 방법으로 변경하는 경우가 있으므로 향후 참고할 수 있도록 프론트 엔드 요청 API 방법을 요약했습니다.

하나, vue-resource

장점 : 작은 크기, 메인 스트림 브라우저 지원, Promise API 및 URI 템플릿 지원, 인터셉터 지원.

설치

    $ yarn add vue-resource
    $ npm install vue-resource

사용하다

	/*引入Vue框架*/
	import Vue from 'vue'
	/*引入资源请求插件*/
	import VueResource from 'vue-resource'
	
	/*使用VueResource插件*/
	Vue.use(VueResource)

흔한:

this.$http.get().then()
this.$http.post().then()
this.$http.jsonp().then()

학습 링크 : vue-resource

두, axios

vue2.0 이후에는 vue-resource가 더 이상 업데이트되지 않지만 axios가 권장됩니다. Promise 기반 HTTP 요청 클라이언트, 브라우저와 Node.js에서 동시에 사용할 수 있습니다.

이점:

(1) 브라우저에서 XMLHttpRequests 요청 보내기
(2) node.js에서 http 요청 보내기
(3) Promise API 지원
(4) 요청 및 응답 차단
(5) 요청 및 응답 데이터 변환
(6) 요청 취소
(7) 자동으로 JSON 데이터로 변환
(8) 클라이언트는 CSRF / XSRF 공격으로부터 보안을 보호합니다.

단독으로 사용 :

  • get 메소드

    axios.get (). then (). catch ()

참고 : get 메소드에서 매개 변수를 전달하면 URL을 직접 따르거나 param 객체를 통과 할 수 있습니다.

  • 포스트 방법

    axios.post (). then (). catch ()

참고 : 게시 모드에서 매개 변수 전달은 객체에 의해 전달되어야합니다

실제 개발에서는 쉽게 호출 할 수 있도록 axios가 캡슐화되고 요청 상태를 제어하는 ​​데 인터셉터가 사용됩니다.

axios 요청 캡슐화 :

API 파일을 생성하고 현재 디렉터리에 request.js 파일을 캡슐화하고 요청 응답의 차단 정보를 구성합니다.

/**
 * @file axios请求封装
 */
import axios from 'axios'
import store from '../store/common'
import router from '../router/common'
import {
    
     Toast } from 'vant'

const Axios = axios.create({
    
    })

// 响应时间
Axios.defaults.timeout = 10000
// `withCredentails`选项表明了是否是跨域请求
Axios.defaults.withCredentials = true
// 设置默认请求头
Axios.defaults.headers = {
    
    
  'X-Requested-With': 'XMLHttpRequest',
  'Content-Type': 'application/json; charset=UTF-8'
}

// 添加请求拦截器
Axios.interceptors.request.use(
  config => {
    
    
    // loadingInstance = Loading.service({
    
    
    //   fullscreen: true
    // });
    // 获取token
    let token = store.getters.getToken
    if (token) {
    
    
      // 判断是否存在token,如果存在的话,则每个http header都加上token
      config.headers.Authorization = token
    }
    return config
  },
  error => {
    
    
    return Promise.reject(error)
  }
)

// 添加返回拦截器
Axios.interceptors.response.use(
  response => {
    
    
    if (
      typeof response != 'undefined' &&
      (response.data.code == 1001 ||
        response.data.code == 0 ||
        response.data.code == 1000 ||
        response.data.code == 1100 ||
        response.data.code == 1200)
    ) {
    
    
      return response.data
    } else if (response.data.code == 20008) {
    
    
      // 交班后选机器号
      checkCode('当前无人当班,请选择机器号')
      router.replace('/center/machine')
      return response.data
    } else if (response.data.code == 1006) {
    
    
      // Token过期
      checkCode('登录过期,请重新登录')
      return response.data
    } else if (typeof response != 'undefined' && response.data.msg) {
    
    
      checkCode(response.data.msg)
      return response.data
    } else {
    
    
      checkCode('操作失败,请重试')
    }
    return ''
  },
  error => {
    
    
    if (error && error.response) {
    
    
      switch (error.response.status) {
    
    
        case 400:
          error.message = '请求错误'
          break
          ...
        default:
      }
    } else {
    
    
      error.message = '无法连接服务器'
    }
    // 对返回的错误处理
    return Promise.reject(error)
  }
)

// 请求失败错误信息提示
function checkCode(message) {
    
    
  // 关闭loading
  // loadingInstance.close();
  // 弹出错误信息
  Toast(message)
}
export default Axios

아래 그림과 같이 index.js 파일 통합 쓰기 요청 인터페이스를 생성합니다
여기에 사진 설명 삽입
. 요청 인터페이스 api를 전역으로 노출합니다 .vue.config.js 파일에서 chainwebpack을 구성하고 api 인터페이스를 전역 적으로 사용하도록 api의 별칭을 설정합니다.

chainWebpack: config => {
    
    
    config.resolve.alias
      .set('api', path.resolve('./src/api/index.js'))
    config.plugin('provide').use(webpack.ProvidePlugin, [
      {
    
    
        api: 'api'
      }
    ])
  }

인터페이스 요청 : await api.getName (index.js 아래의 해당 인터페이스 이름)을 직접 사용할 수 있습니다.

await api.pageSalesOrderProsDetailData(this.formDate).then(response => {
    
    
        if (response.data) {
    
    
          this.goodsList = this.goodsList.concat(response.data.content)
          this.totalPages = response.data.totalPages
          if (response.data.content.length < this.formDate.pageCount) {
    
    
            this.$store.commit('SET_ALL_LOADING', true)
          }
        }
        this.$store.commit('SET_SALES_RANK_MSG', this.goodsList)
      })

Vue의 Axios 패키징 및 API 인터페이스 관리

셋, 아약스

Jquery를 사용하여 캡슐화 된 Ajax

$.ajax({
    
    
    url:"http://www.microsoft.com", //请求的url地址
    dataType:"json", //返回格式为json
    async:true,//请求是否异步,默认为异步,这也是ajax重要特性
    data:{
    
    "id":"value"}, //参数值
    type:"GET", //请求方式
    beforeSend:function(){
    
    
        //请求前的处理
    },
    success:function(req){
    
    
        //请求成功时处理
    },
    complete:function(){
    
    
        //请求完成的处理
    },
    error:function(){
    
    
        //请求出错处理
    }
});

매개 변수 설명 :

$.ajax({
    
    
  url:"   ",                 //请求的地址
  type:"   ",              //请求方式两种“get”或者“post”,默认为“get”
  timeout:             //设置请求超时时间(毫秒。
  async:               //是否异步,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。
  cache:             //默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。
  data:               //要求为Object或String类型的参数,发送到服务器的数据。get请求中将附加在url后
  dataType:      //预期服务器返回的数据类型。可用的类型如下:
				xml:返回XML文档,可用JQuery处理。
				html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。
				json:返回JSON数据。
				jsonp:JSONP格式。使用SONP形式调用函数
  beforeSend:   //发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头
  complete:        //请求完成后调用的回调函数(请求成功或失败时均调用)。
  error:        //请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)
})

넷, WebSocket

출현 이유 :
프런트 엔드와 백 엔드 간의 가장 일반적인 상호 작용 모드는 프런트 엔드가 데이터 요청을 보내고 백 엔드에서 데이터를 가져온 후 페이지에 데이터를 표시하는 것입니다. 프런트 엔드가 작업을 수행하지 않으면 백 엔드가 데이터를 프런트 엔드에 적극적으로 푸시 할 수 없으며 이는 또한 http 프로토콜의 결함입니다. 따라서 새로운 통신 프로토콜 인 websocket이 등장했으며 가장 큰 특징은 서버가 클라이언트에 메시지를 적극적으로 푸시 할 수 있고 클라이언트도 서버에 메시지를 적극적으로 보낼 수있어 진정한 평등을 실현할 수 있다는 것입니다.

사용 시나리오 :
금융 주식 데이터 그래프, 즉시 주문 정보, 날씨, 토큰 만료 여부 등과 같이 요청없이 최신 데이터가 반환 되는 시나리오에서 사용 합니다.

참고 : Vue는 websocket을 사용할 때 다음 사항에주의해야합니다.

(1) 먼저 브라우저가 웹 소켓을 지원하는지 확인해야합니다.
여기에 사진 설명 삽입
(2) 컴포넌트가로드되면 웹 소켓을 연결하고 컴포넌트가 파괴되면 웹 소켓을 분리합니다.
(3) 백엔드 인터페이스에서 소켓 모듈을 도입해야합니다. 그렇지 않으면 연결이 실현되지 않습니다.

예를 들면 :

<template>
    <div>
        <button @click="send">发消息</button>
    </div>
</template>
<script>
export default {
    
    
    data () {
    
    
        return {
    
    
            path:"test",
            socket:""
        }
    },
    mounted () {
    
    
        // 初始化
        this.init()
    },
    methods: {
    
    
        init: function () {
    
    
            if(typeof(WebSocket) === "undefined"){
    
    
                alert("您的浏览器不支持socket")
            }else{
    
    
                // 实例化socket
                this.socket = new WebSocket(this.path)
                // 监听socket连接
                this.socket.onopen = this.open
                // 监听socket错误信息
                this.socket.onerror = this.error
                // 监听socket消息
                this.socket.onmessage = this.getMessage
            }
        },
        open: function () {
    
    
            console.log("socket连接成功")
        },
        error: function () {
    
    
            console.log("连接错误")
        },
        getMessage: function (msg) {
    
    
            console.log(msg.data)
        },
        send: function () {
    
    
            this.socket.send(params)
        },
        close: function () {
    
    
            console.log("socket已经关闭")
        }
    },
    destroyed () {
    
    
        // 销毁监听
        this.socket.onclose = this.close
    }
}
</script>

추천

출처blog.csdn.net/Smell_rookie/article/details/100052286