App 开发时经常需要构造数据测试各种逻辑,最直接的办法时直接请求一个拥有和线上环境一样数据的测试服务器,可以随时改掉用户数据的各种状态,方便测试,不过这就需要维护一个独立的测试服务器,修改数据也不是很方便。而且往往在开发时,需要修改可能只是很少的一部分,如果可以指定自己想要修改的 API 对应的返回数据,其他 API 还是正常请求线上环境,这样测试起来会方便很多。
json-server是一个可以快速构造假数据的 REST API 服务器,他的文档很全,需要注意的是,他只接受 json 格式的请求,在用 Postman 这种工具测试 POST 和 PUT 这种方法时,需要设置Content-Type
为application/json
。
只有 json-server 还不够,json-server 里面只是我们想要 mock 的数据,当收到其他请求时,我们希望可以 fallback 到线上的环境去请求数据,这时候就需要 Nginx 出场。
Nginx 的一大功能就是用来做反向代理,我们需要搭建一个 HTTP 服务器,他会先请求 json-server,如果有对应的结果,就直接返回,否则就 fallback 到线上的环境去请求数据。
配置文件:
upstream apps {
server localhost:3000;
server example.com backup;
}
server {
listen 80;
server_name local.example.com;
location / {
proxy_pass http://apps;
proxy_next_upstream error timeout http_404;
proxy_set_header Host example.com;
}
}
线上的环境需要设置成 backup,这样请求过来时总是先请求本地的 json-server,如果 json-server 返回了 404,则继续请求线上的环境。本地的 server name 需要和线上的环境在同一个 Domain 下面,这样才能共享 cookie。