团队同步开发时,通常不能保证后台接口在开发初期可用。 所以,就需要前端自己模拟 API 的返回应答。
记录一下我是如何用 Nginx 来模拟 JSON 接口的
例如,我前端要发送一个请求 POST /api/new-stock
需要后台返回 JSON
{
'err_code': 0,
'msg': 'OK'
}
只需要将这个 JSON 结果写入 new-stock 文件,然后置于目录 /home/zhongwei/work/someproject/api/ 下。 这是对应的 Nginx 配置文件
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /home/zhongwei/work/someproject/js/src;
index index.html index.htm;
server_name localhost;
location /api/ {
# 强制 Nginx 返回 HTTP 头 Content-Type 为 application/json
default_type application/json;
# 所有模拟应答的 json 文件都置于该目录下,不要加文件名后缀
alias /home/zhongwei/work/someproject/api/;
}
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# To allow POST on static pages
# 默认是不支持 POST 的, 会返回 405 错误。
error_page 405 =200 $uri;
}
Backbone 处理应答的逻辑
例如下面 Backbone 代码
this.model.save(null, {
success: function(model, response) {
appView.router.navigate("someplace", {trigger: true, replace: false});
},
error: function(model, response) {
that.showErrMsg('提交失败!');
}
});
代码逻辑总是走的 error,即使应答是 200。
原因是,返回的不是合法的 JSON 格式,只要是不能被解析的 JSON 的格式,均被判定为 error。
我这里就犯了在 JSON 文件中写单引号的错误,参考 jQuery parseJSON 文档,json 串中只能使用双引号。
如何模拟一个 API 的多种不同返回呢
例如,同一个接口返回不同的 error code 呢?
目前采用了一个非常笨的做法,就是建立两个应答 JSON 文件
- 一个是正常返回,文件名缀上 _ok
- 一个是错误返回,文件名缀上 _error
每次 cp 一个到对应的返回上
模拟慢接口和响应超时
使用 Nginx 的 echo_sleep
NginxHTTPEcho 的安装方法
$ ./configure --prefix=/opt/nginx \
--add-module=/path/to/echo-nginx-module
模拟 502
location /api/ {
default_type application/json;
return 502;
}
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式