"swagger 接口服务是我本机,如果我下班关机回家,对方如何进行联调?"
如果你有类似的疑问,这篇文章可以帮助你。
项目源码地址: github
背景
出于稳定性考虑,在提测前不允许发布到测试环境,开发阶段如何保障 swagger 接口的稳定性?
方案
- 搭建 swagger-ui 服务
- nginx 划分静态目录(swagger-json),并允许跨域
- 接口 owner 将 swagger json 文件上传至 nginx 静态目录(swagger-json)
在安装了 docker 的机器,通过 run.sh
可以执行镜像 build 及容器运行。
实现
docker 搭建 swagger-ui 服务
Dockerfile
from swaggerapi/swagger-ui
docker 搭建 swagger-json 服务
就是一个 nginx 服务,提供了 http 访问 json 的能力。
Dockerfile
FROM nginx
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
COPY ./static/*.json /usr/share/nginx/html/
nginx.conf
中配置跨域操作 Access-Control-Allow-Origin *
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
static 目录下是接口 json 文件
发布接口
通过 http://localhost:8080/v2/api-docs 获取 json 文件,命名后 push 到 git 项目 api 目录下
访问 swagger
浏览器访问 swagger-ui 服务,并在窗口输入 json 文件访问路径 https://localhost:8080/demo_api_2.json ,然后就可以看到 swagger 接口定义。
优化
看了一下 swagger-ui 的镜像实现,内部也是一个 nginx,运行 js。所以没必要自己搞一套 nginx,直接把 json 文件 copy 到 swagger-ui 即可。
更新后到 swagger 服务 Dockerfile 如下
from swaggerapi/swagger-ui
ENV API_URL=http://localhost:8080/demo_api_1.json
#ENV API_URLS="[{url: 'http://localhost:8080/demo_api_1.json', name : '接口一'}, {url: 'http://localhost:8080/demo_api_2.json', name : '接口二'}]"
COPY ./api/*.json /usr/share/nginx/html/
缺陷
- 不能根据代码动态更新,需要 owner 手动 push 接口 json 文件。
- 需要手动输入 json 访问 url。
关于缺陷 2 可以考虑使用 API_URLS
环境变量实现,但是设置后,不能自定义输入 jsonUrl
from swaggerapi/swagger-ui
ENV API_URLS="[{url: 'http://localhost:8080/demo_api_1.json', name : '接口一'}, {url: 'http://localhost:8080/demo_api_2.json', name : '接口二'}]"
COPY ./api/*.json /usr/share/nginx/html/
效果图如下
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于