如何优雅的使用Mock Server

news2024/11/24 14:50:43

事出有因

昨天跟同事讨论我们在用的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/:path
 
http://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/path
            req.url = path;
          }
        }
      }
    },

这样就能无侵入性的使用rap2了。

结论

从接口文档的一致性和编码的无侵入性来看,rap2可能更优一点,但是rap2毕竟是一个年轻的开源项目,很多机制并不完善。从去年年初使用rap2,最近升级到新版本数据库表结构还要做映射调整,适合喜欢折腾的人。这样easy-mock的稳定性优势就值得考虑。

在我看来,未来的Mock Server不单单只是一个Mock,肯定是集 接口编写 + 自动Mock于一身的,还有一些类似接口字段校验的辅助功能。

个人还是很看好rap2的,毕竟从rap1重构的项目,有一定的使用背景,重构应该能出更好的开源项目。

再次感谢开源项目对开发者带来的便利。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末领取】


     【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图+全套资料】


一、Python编程入门到精通


二、接口自动化项目实战 

三、Web自动化项目实战


四、App自动化项目实战 

五、一线大厂简历


六、测试开发DevOps体系 

七、常用自动化测试工具


八、JMeter性能测试 

九、软件测试全套资料

十、总结(文末尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/882216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Netty:用ByteBufUtil的函数将字节数组、或者ByteBuf的内容转换为十六进制表示的字符串

用ByteBufUtil的hexDump(byte[] array)函数将字节数组的内容转换为十六进制表示的字符串 package com.thb;import io.netty.buffer.ByteBufUtil;public class Demo {public static void main(String[] args) {byte[] b new byte[] {0x68, 0x16, 0x03, 0x04, (byte)0xae};Stri…

6 个简单步骤,教你创建可视化看板工作流

看板是一种相当流行的工作管理工具,团队和组织使用它来可视化工作流程,限制当前正在进行的工作,并最大限度地提高流程效率。 看板的一些主要特点包括: ✓ 看板提供了对工作流程进行可视化控制的手段; ✓ 看板 "…

迭代器(Iterator)与 ListIterator 的使用

目录 一. Iterator 接口 例子: 二. ListIterator 接口 三. Iterable 接口 例子: 四. List 接口 五. Iterable接口 与 Iterator 接口 在 ArrayList 中 的使用 六. List 接口 与 ListIterator 接口 在 ArrayList 中 的使用 一. Iterator 接口 Ite…

网址生成二维码要怎么实现?1分钟教程来啦!

将网址链接转换成一个二维码,方法很简单。 今年六月份,海澜之家在父亲节的活动中,就使用了一个网址链接二维码。扫描地铁站内的海报上的二维码,就能跳转到一篇海澜之家的微信公众号文章里,查看100个父亲的故事。 其实…

网络电视盒子哪个好?回购率最高电视盒排行榜揭晓!

在挑选电视盒子的时候,我们不能光看配置,也要看系统优化、广告植入等方面,不知道网络电视盒子哪个好,可以借鉴目前业内最新发布的电视盒子回购率排行榜,看看目前用户口碑最好的是哪些机型。 ●泰捷WEBOX 60Pro电视盒子…

PyTorch从零开始实现ResNet

文章目录 代码实现参考 代码实现 本文实现 ResNet原论文 Deep Residual Learning for Image Recognition 中的50层,101层和152层残差连接。 代码中使用基础残差块这个概念,这里的基础残差块指的是上图中红色矩形圈出的内容:从上到下分别使用…

利用rollup打包 第三方库 @sentry/browser 为 umd 格式

背景 最近 老项目 多入口打包 引入sentry监控 ,由于不想 在各个入口 都去加sentry 相关逻辑,最后 在 统一的模版文件 html 中 通过 script 标签 引入sentry ,并 初始化操作。 要想保证 script 标签 引入 sentry文件能使用。 需要 保证sentry…

学习ts(一)数据类型(基础类型和任意类型)

运行 起步安装 npm install typescript -g 运行tsc index.ts生成对应的js文件,然后使用node index.js执行js文件 为了方便运行还可以安装插件,ts-node index.ts运行即可 npm i ts-node -g npm init -y npm i types/node -D基本数据类型 // 1.字符…

让光存在,探索光耦继电器的魔力

光耦合器继电器是电路中的无名英雄,正在改变我们实现电气安全和控制的方式。这些卓越的设备(也称为光电耦合器继电器)由于其在电气隔离电路上传输信号和功率的独特能力而在各个行业中广受欢迎。今天,我们深入探讨光耦合器继电器背…

大厂面试篇--2023软件测试八股文最全文档,有它直接大杀四方

前言 已经到了金九银十的黄金招聘季节了,还在准备面试跳槽涨薪的小伙伴们可以看看本篇文章哟,这里呢笔者就不多说废话了直接上干货!答案已整理好,文末拿去即可!非常好用! 一、字节跳动测试面经篇 1、在搜…

【管理运筹学】第 5 章 | 整数规划 (1,问题提出与分支定界法)

文章目录 引言一、整数规划问题的提出1.1 整数规划的数学模型1.2 整数规划问题的求解 二、分支定界法2.1 分支与定界2.2 基本求解步骤(一)初始化(二)分支与分支树(三)定界与剪枝(四)…

正中优配:2023新股上市涨跌幅规则?新股上市涨跌幅限制为几天?

A股与美股不同,股票存在涨跌幅限制,那么,2023新股上市涨跌幅规矩?新股上市涨跌幅限制为几天?下面正中优配为我们预备了相关内容,以供参阅。 2023年新股上市涨跌幅存在以下规矩: 1、主板初次公开…

mock.js引发的报错Corrupted zip: missing xxx bytes

背景: 之前项目没引入mock.js,出于产品要宣传售卖该项目,后端那套服务需要真实场景,和产品经理商量下前端出个假数据的页面,所以复制几个页面mock数据用于产品宣传 首先了解下mock.js Mock 是一种用于模拟数据和行为的…

【QT】 QFileQFileInfo文件操作

很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享QT对文件的操作技术,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享,一起进步! 你的点…

恢复已被删除,但是能然有进程调用的文件

当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。有时可以通过lsof来恢复这些文件。 当进程打开了某个文…

【枚举边+MST+组合计数】CF1857G

Problem - 1857G - Codeforces 题意: 思路: 首先观察一下样例: 可以发现对于每一对点,贡献是 s - 这对点对应的环的最大边 1 那么这样就有了 n^2 的做法 然后,根据惯用套路,枚举树上的点对问题可以转…

深入解析美颜SDK:算法、效果与实现

在当今数字化社会中,图像处理和美化技术已经成为了许多应用领域的重要组成部分,尤其在视频直播领域,美颜技术更是无处不在。直播美颜SDK作为一种集成的软件工具包,为开发者和应用提供了强大的美颜功能。 一、算法原理 磨皮算法…

理解RDMA SGL

1. 前言 在使用RDMA操作之前,我们需要了解一些RDMA API中的一些需要的值。其中在ibv_send_wr我们需要一个sg_list的数组,sg_list是用来存放ibv_sge元素,那么什么是SGL以及什么是sge呢?对于一个使用RDMA进行开发的程序员来说&…

Python教程(9)——Python变量类型列表list的用法介绍

列表操作 创建列表访问列表更改列表元素增加列表元素修改列表元素删除列表元素 删除列表 在Python中,列表(list)是一种有序、可变的数据结构,用于存储多个元素。列表可以包含不同类型的元素,包括整数、浮点数、字符串等…

服务器如何防止cc攻击

对于搭载网站运行的服务器来说,cc攻击应该并不陌生,特别是cc攻击的攻击门槛非常低,有个代理IP工具,有个cc攻击软件就可以轻易对任何网站发起攻击,那么服务器如何防止cc攻击?请看下面的介绍。 服务器如何防止cc攻击&a…