用node搭建一个接口Mock工具

背景
项目开发过程当中,有一个必不可少的环节--接口联调,因为前端后端开发进度不一样,有时前端须要等待后端的接口,或者前端为了调试ui,须要在本地mock接口数据。不一样的接口,返回的数据格式是不同的,每次都去手动mock数据,不免繁琐和低效。可否搭建一个自动化的mock平台,自动从接口文档中获取全部接口的数据格式,而后mock对应的数据返给前端呢?前端

实现
基本原理是:前端发出的接口请求被代理到Mock平台,Mock平台根据接口url去调接口文档api拿到接口数据格式,根据接口数据格式生成一份模拟数据返给前端;node

原理是很是简单的,并且咱们对前端代码是无侵入式的,很是友好。但实现过程当中也遇到几个比较难处理的问题,下面详细讲解一下Mock平台的实现细节。后端

公司的接口是分模块的,每一个模块内部是接口详情。这里我抓取了公司接口文档的3个api.
/api/module/list 这个api返回全部的接口模块,会返回相似[{name: '模块名', _id: 32468437}]这样的数组
/api/list?moduleId=xx 这个api根据模块id(也就是上一个接口返回的那个模块_id),返回该模块的全部接口。这里就有一个问题了?前端是用url来请求接口的,如何根据url拿到接口详情数据呢?难道前端请求时去遍历全部的url吗?确定是不合适的,个人作法是首先遍历一遍全部的模块的接口详情,把url和id的对应关系保存一个对象序列化到一个文件中,而后node程序运行时,再把url和id映射对象读到内存中缓存,当匹配不到请求的url时,咱们从新遍历一次接口文档中接口,刷新缓存(限制每小时只能刷新一次,防止没必要要的请求)。
/api/get?id=xx 这个api根据接口id返回接口详情数据,咱们根据缓存拿到前端请求的url的id后,调用这个接口拿到接口的数据格式api

node层用koa来响应请求和返回mock数据,根据接口详情api拿到接口数据格式,而后用Mock生成模拟数据。如何使mock的数据和真实数据更像?这也是一个比较难处理的问题,目前的作法是对特定字段的数据作特殊化处理,好比字段名为mobile,其数据类型是String,但咱们知道它表明一个手机号,就返回一个手机号,某些特定字段能够这样作特殊处理。其余的字段,就根据接口类型返回符合类型的随机数据。数组

流程以下图:
图片描述缓存

待改进koa

目前对特定字段的处理是在代码里用逻辑判断,能够考虑生成一份配置文件来保存。毕竟特定业务中的特定字段也不会特别多,用配置文件来保存是可行的,也比较容易维护。ui

目前没有请请求参数作检查, 其实也能够校验请求参数的类型是否正确。url

请求透传,若是某些接口在线上已经能够调通,咱们直接调线上接口返回真实数据,对于线上接口调不通的再返回模拟数据。spa

相关文章
相关标签/搜索