如何优雅的使用Mock Server
事出有因
昨天跟同事讨论我们在用的rap2(一个集接口编写和mock server的开源项目)和刚上线了一个easy-mock的server,到底哪个好用。
我们主要讨论的点有个两个: 接口的一致性、 编码的无侵入性。
背景
自从前后端分离后,完成前后端的分工之后,大家就可以各司其职,并行开发。前后端的协议标准就是接口文档。前端的所有逻辑和展现全部依赖接口文档中规定的数据结构。所以接口文档就变成了开发过程的重中之重。
当然有一份文档也是不够的,前端开发页面逻辑调试、测试同学测试接口、接口文档不断的更新、接口复杂的返回情况等诸多问题,这就需要有一个Mock Server来帮忙。
更多的关于Mock内容的请大家自行Google了解不再赘述。
接口的一致性
接口文档,是整个开发过程中的约定和依据,所以同步更新文档也成为关键一环。
之前的办法
使用markdown维护一个文档,更新之后分发给大家;或者就是放到wiki来管理,每次更新到wiki上面,供大家来阅读。如果要Mock数据(easy-mock或者其他mock server),相关人员修改mock字段,更新完毕。
优雅的做法
在线编辑接口,实时保存,同步更新。例如采用Rap2(支持JSON复制,支持接口的移动复制),保存后就是接口文档,所有人实时更新,同时Mock数据自动更新。
编码的无侵入性
Mock 对代码的侵入越小,我们维护和开发的成本也越低。以
Vue-cli2.x
生成的项目为例:
在工程中的config目录dev.env.js
,配置开发环境下API数据来源地址
...
module.exports = merge(prodEnv, {NODE_ENV: '"development"',ENV_CONFIG: '"dev"',// BASE_API: '"dev server"',BASE_API: '"http://rap2.taobao.org:8080/app/mock/39"', // mock server
})复制代码
这样我们在开发过程中,用到axios
,只需要根据不同环境编写一次代码即可
const service = axios.create({baseURL: process.env.NODE_ENV === 'production' ? process.env.BASE_API : '/api',...
});
复制代码
从Mock数据切换到Dev Server的API只需要注释一行配置文件代码,无需修改项目源代码。非常友好。
这时候我们再看easy-mock 跟rap2生成的Mock Url:
http://easy-mock.com/mock/5c08e554bd9f9c3a01c5abf6/api/info
=> host/mock/projectId/:pathhttp://rap2.taobao.org:8080/app/mock/45/GET/api/info
=> host/app/mock/:repositoryId/:method/:path
复制代码
ps:后来发现rap2的url可以不带method,但是就是不能使用restful API这种根据method区分的接口了。
从生成的url来看,rap2中有:method
的变量,若是要无缝切换需要更多的工作。无法直接替换BASE_API
。如果在代码里拼接会有很大的代码侵入性。
所以考虑在工程层面进行优化:
在工程目录config
目录中index.js
中,可以设置代理来统一处理:method
变量。在proxyTable
对象中加入bypass
方法,对每个通过代理的接口,处理request url成为一个合格的rap2 mock的url。
module.exports = {dev: {...proxyTable: {'/api': {target: config.BASE_API.substring(1, config.BASE_API.length - 1),changeOrigin: true,pathRewrite: {'^/api': '/'},bypass: function (req, res, proxyOptions) {if (proxyOptions.target.indexOf('mock') !== -1) {const path = req.url.replace(proxyOptions.context, proxyOptions.context + '/' + req.method);// path => /api/GET/pathreq.url = path;}}}},
复制代码
这样就能无侵入性的使用rap2了。
结论
从接口文档的一致性和编码的无侵入性来看,rap2可能更优一点,但是rap2毕竟是一个年轻的开源项目,很多机制并不完善。从去年年初使用rap2,最近升级到新版本数据库表结构还要做映射调整,适合喜欢折腾的人。这样easy-mock的稳定性优势就值得考虑。
在我看来,未来的Mock Server不单单只是一个Mock,肯定是集 接口编写 + 自动Mock于一身的,还有一些类似接口字段校验的辅助功能。
个人还是很看好rap2的,毕竟从rap1重构的项目,有一定的使用背景,重构应该能出更好的开源项目。
再次感谢开源项目对开发者带来的便利。
Mock.js : mockjs.com/
easymock: easymock.org/
rap2 : rap2.taobao.org/
如何优雅的使用Mock Server相关推荐
- 1分钟搭建极简mock server
摘自博客园:https://www.cnblogs.com/mikasama/p/9838480.html 1.无聊的背景.起源: 如今的业务系统越来越复杂庞大,各个功能直接的调用也是多如牛毛,但如果 ...
- python接口测试实战_Python接口测试实战5(下) - RESTful、Web Service及Mock Server
课程目录 更多学习资料请加添加作者微信:superz-han获取 本节内容 REST及RESTful API Web Service XML解析 Mock Server REST及RESTful AP ...
- java mockserver搭建_搭建Mock Server
1.为什么要搭建mock-server? 为了更好的分工合作,让前端能在不依赖后端环境的情况下进行开发,其中一种手段就是为前端开发者提供一个 web 容器,这个本地环境就是 mock-server. ...
- SAP UI5 应用开发教程之六十三 - 基于 OData V4 的本地 Mock Server 实现的深入介绍试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- SAP UI5 应用开发教程之六十三 - 基于 OData V4 的本地 Mock Server 实现的深入介绍
学习本步骤之前,请确保你已经复习了步骤 26 和 步骤 62 的知识: SAP UI5 应用开发教程之二十六 - OData 服务配合 Mock 服务器的使用步骤详解 SAP UI5 应用开发教程之六 ...
- 如何以 mock server 的方式本地启动 SAP UI5 应用,使它不连接服务器端 OData 服务
我们在做 SAP UI5 开发时,在视图逻辑没有开发完毕时,往往不希望连接服务器端的 OData 服务进行联调,而仅仅连接本地端的测试数据. 本文介绍如果启动本地 mock server,将 SAP ...
- 搭建Mock Server
搭建Mock Server 1.为什么要搭建mock-server? 为了更好的分工合作,让前端能在不依赖后端环境的情况下进行开发,其中一种手段就是为前端开发者提供一个 web 容器,这个本地环境就是 ...
- pythonflaskmock数据_Flask实现简单Mock Server
Mock Server充当的角色: Mock server在实际项目中的意义就相当于数据库.将我想要的数据返回给我就行,我并不关心你怎么逻辑处理的. 一般的应用程序请求方式是GET和POST. Fla ...
- 基于django rest framework的mock server实践
网上找了一下mock server的实现,发现python的基本都是基于flask来实现的,因最近在学django,就尝试用drf实现了下: A brief introduction of sui_m ...
最新文章
- 【Android 逆向】x86 CPU 架构体系 ( 堆内存 | 栈内存 | 函数调用 )
- 异步和同步区别是什么_一次相亲经历,我彻底搞懂了什么叫阻塞非阻塞,同步异步...
- 乐乐勇智能教育机器人有多少型号_【头条】协作机器人平台化趋势将会是柔性自动化的破局之道...
- kubernetes怎么读_Kubernetes之有状态应用实践-搭建MySQL集群
- NB-IoT(9)---云平台对接及使用
- 【Kafka】Kafka 使用 Twitter 的 Bijection 类库实现 avro 的序列化与反序列化
- win10连接mq_Win10环境下配置RocketMQ
- xshell简单使用
- SQL中的Having与Where的区别(面试常问)
- 润乾报表性能优化问题
- 为什么要分库分表?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?...
- Django1.9重写用户模型报错has no attribute 'USERNAME_FIELD'
- 思科交换机的基础操作命令有这些!
- mail163邮箱个人登录入口在哪里?
- Visual Studio 实用快捷键汇总
- D. New Year and the Permutation Concatenation 题解翻译+思路解释(官方为主,我为补充)+普通人能看得懂的代码(我照着思路写的哈哈哈)
- windows10频繁出现“您的电脑遇到问题,需要重新启动”如何解决
- STM32学习笔记(六 定时器及应用 4 光敏传感器实验 )
- ISP : 灯箱光源(笔记)
- linux 挂载数据盘方法