事出有因

昨天跟同事讨论我们在用的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. 1分钟搭建极简mock server

    摘自博客园:https://www.cnblogs.com/mikasama/p/9838480.html 1.无聊的背景.起源: 如今的业务系统越来越复杂庞大,各个功能直接的调用也是多如牛毛,但如果 ...

  2. python接口测试实战_Python接口测试实战5(下) - RESTful、Web Service及Mock Server

    课程目录 更多学习资料请加添加作者微信:superz-han获取 本节内容 REST及RESTful API Web Service XML解析 Mock Server REST及RESTful AP ...

  3. java mockserver搭建_搭建Mock Server

    1.为什么要搭建mock-server? 为了更好的分工合作,让前端能在不依赖后端环境的情况下进行开发,其中一种手段就是为前端开发者提供一个 web 容器,这个本地环境就是 mock-server. ...

  4. SAP UI5 应用开发教程之六十三 - 基于 OData V4 的本地 Mock Server 实现的深入介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  5. SAP UI5 应用开发教程之六十三 - 基于 OData V4 的本地 Mock Server 实现的深入介绍

    学习本步骤之前,请确保你已经复习了步骤 26 和 步骤 62 的知识: SAP UI5 应用开发教程之二十六 - OData 服务配合 Mock 服务器的使用步骤详解 SAP UI5 应用开发教程之六 ...

  6. 如何以 mock server 的方式本地启动 SAP UI5 应用,使它不连接服务器端 OData 服务

    我们在做 SAP UI5 开发时,在视图逻辑没有开发完毕时,往往不希望连接服务器端的 OData 服务进行联调,而仅仅连接本地端的测试数据. 本文介绍如果启动本地 mock server,将 SAP ...

  7. 搭建Mock Server

    搭建Mock Server 1.为什么要搭建mock-server? 为了更好的分工合作,让前端能在不依赖后端环境的情况下进行开发,其中一种手段就是为前端开发者提供一个 web 容器,这个本地环境就是 ...

  8. pythonflaskmock数据_Flask实现简单Mock Server

    Mock Server充当的角色: Mock server在实际项目中的意义就相当于数据库.将我想要的数据返回给我就行,我并不关心你怎么逻辑处理的. 一般的应用程序请求方式是GET和POST. Fla ...

  9. 基于django rest framework的mock server实践

    网上找了一下mock server的实现,发现python的基本都是基于flask来实现的,因最近在学django,就尝试用drf实现了下: A brief introduction of sui_m ...

最新文章

  1. 【Android 逆向】x86 CPU 架构体系 ( 堆内存 | 栈内存 | 函数调用 )
  2. 异步和同步区别是什么_一次相亲经历,我彻底搞懂了什么叫阻塞非阻塞,同步异步...
  3. 乐乐勇智能教育机器人有多少型号_【头条】协作机器人平台化趋势将会是柔性自动化的破局之道...
  4. kubernetes怎么读_Kubernetes之有状态应用实践-搭建MySQL集群
  5. NB-IoT(9)---云平台对接及使用
  6. 【Kafka】Kafka 使用 Twitter 的 Bijection 类库实现 avro 的序列化与反序列化
  7. win10连接mq_Win10环境下配置RocketMQ
  8. xshell简单使用
  9. SQL中的Having与Where的区别(面试常问)
  10. 润乾报表性能优化问题
  11. 为什么要分库分表?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?...
  12. Django1.9重写用户模型报错has no attribute 'USERNAME_FIELD'
  13. 思科交换机的基础操作命令有这些!
  14. mail163邮箱个人登录入口在哪里?
  15. Visual Studio 实用快捷键汇总
  16. D. New Year and the Permutation Concatenation 题解翻译+思路解释(官方为主,我为补充)+普通人能看得懂的代码(我照着思路写的哈哈哈)
  17. windows10频繁出现“您的电脑遇到问题,需要重新启动”如何解决
  18. STM32学习笔记(六 定时器及应用 4 光敏传感器实验 )
  19. ISP : 灯箱光源(笔记)
  20. linux 挂载数据盘方法

热门文章

  1. 苹果手机微信上form表单提交的问题
  2. 第四课 CSS核心知识点
  3. 查找数组里相同元素的个数
  4. 学好Linux必备知识
  5. Spread for Windows Forms高级主题(5)---数据处理
  6. 【自动化测试技术QTP基础系列六】---QTP脚本录制及回放
  7. Entity Framework技术系列之2:三种开发模式实现数据访问
  8. 如何应用Java的BigDecimal类
  9. react input[type='number']
  10. 根据ip获取用户地址-百度