美文网首页程序员
稳定的静态swagger接口服务

稳定的静态swagger接口服务

作者: Crick | 来源:发表于2018-06-30 10:31 被阅读153次

"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文件

s0
  1. 搭建swagger-ui服务
  2. nginx划分静态目录(swagger-json),并允许跨域
  3. 接口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接口定义。

s1

优化

看了一下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/

缺陷

  1. 不能根据代码动态更新,需要owner手动push接口json文件。
  2. 需要手动输入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/

效果图如下


s2

相关文章

  • 稳定的静态swagger接口服务

    "swagger接口服务是我本机,如果我下班关机回家,对方如何进行联调?" 如果你有类似的疑问,这篇文章可以帮助你...

  • 记一次自定义拦截器失效的问题排查

    背景 项目中使用swagger来自动生成接口文档,为了防止接口文档地址在外网被访问,需要对swagger的静态资源...

  • 如何在SpringBoot里使用SwaggerUI

    Swagger Swagger是一种和语言无关的规范和框架,用于定义服务接口,主要用于描述RESTful的API。...

  • 比swagger稍稍完善的接口展现工具knife4j使用

    背景 项目之前使用swagger用来做服务端的接口展现,我们知道swagger默认的页面比较粗糙,所以国人开发了一...

  • springboot集成swagger

    个人认为swagger主要作用在于前后端分离项目服务端接口信息界面化,有助于接口的联调,当然也可以用于服务端接口测...

  • [java]62、Swagger

    1、Swagger的使用 Swagger[https://swagger.io/]可以快速生成接口文档,极大地节省...

  • 接口测试(二)

    一.swagger查看接口规范 一、swagger 在线接口规范 1. 简介 swagger是一个java第三方j...

  • 整合swagger2

    swagger2详解 [toc] 为啥使用swagger2 由于接口众多,调用者不懂如何使用接口参数,并且接口逻辑...

  • [Swagger] Swagger2Markup 配置

    Swagger2Markup 配置 网上很多关于Swagger静态文档的生成大多缺少关于Swagger2Marku...

  • LouieGuo

    Ocelot网关统一查看多个微服务asp.net core项目的swagger API接口 0、前言

网友评论

    本文标题:稳定的静态swagger接口服务

    本文链接:https://www.haomeiwen.com/subject/hahtuftx.html