# 用 KOA 做 API Mock

- Link: https://www.ixiqin.com/2021/01/29/do-the-api-mock-with-koa/
- Published: 2021-01-29T00:42:59+08:00
- Author: 白宦成

在测试一些服务的时候，会需要用到一些第三方 API， 但如果你在测试的时候需要调用这个
API 的同时，又不太关注这个 API 具体的返回值的时候（比如你要测一个功能，但这个功能
依赖了一个第三方服务，这个服务的返回值并不是你所关注的）。你需要一个比较好用的 Mock
方案，来解决这个问题。

写一个 Mock 服务并不是很复杂，想要写好的话，又不是一个很简单的事情。因此，各种语言
提供的一些轻框架就是一个不错的选择。比如说我比较常用的是 KOA。

Koa 是 Node.js 下的一个轻量级框架，你可以通过简单的几行代码，构建一个简单的 HTTP
服务。

比如说我测试的服务依赖了两个第三方服务，这个时候我就可以借助于 Koa 提供的基础能力，
快速编写出两个 API，从而在本地构建一个高性能的 Mock 服务。

比如说，这是我的一个 Mock 服务的代码案例。

其中我只使用了一个中间件，在中间件中使用 startsWith 来匹配请求路径，从而接管该路径
下的所有请求，实现针对同一个 API 的所有请求返回一个特定的结果。

    ```javascript
    const Koa = require('koa');
    const app = new Koa();
    // response
    app.use(async ctx => {
        ctx.body = "ok"
        if(ctx.url.startsWith("/api/xxx/")){
            ctx.body = 'need return2';
        }
        if(ctx.url.startsWith("/v2/xxx/")){
            ctx.body = 'need return 1'
        }
    });
    app.listen(3000);
    Code language: JavaScript (javascript)
    ```

如果你希望这个方案进一步优化，则可以考虑在返回结果时，给出一组数据，使用 Random 
来在每一次返回时给出一个随机值，确保返回的数据不是唯一的。
