【云+社区年度征文】腾讯云搭建Easy-Mock对接Element-UI提供数据支持
本文目标
了解RESTful的基本概念,对Swagger接口API的语法有基本的认识,动手搭建Easy-Mock服务器,对接
Element-UI进行数据提供。
RESTful
RESTful架构,REST的名称"表现层状态转化"。就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易 于理解、扩展方便,所以正得到越来越多网站的采用。
资源(Resources)
就是网络环境中的一个信息,比如:图像,视频,音乐,文字等存在的内容,都是可以使用URI去定位它们的位置然后得到它。这是一个独一无二的标识。
表现层(Representation)
把上述“资源“进行展示的形式。比如JPG,MP4,MP3,TXT等。
状态转化(State Transfer)
访问一个网站,就代表了客户端和服务器的一个互动过程。比如存在于数据库中的数据经过后台服务器的处理生成静态文件HTML呈现到浏览器中。
HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。
Swagger
swagger是一个流行的API开发框架,这个框架以“开放API声明”(OpenAPI Specification,OAS)为基础,对整个API的开发周期都提供了相应的解决方案,是一个非常庞大的项目(包括设计、文档以及测试和部署,几乎支持所有语言)。
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。
语法
字段名 |
类型 |
描述 |
---|---|---|
swagger |
string |
必需的。使用指定的规范版本。 |
info |
Info Object |
必需的。提供元数据API。 |
host |
string |
主机名或ip服务API。 |
basePath |
string |
API的基本路径 |
schemes |
string |
API的传输协议。 值必须从列表中:"http","https","ws","wss"。 |
consumes |
string |
一个MIME类型的api可以使用列表。值必须是所描述的Mime类型。 |
produces |
string |
MIME类型的api可以产生的列表。 值必须是所描述的Mime类型。 |
paths |
路径对象 |
必需的。可用的路径和操作的API。 |
definitions |
定义对象 |
一个对象数据类型生产和使用操作。 |
parameters |
参数定义对象 |
一个对象来保存参数,可以使用在操作。 这个属性不为所有操作定义全局参数。 |
responses |
反应定义对象 |
一个对象响应,可以跨操作使用。 这个属性不为所有操作定义全球响应。 |
externalDocs |
外部文档对象 |
额外的外部文档。 |
summary |
string |
什么操作的一个简短的总结。 最大swagger-ui可读性,这一领域应小于120个字符。 |
description |
string |
|
operationId |
string |
独特的字符串用于识别操作。 id必须是唯一的在所有业务中所描述的API。 工具和库可以使用operationId来唯一地标识一个操作,因此,建议遵循通用的编程的命名约定。 |
deprecated |
boolean |
声明该操作被弃用。 使用声明的操作应该没有。 默认值是false。 |
(2)字段类型与格式定义
普通的名字 |
type |
format |
说明 |
---|---|---|---|
integer |
integer |
int32 |
签署了32位 |
long |
integer |
int64 |
签署了64位 |
float |
number |
float |
|
double |
number |
double |
|
string |
string |
|
|
byte |
string |
byte |
base64编码的字符 |
binary |
string |
binary |
任何的八位字节序列 |
boolean |
boolean |
|
|
date |
string |
date |
所定义的full-date- - - - - -RFC3339 |
dateTime |
string |
date-time |
所定义的date-time- - - - - -RFC3339 |
password |
string |
password |
用来提示用户界面输入需要模糊。 |
举例
- swagger: '2.0'
- info:
- version: "1.0.0"
- title: API
- basePath: /base
- host: www.surpass.org.cn
- paths:
- /city:
- post:
- summary: 新增城市
- parameters:
- - name: "body"
- in: "body"
- description: 城市实体类
- required: true
- schema:
- $ref: '#/definitions/City'
- responses:
- 200:
- description: 成功
- schema:
- $ref: '#/definitions/ApiResponse'
- definitions:
- City:
- type: object
- properties:
- id:
- type: string
- description: "ID"
- name:
- type: string
- description: "名称"
- ishot:
- type: string
- description: 是否热门
- ApiResponse:
- type: object
- properties:
- flag:
- type: boolean
- description: 是否成功
- code:
- type: integer
- format: int32
- description: 返回码
- message:
- type: string
- description: 返回信息
API预览
(1)在本地安装nginx
(2)下载SwaggerUI源码 https://swagger.io/download-swagger-ui/
(3)解压,将dist文件夹下的全部文件拷贝至 nginx的html目录
(4)启动nginx
(5)浏览器打开页面 http://localhost:801即可看到文档页面
Mock.js
Mock.js (官网http://mockjs.com/)是一款模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试,根据数据模板生成模拟数据模拟 Ajax 请求,生成并返回模拟数据基于 HTML 模板生成模拟数据。
Mock.js具有以下特点:
- 前后端分离
- 让前端攻城师独立于后端进行开发。
- 增加单元测试的真实性
- 通过随机数据,模拟各种场景。
- 开发无侵入
- 不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据。
- 支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。
安装
- cnpm install mockjs
举例
以前生成五条数据的集合只能写死。
- {
- "list": [
- {
- "id": 1,
- "name": "测试"
- },
- {
- "id": 1,
- "name": "测试"
- },
- {
- "id": 1,
- "name": "测试"
- },
- {
- "id": 1,
- "name": "测试"
- },
- {
- "id": 1,
- "name": "测试"
- }
- ]
- }
新建一个js文件,填入内容:
- let Mock=require('mockjs')
- let data=Mock.mock({
- 'list|5':[
- {
- 'id':1,
- 'name':'测试'
- }
- ]
- })
- console.log(JSON.stringify(data,null,2 ))
命名m1.js,执行命令 node m1
,查看运行结果。可以看出与上面写死的效果是一样的。
再来看一个比较复杂的效果。
- let Mock=require('mockjs')
- let data= Mock.mock({
- 'list|3':[ //生成三个实体数据
- {
- "id":1,
- "name|2-4":'舟舟', //字符串重复次数
- "phone|11":"1",
- "point|120-150":0, //数字就随机120-150之内的数
- "money|1000-3000.2-4":0, //数字就随机1000-3000之内的数,并保留两到四位小数
- "status|1":true, //随机生成布尔值 概率均等
- "default|1-3":true, //随机生成布尔值 true为1/4
- "detail|1":{id:2,name:'ss',age:12} //随机去body内一个属性
- }
- ]
- })
-
- console.log(JSON.stringify(data,null,2))
命名m2.js,执行命令 node m2
,查看运行结果,生成了不同的数据结果。这样就会更加真实的来模拟后端给我们发送的数据。
EasyMock
Easy Mock 是一个极其简单、高效、可视化、并且能快速生成模拟数据的在线 mock 服务。以项目管理的方式组织 Mock List,能帮助我们更好的管理 Mock 数据。
在线文档:https://www.easy-mock.com/docs
腾讯云安装EasyMock
首先下载需要的node,mongoDB,redis
yum方式安装nodejs
(1) 安装
- yum install -y nodejs
查看安装的版本
- node -v
yum方式安装mongoDb
(1)配置yum
- vi /etc/yum.repos.d/mongodb-org-3.2.repo
编辑以下内容:
- [mongodb-org-3.2]
- name=MongoDB Repository
- baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
- gpgcheck=1
- enabled=1
- gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
(2)安装MongoDB
- yum install -y mongodb-org
(3)启动MongoD
- systemctl start mongod
yum方式安装redis
(1)下载fedora的epel仓库
- yum install epel-release
(2)下载安装redis
- yum install redis
(3)启动redis服务
- systemctl start redis
安装easy-mock
上传压缩文件:https://github.com/easy-mock/easy-mock
安装zip 和unzip
- yum install zip unzip
解压压缩包
- unzip easy-mock-dev.zip
进入目录,安装依赖
- cd easy-mock-dev/
- npm install
执行构建,运行
- npm run build
- npm run start
使用方法
浏览器中访问地址
- http://{ip}:7300
初始界面如下,不吹牛皮的说,这个页面确实好看。
注册账户后进入首页
我们新创建一个项目,填入相关信息,选择上传文件按,上传我们上面的yml文件。
后续如果想要添加这个项目的api可以点击右上角设置导入。现在可以对这个接口api的 /base/city
进行预览,编辑和删除等操作。这里新建接口,左边填入数据,设置请求地址为 city
,请求方式为 post
,填下描述。确认。
- {
- "flag": "@boolean",
- "code": "@integer(60, 100)",
- "message": "查询城市数据",
- "data": {
- "list|2-5": [{ //随机生成2-5条数据
- "id": "@id", //随机ID号
- "name": "@city(true)", //随机城市名称
- "ishot": "@boolean" //随机true,false
- }]
- }
- }
添加完成后再postman中进行接口测试,接口请求地址为 Base URL+/city
类型为 get
。请求结果下图
ElementUI对接Easy-mock
首先官网上提供了非常基础的脚手架,如果我们使用官网的脚手架需要自己写很多代码比如登陆界面、主界面菜单等内容。
解压后文件夹中下载依赖并运行,确认其能够正常运行。
- npm install
- npm run dev
- 在Easy-mock中新建接口
/gather/gather
的GET请求,填下以下内容
- {
- "code": 20000,
- "flag": true,
- "message": "查询成功",
- "data|10": [{
- "id": "@id",
- "name": "@cword(8,12)",
- "summary": "@cword(20,40)",
- "detail": "@cword(20,40)",
- "sponsor": "@string",
- "image": "@image",
- "starttime": "@date",
- "endtime": "@date",
- "address": "@county(true)",
- "enrolltime": "@date",
- "state": "@string",
- "city": "@string"
- }]
- }
- 修改config文件下的
dev.env.js
中的BASE_API为你的服务器API
- 'use strict'
- const merge = require('webpack-merge')
- const prodEnv = require('./prod.env')
-
- module.exports = merge(prodEnv, {
- NODE_ENV: '"development"',
- BASE_API: '"http://2**.***.***.**0:7300/mock/5fdc3ea***11ebb66f1f/demo"',
- MOCK: 'true',
- })
- 我们尝试修改一个表格来展示数据。找到路径
src\\views\\table\\index.vue
,然后填入如下内容
- <template>
- <div class="app-container">
- <el-table :data="list" border style="width: 100%">
- <el-table-column prop="id" label="活动ID" width="180"></el-table-column>
- <el-table-column prop="name" label="活动名称" width="180"></el-table-column>
- <el-table-column prop="sponsor" label="主办方" width="180"></el-table-column>
- <el-table-column prop="address" label="活动地址" width="180"></el-table-column>
- <el-table-column prop="starttime" label="开始日期" width="180"></el-table-column>
- <el-table-column prop="endtime" label="结束日期" width="180"></el-table-column>
- </el-table>
- </div>
- </template>
- <script>
- import gatheringApi from '@/api/gather'
- export default {
- data(){
- return {
- list:[]
- }
- },
- created(){
- this.fetchData();
- },
- methods:{
- fetchData(){
- gatheringApi.getList().then(response => {
- this.list=response.data
- });
- }
- }
- }
- </script>
- 找到路径
src\\api\\table.js
,然后填入如下内容
- import request from "@/utils/request"
- export default {
- getList(){
- return request({
- url:'/gather/gather',
- method:'get'
- })
- }
- }
- 重新运行项目,浏览器访问控制台打印的地址,找到相应的菜单就能看到结果了。我们不断刷新能够看到显示的数据是不同的,显然,这比之前的数据更加真实,能够模拟真实数据,进行数据填充。
尾言
到此文章结束。这里主要介绍了如何在腾讯云中搭建自己的EasyMock并且在Element-UI中使用它来为我们提供更为真实的数据。以上RestFul、Swagger等皆为铺垫,对接口信息有一个基本的认识和使用。
如果您喜欢这篇文章,请点赞、评论、收藏,您的支持将是我前进的动力。