一、为何要使用mock系统
在我们平时的开发中,有时候我们写完页面了,后端接口没写完咋办,总不能干等着吧,很多人都会借助mock数据来完善页面的交互,到时候接口一准备好,直接连上真实数据,然后很快就完成联调了。有的时候后端服务挂了,可能项目系统没法查看,这时候只能摸鱼吗,如果你之前写了mock数据,那这时候你的mock数据不是派上用场了?还有的时候,你想要不同的数据来调页面,写不同的交互,这时候你就屁颠屁颠的跑去跟后端说,帮忙造点数据,然后跟后端巴拉巴拉一大堆,后端向你抛了一个鄙夷的眼神。如果自己写mock数据的话,那不就自由了很多吗?那到底怎么写mock数据呢?首先得跟后端约定好返回的数据结构,省得后面还要改数据协议。约定好数据协议后,那把mock数据放在哪里呢?写json文件放在项目里?那这样你不仅没法在浏览器控制台看接口请求,还要在项目里写一堆json文件,用后端数据的时候估计还要改较多代码,那自己在本地用nodejs起个服务呗,用nodejs写接口路径并返回json数据,这样就可以看浏览器请求了,但是还是要在项目里写一堆json文件,这些json文件你要不要把它加到版本控制里面呢?这是个问题。这些mock方式都不够优雅,我觉得最优雅的方式就是用mock平台来维护我们的mock数据,但是第三方的mock平台都收费吧,所以我们不如自己用nodejs写一个mock系统。
二、关于mock系统的一点思考
一个完整的mock系统包括前后端,前端有用来对mock接口和mock数据进行增删改查的界面,自然而然也有后端和数据库了。我们的项目里会用到很多接口,那我们在增加一个mock接口的时候都要去改后端代码吗,改完代码还得重启后端项目吧,这样不是费时费力吗?如果你对restful api有所了解的话,那我们是不是可以把我们的接口路径当成参数呢?这样你新建一个接口路径和mock数据,不用改后端代码,也不用重启mock服务器,完美。
三、技术选型
这里推荐用阿里开源的一个nodejs框架,midway。它可以说是一个框架的框架,类似umi。midway支持选用egg.js,koa.js或者express.js作为后端框架。midway可以说是借鉴了Java web 开源后端框架spring的模式,支持依赖注入和控制反转等。有了typescript装饰器的支持,也可以像spring那样使用注解了。而且midway本身支持restful api,开发起来省时省力。
四、实现
关于具体实现就不具体讲了,这里大概讲了一下思路而已,然后再看一下我的表设计,设计得比较粗糙,level表示接口的层级,比如我们定义mock接口路径为/mock,如果只有一个查询参数,那么后端接口代码就写成/mock/:level1,前端只要把查询参数放到接口路径就好了,例如/mock/test1,即查询数据库表level1=test1的这条数据,然后再返回这条数据的res_data字段,res_data字段存储的就是json数据,最后我贴一下自己写的代码仓库地址以及界面截图,供读者参考,如果觉得有用麻烦点个star哦。