如何满足一个前端对Mock的全部幻想?张无忌jsonmock

每个迭代,需求文档跟设计稿都出来了,静态页面唰唰两天就做完了。可是做前端又不是简单地把后端吐出来的数据放到页面上就完了,还有各种前端处理逻辑啊。

等到后端好不容易把接口写出来了,一对接联调,好多字段的数据又跟我Mock的数据对不上,又得重新改代码。

每个迭代都是一场折磨。

就是那种,明明知道这个地方整个团队都可以更有效率,但偏偏就是做不到的无力感。

黎明的希望

直到有一天,我遇到这个神器。我的效率提升了100%。

我可以用最省力最优雅的方式得到我需要的Mock数据,甚至不需要任何配置。而且,联调时候曾经遇到的各种令人崩溃的前后端数据对接问题,统统不!见!了!

就是这个

Apifox

我研究了整整一周,越研究越是心惊。这个工具太强大,完全超出我的预期,就如《倚天屠龙记》里张无忌修炼的乾坤大挪移,练完一层,上面还有一层,每一层都是一片全新的天地。

我曾经以为,定接口什么的你们后端定就行了,跟我前端有什么关系。定好了吐数据给我就行了。

直到我遇到这个神器,我才明白好的工作习惯能给我提升多少效率。

以下还有3000字,阅读时长5~10分钟。如果你嫌读文字太麻烦,这里也有个视频,内容是一样的。

好,接下来我要发功了。

第一层:智能Mock

Apifox是个API协作工具,用它来做Mock数据的基础也是API文档。在Apifox里维护的API可以生成好看的在线接口文档,也可以像Postman那样一键调试,像JMeter那样做测试,还可以直接Mock数据。不过今天我们只聊Mock。

首先,你需要在Apifox里面创建一个接口,定义好和。

请求参数

返回数据结构

好了,保存。完成!

等会儿?Mock呢?怎么就完成了?Mock规则在哪儿写?

真的就完成了。

Apifox会自动启动一个本地的Mock服务,我复制一下Apifox自动生成的Mock地址,用浏览器打开看下效果。

Apifox本地Mock服务

就是这么简单!就是这么方便!

什么!都不需要!配置!

在Apifox里面,这变成了最简单的事情,甚至是完全无感的。只要写API文档的时候把返回的数据结构定义好,这个事情就完成了。Apifox会根据字段名称智能生成Mock数据,不需要任何配置。

如接口返回的数据结构里某个字段名称叫username就会得到“程敏”“王宁”“安慕希”“李玛璧”。字段名称叫phone,就会得到15237829132、18907284633。字段名称叫city,就会得到杭州市、高雄市、博尔塔拉蒙古自治州。甚至如果你的字段名称叫icon,就会返回一个图片URL,打开就真的是一张png图片!

如果你们团队使用的是Swagger等其他工具管理API文档,也可以导入到Apifox(Apifox支持20多种格式数据导入,还可以设置定时自动导入),一样可以使用这个智能Mock,一样是零配置自动生成所有Mock数据。

完全不用操心任何Mock数据配置的问题,只要接口定好了,Mock数据就有了,我什么前端代码都能写。

第二层:自定义智能Mock规则

有的同学问,你这个都是预设死的吧?我怎么知道写什么参数名称你会给我Mock出什么数据来?好,这就是ApifoxMock功能的第二层:自定义智能Mock规则。

在Apifox里面内置了一整套Mock规则,当我们的返回字段名匹配上了其中的某条规则,就会根据对应规则生成随机值(Mock.js语法规则)。

Apifox内置智能Mock规则

有内置规则,当然就可以自定义新规则。

比如我们公司的订单id是以“DD”打头的十位数字,我就可以新建一个string类型的规则,匹配规则写“*orderid”,mock规则写一个正则表达式:@regexp(/DD\d{10}/)。这样,只要我任何一个接口返回字段是以“orderid”结尾,都会得到一个“DD1284918414”这样的返回值。

第三层:返回字段高级设置

有的同学说,你这个是比较通用的数据类型,可我还有很多没那么通用的类型,比如宠物店上架的宠物,有三种状态:可售、已售、待上架,要怎么Mock出来?

在Apifox里面,定义接口返回数据结构的时候每个字段都有一个“高级设置”的概念。比如我宠物的上架状态还可以定义为枚举,枚举可选值为(“available”,“sold”,“pending”)。如果接口这样定义了,那么Mock就会自动从这三个字符串里取值。

返回字段高级设置

这个字段高级设置里不止有枚举,还可以设置长度范围、正则规则等。如果字段类型是数字,还可以设置最大值最小值等。

如果你对JSONSchema比较熟的话,也可以直接写Schema,那可定义空间就更大了。

而且我们要注意:这个时候我们设的其实不是Mock规则,而是接口返回值的数据结构定义,这个是会对接口调试的自动校验功能生效的,如果后端接口返回的数据不符合这里的设置,Apifox会返回一个“数据结构校验失败”,就告诉后端你接口返回数据结构不对。

而我们的Mock数据也是根据这里的设置自动生成,不需要任何额外配置。

怼后端专用图

爽不爽,可以直接甩一张截图去怼后端了。

第四层:接口级自定义Mock

有的同学说,那我还有一种场景,比如我这个用户名字段,数据定义里其实是允许他输入任意字符串的,可是我Mock是需要一个真实姓名的,不能靠字段定义啊。

而且,你刚才演示的都是中国人名,我的客户都是欧美人怎么办。

啊,终于要针对特定接口设置一点点规则了。

可选的Mock规则

在Apifox里,给接口定义数据结构的时候是可以给每个字段设置Mock规则的,而且直接就可以选一系列的常用Mock规则,常见的各种数据类型其实都齐全了。比如我需要一个外文人名,我就可以在这里写@name,运行一下就会得到“LarrySmith”“SusanLee”这样的英文名。

如果前面说的智能Mock满足不了你,在这里设置规则就可以覆盖掉内置规则。这里支持Mock.js和正则表达式,只要你能想到的规则,全都Mock得出来。

Mock规则参考

而且Apifox支持数据模型(Schema)定义,不同的接口可以复用相同的数据模型,模型里定义的规则在所有引用它的接口里都会生效,不需要任何额外的配置。

一次Mock,终身享受。

第五层:高级Mock

还有那么一些同学,他们说,希望能让我自己定义:根据不同的参数值,返回不同的数据。比如我请求的参数宠物ID为1就返回一个在售的宠物数据,如果宠物ID为2就返回一个已售的宠物数据。我前端可以把几种状态的页面都做出来。好吧,Apifoxmock的第五层就是为你准备的。在Apifox的“接口管理”有一个“高级Mock”标签页。在这里我们可以添加“期望”。

Apifox高级Mock

一个期望就是指当你的请求包含某个参数值的时候,就返回特定的数据。比如我设定我的1号宠物是在售的,2号宠物是已售出的,3号宠物是记录不存在的,DDD号宠物是“ID格式不正确”的。我把这些返回值都设好。之后,我发送的请求参数是1的时候,就返回一个在售的宠物信息;2返回一个已售的;3返回一个“404notfound”,4返回一个“InvalidParam”。啊,简直能模拟出来一个后端服务器了!

我就是那个ID格式不正确的宠物第六层:高级Mock模板语法

你觉得这个Mock功能已经非常强大了是吧。我最开头提了张无忌,你知道张无忌的乾坤大挪移总共有几层吗?

我们进入高级Mock写期望的时候,鼠标放在这个支持“Mock.js语法”上会浮出来一段示例。

高级Mock的语法示例

这个示例是讲什么的呢?我们可以在Apifox里面实际运行一下试试。

以上示例的返回结果

它生成了一个JSON格式的数组!

总共有20组id和名字,比如你在前端要生成一个填满数据的二维表格,一次就能Mock一整套!只需要短短几行代码!

我们回来看这个语法示例,正常的JSON里面插入了大括号百分号包裹的两段“for”代码,它就是JS模板语法(Nunjucks语法),可以使用它来生成复杂的数据结构!

不但支持for循环!还支持if分支!还支持正则表达式!还支持调用函数!

你说!是不是有我(加上Apifox)就够了!还要后端做什么!

第七层:高级Mock自定义脚本

还有???

这是最新的Apifox2.1.7才有的强大功能。

新版本的高级Mock增加了一个“脚本”的Tab,这个高级Mock自定义脚本是做什么用的呢?

高级Mock自定义脚本

我们来考虑一个实际的案例。我有一个“查询宠物列表”的GET接口,它的请求参数是page和pageSize,取值是6和10,含义就是我要查宠物列表的第6页,每页限定10条记录。这是个很常见的翻页场景。

我想要的

返回数据首先是一个数组,每一条是我查出来的这一页的一个宠物。下面还有一个page和total,也就是当前页码和总计多少条记录。请求一下,返回的Mock数据就是一系列的宠物信息。

到下面的page字段,出现问题了:我请求的明明请求的是第6页的数据,你给我返回page是第10页算什么意思。

我得到的

再翻翻页,新的问题又出现了:刚才还是总共25页呢,我一翻页就变成总共40页了???而且第10页的下一页是22页?

翻到下一页

我希望Mock出来的数据是什么样的呢?应该是我请求的是第几页,返回来的数据就是第几页;然后总页数应该是固定的,不会因为我翻前翻后就变。

这时候我们就需要高级Mock的自定义脚本了。

在自定义脚本界面的右侧有一段示例代码,我们仔细读一下。

通过获取系统自动生成的JSON数据,赋值给变量responseJson。fox.mockResponse.json()通过获取实际请求参数page,赋值给变量responseJson里的page字段。fox.mockRequest.getParam('page')把responseJson的total字段重写为120。通过把修改后的变量responseJson设置到的mockResponse里面,这样就修改了系统返回的JSON数据。fox.mockResponse.setBody(responseJson)

这样,我请求的是第几页,返回的就也是对应的第几页,然后总页数是保持12不变(120除以每页10个)。

这个自定义脚本就可以做很多事情了,比如我需要根据用户的性别是男是女Mock出返回的不同头像;或者先Mock出出生日期,然后用出生日期拼装成对应的身份证号等等,可以让我们Mock出来的数据彼此吻合。

自定义脚本可以操作的对象就是这个fox.mockRequest和fox.mockResponse,可以获取请求参数、Header、Cookie,修改响应Body、HTTP状态码等,甚至响应的延时都可以自定义。

你就说牛不牛吧!

赶紧去下载吧

ApifoxMock功能的七层天梯,打完收功。

如果你是个前端,并且读到了这里,我觉得你应该鼓一下掌。

Apifox的Mock功能完全值得你点一下阅读原文然后去下载。其他的API和Mock工具你全都可以扔掉了。

记得要下载Apifox桌面版使用,WEB版目前还不支持Mock功能。

THE END
1.家养宠物素材家养宠物图片元素可爱的宠物 PNG 宠物海报宠物医院宠物之家宠物店海报 PSDJPG 小狗与小猫 PNG 动物诊所宠物广告宠物狗宠物诊所 PSDJPG 宠物医疗领养宠物宠物洗澡宠物交易 PSDJPG 爱心领养宠物海报宠物店海报宠物护理 PSDJPG 宠物店宠物展板宠物狗宠物护理 PSDJPG 动物医院宠物广告宠物交易宠物猫 ...https://www.51yuansu.com/tupian/5041789.html
2.宠物店牌匾图片宠物店牌匾素材宠物店牌匾模板免费下载六图网为您提供3075张宠物店牌匾设计作品免费下载服务,您还可以找到宠物店牌匾图片、宠物店牌匾素材、宠物店牌匾模板等设计素材,我们为您提供宠物店牌匾图片下载,宠物店牌匾模板下载、宠物店牌匾素材下载等服务!https://m.16pic.com/sucai/4819534.html?from=singlemessage
3.宠物店起什么名字比较高级感这批吉名可以参照宠物店在起名字的时期,想寻觅一个有财气的美名,比较不易,梦想你能从以下这些中文汉字里会找到灵感,奥(寓意学问)、圣(寓意建树)、长(寓意珍贵)、久(寓意吉祥)、石(寓意坚强),看看本文,学下下实用的宠物店名字怎么起。 一、宠物店店铺起名推荐: 1、奥圣,寓意万事如意。 https://www.yangkatie.com/qiming/37445.html
4.[宠物美容海报]图片免费下载宠物美容海报素材取消 全部 线上营销 广告设计 免抠元素 高清图片 电商淘宝 PPT模板 视频模板 背景 插画 3D素材 艺术字 字库 音乐音效 数字艺术 网页UI 装饰装修 Word模板 Excel模板 简历模板 元素世界 默认 最新上传 下载最多 收藏最多 宠物美容海报宠物店美容清理萌宠猫狗护理宣传单海报 大气简约美容院海报美容套餐半永久项目 ...https://m.58pic.com/tupian/chongwumeironghaibao.html
5.PPT模板大全幻灯片模板免费下载大学生创新创业路演ppt模板 大气简约创业计划书PPT模板 pptx39页 作品集:PPT3422款 淡年华_7 1年前 大气简约创业计划书PPT模板 宠物店创业计划书 ppt18页 作品集:PPT987款 山海_655 10个月前 宠物店创业计划书 作品集 高级极简艺术简约图文排版求职面试介绍作品集画册ppt模板素材(3) ...https://www.aigei.com/item/57_369.html
6.黑色高档vip卡图片黑色高档vip卡设计素材黑色vip会员卡片立即下载 创意会员卡设计立即下载 精品黑色健身名片设计立即下载 黑色高级会员卡ktv贵宾卡立即下载 黑色高档贵宾会员卡立即下载 红色大气金属会员卡模板立即下载 宠物店会员卡设计立即下载 黑金卡高档会所贵宾卡立即下载 黑色时尚线条高端VIP会员卡设计模板立即下载 简约会员卡设计立即下载 高档企业会员卡立即...https://so.redocn.com/vip/badac9abb8dfb5b5766970bfa8.htm
1.宠物15s广告视频宠物15s广告高清原创视频下载广告片 宣传片 竖屏广告 AIGC 纪录片 剧情短片 摄影 视觉探索 三维CG 二维动画 学习分享 短视频 剪辑...霸王茶姬·宠物月TVC(DIR) 广告片-餐饮食品 广告片-TVC广告 李欣LX 等 12 位创作人 李欣LX导演 ...广告片-TVC广告 广告片-产品广告 Apple出品人 Ae模板 时长:00:15 15s地产时尚图文AE模板 来自 新片场...https://www.xinpianchang.com/search/1427395
2.宠物店宣传海报素材宠物店宣传海报图片觅知网为您找到348个原创宠物店宣传海报设计图片,包括宠物店宣传海报图片,宠物店宣传海报素材,宠物店宣传海报,宠物店宣传海报背景,宠物店宣传海报模板源文件下载服务,包含PSD、PNG、JPG、AI、CDR等格式素材,更多关于宠物店宣传海报素材、图片、海报、背景、插画、配https://www.51miz.com/so-sucai/1190941.html
3.AI创作图猫狗一家亲宠物店营销狗猫一家亲狗狗猫猫小宠物伙伴宠物小...相关搜索 猫狗一家亲 宠物店营销 狗猫一家亲 狗狗猫猫小宠物伙伴 宠物小猫小狗 宠物生活管家 宠物食品配图素材 宠物主视 创意猫咪咯狗 宠物之家背景墙 宠物banner 宠物猫咪爱犬 宠物写真作品 相关图片 更多> 他的图片 商用正版 更多> 关于昵图 昵图简介 网站声明 网站公约 汇图网 版权声明 联系我们 常见问题 ...https://www.nipic.com/show/48881650.html
4.宠物用品微店首页装修专题模板宠物用品微店首页装修图片素材下载您是不是想找: 微店 微店首页装修 微店 店招 淘宝手机端首页装修 淘宝首页店铺装修PSD 微店支付模板 淘宝天猫零食小吃首页装修模板模板 淘宝电器家电首页装修模板psd 首页装修 淘宝家用电器首页装修模板设计模板 店微 水果店装修 微店首页装修模板 婚纱店装修 服装店装修 微信店招 没搜到满意的结果?去提交需求 我图...https://so.ooopic.com/sousuo/21691952/
5.有关计划书学生模板集合九篇A、 建立企业网站,宣传企业形象,并在相应的平台投放广告,包括网络、平面煤体、广播、电视合作等。 B、 在需求集中的地方进行直销式推广,包括直销式推广、宣传单、举办活动、相关机构合作等。 C、 与医院、物业、外国的商会、妇联、家政协会、写字楼等各种机构组织取得联系,由其协助推广。 https://www.ruiwen.com/gongwen/jihuashu/708489.html
6.Jinxv1.0.4–宠物店和兽医WooCommerce主题Jinx是我们为动物和宠物店Food WooCommerce设计的一个真正令人惊叹的电子商务主题。除了与WooCommerce完全兼容...达到这种更高水平的设计是因为您可以在免费页面构建器上选择各种小部件、效果和模板。...高级版式选项 惊人的速度 简洁的设计 创意博客 实力店 视差效果 快速可靠的支持 可视化编辑器 ...https://www.yundic.com/jinx-v1-4-chong-wu-dian-he-shou-yi-woocommerce-zhu-ti/
7.我和大神有个约会本次活动由高碑店市人民政府主办,高碑店市商务局承办,旨在深入贯彻落实中央、省、保定市关于消费品以旧换新决策部署,集中宣传以旧换新政策,广泛发动企业让利消费者,进一步激发消费潜力,助力经济发展。 本报讯 过度包装一度是水产经营者为抬高利润惯用的手法,最近又在市场出现。近期,市市场监管部门陆续接到消费者投诉,...http://www.cqynny.com/birske7188995.htm
8.C++游戏编程入门指南(五)startc++怎么用在本章中,我们将看到SFMLViews的真正价值。我们将添加大量的 SFMLText对象,并像在**Timber!!!**项目中一样操纵它们。新的是,我们将使用第二个视图实例来绘制 HUD。这样,HUD 将始终整齐地定位在主游戏动作的顶部,而不管背景、玩家、僵尸和其他游戏对象在做什么。 https://blog.csdn.net/wizardforcel/article/details/140287053
9.用上这个Mock神器,让你的开发爽上天!51CTO博客有的同学说,你这个是比较通用的数据类型,可我还有很多没那么通用的类型,比如宠物店上架的宠物,有三种状态:可售、已售、待上架,要怎么 Mock 出来? 在Apifox 里面,定义接口返回数据结构的时候每个字段都有一个“高级设置”的概念。比如我宠物的上架状态还可以定义为枚举,枚举可选值为(“available”,“sold”,“pend...https://blog.51cto.com/u_15477422/5279718