在业务开发联调阶段,常遇到因为各自开发负责的模块开发进度不统一,部分接口没有开发完成,导致其他组开发联调阻塞,这时候我们可能就需要伪造一个接口返回,跳过阻塞的接口部分,保证项目组/测试的进度。
1.模拟GET返回JSON
server { listen 8082; server_name _; location = /api/register { # 设定默认类型 default_type application/json; # 返回状态码与JSON return 200 '{"code": 0,"messge":"注册成功","data":[]}'; } }
我们重新加载nginx配置后(nginx -s reload
),请求试试。
# 可以看到获取到的是我们定义的json $ curl 127.0.0.1:8082/api/register {"code": 0,"messge":"注册成功","data":[]}
有时候,我们也想把我们传递的参数打印出来
server { listen 8082; server_name _; location = /api/register { # 设定默认类型 default_type application/json; # 返回状态码与JSON return 200 '{"code": 0,"messge":"注册成功","data":[\"$args\"]}'; } }
重新加载再试试
$ curl 127.0.0.1:8082/api/register?phone=136001455xx {"code": 0,"messge":"注册成功","data":["phone=136001455xx"]}
2.模拟POST返回JSON
模拟GET请求很简单, 但我们试试POST呢?
# 正常返回了POST $ curl -vX POST 127.0.0.1:8082/api/register * About to connect() to 127.0.0.1 port 8082 (#0) * Trying 127.0.0.1... * Connected to 127.0.0.1 (127.0.0.1) port 8082 (#0) > POST /api/register HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 127.0.0.1:8082 > Accept: */* > < HTTP/1.1 200 OK < Server: nginx/1.12.2 < Date: Tue, 02 Apr 2019 02:58:26 GMT < Content-Type: application/json < Content-Length: 47 < Connection: keep-alive < * Connection #0 to host 127.0.0.1 left intact {"code": 0,"messge":"注册成功","data":[""]}
但是,也有种情况某些早期的Nginx版本会把默认POST转成GET,由此,我们需要借助proxy_pass
绕一下来获取正确的结果返回
server { listen 8082; server_name _; location = /api/register_POST { default_type application/json; return 200 '{"code": 0,"messge":"注册成功","data":[\"$args\"]}'; } location = /api/register { # 设定代理请求类型为POST proxy_method POST; # 代理到本机的/api/register_POST proxy_pass http://127.0.0.1:8082/api/register_POST; } }
没有帐号? 立即注册