« 主页

自己动手搭建本地 Mock Server

版权声明:眯眼探云原创,可随意转载,请保留该版权声明及链接:https://tyun.fun/post/14.mock-api-by-ourselves/

为了提升开发效率,我们在项目中开始逐步推广 Mock API。其中一个项目已经用上了,但是另一个项目由于工期紧,服务器端的同学不同意做这件事。但是已经尝到了甜头的我们,怎可放弃?

来吧少年,我们自己动手搭建本地 Mock Server。

前面的部分是调研的过程,想了解最终解决方案的同学请直接跳最后。

Mock API 好处多多!

现在的软件开发,大部分 APP 其实主要是作为呈现的一端,而业务逻辑大都放到服务器端来处理。在这种背景下,开发的流程中,APP 开发必然对服务器端的开发状态严重依赖。

时间充足的情况下,当然可以等,但是时间充足对于大多数公司来讲都只是理想状态。那么就必须要想办法有效的把这个时间利用起来。在服务器端 API 没有开发完成的时候,如果有 Mock API,那么对于 APP 开发来说将是极大的便利。

**Mock API 不仅可以为 APP 开发赢得更多的开发时间,在实践中我们还发现,早早的用上 Mock API,APP 开发人员可以尽早的发现 API 设计中的漏洞。**早一点发现问题,就可以以更低的成本解决问题。

Mock API 太花时间?

服务器端同学拒绝我的理由是:Mock API 太花时间。

如果是要完整,真实的模拟实际的情况,那的确会是非常困难的事。但是如果我们把目标稍稍的限定一下,比如我们只要 Mock 数据足够支撑 APP 端的关键流程开发,那么我们只需要做少量的 Mock 就行了。

既然只是少量的工作,既然无法说服服务器端的同学,那么,我们 APP 研发就自己来做吧~

需要 Mock 到什么程度?

少量的 Mock,那究竟怎样才算少?根据我们实践的情况来看,能够跑通正向流程就足以帮助我们 APP 前期可以很方便的进行开发,也就是说,能够保证每个接口有一个成功状态的返回值就可以

那么,就开始选 Mock Server 了。

先选 Mock Server

现在主流的 API 返回数据都是 JSON,所以首选的是模拟 Json 返回结果的 Mock Server,很容易就选到了 JSON Server

之前有试用 JSON Server,被它的易用性所惊艳。但再试用以后发现,JSON Server 的目标是搞一个真正强大的 Mock Server,很多功能都很强大,但是用起来也相对麻烦一点,尤其是要限制 http method 的时候,需要在配置中为每个接口写 route rules,而我希望这些 route 可以直接体现在 API 描述文件中。

另一点让我不爽的是,目标数据只能指定一个文件。如果 Mock 的 API 多了以后,如此多数据放到一个文件……画面太美不敢看。网上提供了一些指定多文件的 workaround,但都不太理想。

这时候,我就找到了 Mock Server 的两个限制条件:

  1. 精确,方便的 API 描述
  2. 可以指定多个 API 描述文件

精确的描述 API

有了目标,那么就很容易找到 API Blueprint 了。它就是用来精确描述 API 的。而且作为一个广泛被接受的方案,相应的工具也是非常多。让我选起服务器来也变的更容易。

官方网站上推荐的服务器大都开源在 github 上面,先根据 stars 筛选一下,就只剩两个了:API MockDrakov 。然后根据更新时间又筛选了一下,API Mock 已经一年多没有更新了,那……就 Drakov 吧。

Drakov

这是一个专门针对 API Blueprint 的 Mock Server,简单,实用,而且可以方便的指定多个 API 描述文件,简直就是完美的解决方案。

完整的解决方案

有了 API Blueprint,有了 drakov,还有两个问题需要回答。

如何来管理这些 API 描述文档?这个答案非常简单,使用 git 就行了。

另一个问题是:这个 Mock Server 是应该跑在一台专门的服务器上还是应该跑在研发同学们自己的开发机器上?

如果是跑在自己的机器上,那么就需要每个人自己去使用这些工具,但带来的好处非常大:在需要的时候,自己可以随意的修改 Mock API 的返回数据而不会对别人造成影响。与微不足道的学习成本之间衡量了一下,就这么愉快的决定了:每个人自己 Host。

安装必备的软件

安装流程是按 mac 操作系统来做的,不过其他系统也完全没有关系,drakov 是跑在 node 上面的。

  1. 安装 node $brew install node
  2. 安装 drakov $npm install -g drakov

创建一个简单的配置文件

drakov 允许你把所有的配置到写到一个文件里面,然后运行的时候直接读取这个文件。

// 参考 https://github.com/Aconex/drakov/blob/master/lib/arguments/arguments.js
module.exports = {
    sourceFiles: './api/*.md', // 指定 API 描述文件
    watch: true, // 监视 API 描述文件的改动并自动加载
    public: true // 打开这个选项,就可以通过 IP 来访问接口
};

根据 API Blueprint 创建你的 API 描述文件,如果按我刚才的配置,那么需要将这些文件放到 ./api/ 下面。

愉快的跑起来

$drakov --config config.js ,服务器就愉快的跑起来啦。

赶紧试试,假设我描述了一个 user 接口,限定 GET 方法,那么:

$curl http://localhost:3000/user 就可以获得 API 文档中描述的返回结果了。

小结

这整套工具的好处非常多:

  1. 易用:API Blueprint 非常简单,drakov 在配好后几乎没有学习成本。轻轻松松跑起 Mock Server~
  2. 灵活:因为 Mock Server 跑在每个人自己的开发机上,每个人可以根据自己的需求随时修改返回数据。
  3. 易于合作:使用 git 来对 API 描述文件进行管理,一个人添加了一个 API,另一个人同步以后就可以使用。还可以邀请服务器端的同学们也参与进来。

当然,最终的目的,那就是加速我们的 APP 开发啦~

Enjoy!