前端框架vue.js系列教程(6)-vue.js远程访问RESTful API接口示例

前端框架vue.js系列教程:

  • 安装配置node.js和npm

  • vue.js工程项目创建

  • vue.js框架应用开发

  • vue.js单页面应用开发

  • vue.js中实现echarts绘图

  • vue.js远程访问RESTful API接口示例

  • vue.js使用Fetch API访问RESTful API接口示例

 

什么是RESTful API接口?

RESTful API也称为REST API ,是遵循 REST 架构规范的应用编程接口(API 或 Web API),支持与 RESTful Web 服务进行交互。REST 是表述性状态传递的英文缩写,由计算机科学家 Roy Fielding 创建。

学术化的说明

REST 是一组架构规范,并非协议或标准。API 开发人员可以采用各种方式实施 REST。

当客户端通过 RESTful API 提出请求时,它会将资源状态表述传递给请求者或终端。该信息或表述通过 HTTP 以下列某种格式传输:JSON(Javascript 对象表示法)、HTML、XLT、Python、PHP 或纯文本。JSON 是最常用的编程语言,尽管它的名字英文原意为“JavaScript 对象表示法”,但它适用于各种语言,并且人和机器都能读。

通俗的理解

RESTful API 要求前端以一种预定义的语法格式发送请求,那么服务端就只需要定义一个统一的响应接口,不必像之前那样解析各色各式的请求。

简单来说,就是用URI表示资源,资源在URI中用名词说明;用HTTP方法(GET, POST, PUT, DELETE)表征对这些资源的操作。

对于资源的具体操作类型,由HTTP动词表示。常用的HTTP动词有下面五个(括号里是对应的SQL命令)。

  • GET(SELECT):从服务器取出资源(一项或多项)。

  • POST(CREATE):在服务器新建一个资源。

  • PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。

  • PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。

  • DELETE(DELETE):从服务器删除资源。

对于暴露给外部用户使用的RESTful API,一般只提供GET操作接口。

PBCP(个人大数据竞赛平台)的RESTful API接口说明

PBCP(个人大数据竞赛平台)内置了Web Service并提供了几个常用的RESTful API接口,以满足用户测试需求。

要测试这些RESTful API接口,首先启动PBCP平台虚拟机,然后打开浏览器,访问 http://IP地址:9527,如下图所示:(注意,请将IP地址替换为你自己的IP)

img

可以点开任意一个链接测试。比如,点开第一个链接”某年某月(比如2016年11月)销售额最高的5个品牌,返回(品牌,销售额)”,它会请求RESTful API接口,并接收返回的JSON数据,如下图所示:

img

在vue.js项目中请求RESTful API接口

接下来实现这样的一示例:在vue.js项目中请求RESTful API接口,并显示请求回来的JSON数据。继续在前面几节所创建上hellovue-app项目中开发,请按以下步骤操作:

(1) 安装axios依赖库。

在vue.js中是通过Ajax请求RESTful API接口的。Vue 版本推荐使用 axios 来完成 ajax 请求,Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中。为此,我们首先在项目中安装Vue的Ajax依赖库axios,使得NPM包管理器安装:

$ npm install axios

(2) 创建.vue页面文件。

在项目的src/views/文件夹下,创建一个名为Ajax.vue的文件,并编辑内容如下:

<template>
<h2>Vue.js请求RESTful API并显示返回的数据</h2>
<div class="right">
    <!-- 在这里显示数据 -->
    <p><pre>{{ items }}</pre></p>  
</div>
</template>

<script>
  // 导入执行ajax的包
  import axios from 'axios'

  // 请求的RESTful API 接口(请将IP地址替换为自己PBCP的IP)
  var url = "http://IP地址:9527/jingsai/bar/2016"

  export default {
    name: 'AjaxPage',
    data () {
      return {
        items: ''
      }
    },
    mounted () { // 当这个页面挂载到DOM上时执行的方法
        // ajax请求
        axios.get(url)
            .then(response => {   // 请求成功处理
                  // 将返回的json数据赋值给items数据模型并显示在绑定的组件上    
                  // 为了方便查看,对json数据进行了格式化转换
                  this.items = JSON.stringify(response.data,null,"\t\t\t");

                  // 控制台输出请求回来的json数据
                  console.log(response.data)
              })
            .catch(error => {   // 请求失败处理
                  console.log(error);
              });
    }
  }
</script>

<!-- 添加"scoped"属性来限制CSS仅作用于这个组件 -->
<style scoped>
.left{
width:50%;
}
.right{
width: 100%;
float:right;
}

</style>

在上面的代码中,特别注意以下几点:

  • 使用“import axios from ‘axios’”语句导入了axios包用于执行Ajax请求;

  • 指定请求的RESTful API 接口为”/jingsai/bar/2016″,这是一个GET请求,其中/jingsai/bar/是嵌套的资源路径,2016是传递的参数,表示请求查询2016年的数据;

  • mounted ()方法,这是当这个页面挂载到DOM上时执行的方法,Ajax请求应该在这个方法里执行;

  • Ajax请求方法为axios.get(url),说明这是一个GET请求(告诉RESTful API是要执行查询请求),参数url就是前面定义的RESTful API接口地址。

(3) 修改主组件App.vue,添加导航链接和渲染组件,代码如下:

<template>  
<div class="navigate">
  <ul>
      <!--使用 router-link 组件进行导航 -->
      <li><router-link to="/">首页</router-link></li>
      <li><router-link to="/ajax">请求RESTful API接口</router-link></li>
  </ul>
</div>
<div class="pages">
    <!-- 渲染在这里 -->
    <router-view></router-view>
</div>
</template>

<script>
export default {
  name: 'App',
}
</script>

<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
.navigate{
width:200px;
float:left;
background-color: aliceblue;
}
</style>

(4) 修改入口文件main.js,导入路由组件文件并指定路由映射,主要修改部分如下:

......
// 1. 定义路由组件.  
import AjaxPage from "./views/Ajax.vue"

// 2. 定义一些路由映射
const routes = [
  { path: '/ajax', component: AjaxPage },
]
......

(5) 执行Vue应用程序。

在VS Code编辑器下方的“终端”窗口中,执行如下命令,启动开发服务器:

$ npm run serve

打开浏览器,访问http://localhost:8080/ajax,可以看到如下的界面:

img

这说明我们的Vue程序已经正确地请求了RESTful API接口,并接收到了返回的JSON数据。

© 版权声明
THE END
喜欢就支持一下吧
点赞295赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

夸夸
夸夸
还有吗!没看够!
取消
昵称表情代码图片

    暂无评论内容