"swagger接口服务是我本机,如果我下班关机回家,对方如何进行联调?"
如果你有类似的疑问,这篇文章可以帮助你。
项目源码地址: github
背景
出于稳定性考虑,在提测前不允许发布到测试环境,开发阶段如何保障swagger接口的稳定性?
方案
actor java_producer_coder
actor java_consumer_coder
actor js_consumer_coder
cloud {
control nginx
node "swagger-ui" AS swagger #green
node "swagger-json" AS json
}
java_consumer_coder --> swagger
js_consumer_coder --> swagger
swagger -right-> nginx
nginx -down-> json
java_producer_coder -up-> json: push 接口json文件
- 搭建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/
效果图如下