为前端应用开发一个本地接口 mock 服务

无法忍受没有 mock 服务的日子

背景

本地开发时,目前通过直连测试环境和修改代码两种方式调试接口,前者十分依赖后端的数据状态和服务稳定,使得本地开发调试容易受外部影响;后者修改代码容易造成问题,如果涉及多处代码改动,还需要对这些分散的代码进行撤销改动,从而造成不必要的心智负担。因此,以上两种方式都不能良好地做到前后端分离开发。
理想情况下,前端应在开发阶段使用 api mock 服务,当流程走通之后,再切到测试环境与后端联调。

有现成的工具吗?

有的,目前公司现有 mock 平台 能支持这个需求,但是由于我们的应用使用的是 gateway 的方式调用后端方法,即所有接口都是访问同一个 api 地址,并通过区分 query 参数标识不同 dubbo 方法,因此该 mock 平台不能很好地支持这种场景,需要通过对同一 api 地址添加多种 http method 的接口,接着通过设置不同『期望』以达到根据不同 query 参数返回不同数据的效果。此外,目前项目没有编写 mock 接口配置的习惯,不可能对百来个接口进行一一配置调试,因此接入 mock 不能做到一蹴而就。

怎么办?

针对以上情况,我觉得可以通过开发一个本地接口 Mock 服务如下方式解决:

在本地启动一个 mock 服务,当本地存在对应接口的 mock json 文件时,优先使用 mock 数据,否则调用测试环境。这样既保证了项目在开发调试阶段不受外部影响,做到完全地前后端分离开发(通过切换环境决定连接 mock 接口还是测试环境接口),又能够逐步实现上百个接口的 mock。

为什么使用本地 mock 服务,而不是在线 mock 服务?

无论是前公司,还是现公司,都存在多个在线 mock 服务,有的是前端团队主导的,有的是测试团队主导的,这些服务要么仅有少数项目使用,要么几乎没人用。这些服务大多没有解决如下两个问题:

  1. 老项目如何快速接入?每个老项目涉及几十上百个接口,几乎不可能主动去接入这些平台。
  2. 接口直接如何避免相互影响?同一个工程,A 同学修改了 M 接口返回 N 以测试流程 X,而 B 同学需要修改 M 接口返回 P 用以测试流程 Y,这就造成了冲突(开发阶段应尽量避免外界的影响,开发一个功能实在不应该因为 mock 接口返回的修改或者测试环境的出错而阻塞)

而本地 mock 服务可以较好地通过缓存测试环境或线上环境的接口数据解决问题1;通过将接口数据缓存在本地解决问题2,也就是说 A 同学在本地的操作是不会影响到 B 同学的调试的。

不过,我认为本地 mock 和在线 mock 二者并不冲突,二者可以相互同步接口数据,这样既保证了在线维护接口的便利,又能隔离开发时,在线编辑接口返回值导致的相互影响。

还能怎么玩?

对于这种缓存测试数据到本地的模式,我想到一个有趣的使用方式,当与后端联调时,通过特定参数启动本地开发服务,使得当前每个接口都强制同步测试环境数据;接着将联调的页面跳转路径点击一遍,便可将此次流程涉及的接口悉数缓存;重启本地开发服务,这样同一个操作流程皆使用了刚刚缓存的接口,做到『流程回放』,从而不需要依赖后端重复造数据,非常方便 B 端这种流程多,步骤长(这往往十分依赖状态,而状态在每个步骤之后往往会改变)的联调。

作者

林宜丙

发布于

2019-07-21

更新于

2023-08-30

许可协议