Swagger API文档集中化注册管理

 

接口文档是前后端开发对接时很重要的一个组件。手动编写接口文档既费时,又存在文档不能随代码及时更新的问题,因此产生了像swagger这样的自动生成接口文档的框架。swagger文档一般是随项目代码生成与更新,访问地址也是基于项目地址,因此对项目数不多的团队还好。如果团队的项目很多,比如采用微服务架构的团队,动则几十甚至上百个服务项目,那就意味着前端开发人员需要记住几十甚至上百个swagger文档地址,那就很不友好了。目前貌似还没有较流行的API文档集中化管理项目(也或者是我没找到),因此花了点时间自己集成了一个,介绍如下。

1. swagger-bootstrap-ui项目

该项目是github上的一个开源项目(https://github.com/xiaoymin/swagger-bootstrap-ui ),对swagger ui做了增强,功能整体看起来要丰富一些。来看看效果,

该项目的调试url地址原本是基于自身服务的,我将它改为了注册服务的url地址,以支持注册服务的接口调试。调整后的源码地址: https://github.com/ronwxy/swagger-bootstrap-ui

2. swagger api注册服务

该项目集成了swagger-bootstrap-ui,并提供了swagger api注册接口,接受所有提供了有效配置的服务项目注册,让注册的服务在一个页面上可统一查看,再也不用记太多文档地址了。

启动注册服务后,访问 http://localhost:11090/doc.html 打开文档页面。如上图,可通过下拉列表来选择不同项目,加载项目的接口文档查看或调试。
项目地址: 关注本文最后二维码公众号,回复“swagger”获取源码地址 (一个不只有实战干货的技术公众号,欢迎关注。如果觉得有用,不要吝啬你的star,反正又不要钱,O(∩_∩)O)

3. 服务端配置

在业务服务端,需要提供一些配置。
首先,需要配置一些Bean,如下提供了一个配置类(这里只列出了主要部分,完整代码参考: https://github.com/ronwxy/base-spring-boot)

public class Swagger2AutoConfiguration {

    @Bean
public Docket restApi() {
ParameterBuilder builder = new ParameterBuilder();
builder.name("x-auth-token").description("授权token")
.modelRef(new ModelRef("string"))
.parameterType("header")
.required(false);
return new Docket(DocumentationType.SWAGGER_2)
.groupName(groupName)
.select()
.apis(RequestHandlerSelectors.basePackage(apisBasePackage))
.paths(PathSelectors.any())
.build()
.globalOperationParameters(Collections.singletonList(builder.build()))
.apiInfo(apiInfo());
} @Profile({"dev"})
@Bean
public CommandLineRunner swaggerRegistar(ConfigurableApplicationContext context) {
return new SwaggerInfoRegistar(context);
} /**
* use to register swagger api info url to swagger api registry;
*
* @author liubo
*/
public class SwaggerInfoRegistar implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
String url = buildLocalSwaggerDocsUrl();
registerLocalSwaggerUrl(url);
} /**
* register the v2/api-docs url
*
* @param url
*/
private void registerLocalSwaggerUrl(String url) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new FormHttpMessageConverter());
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("project", getApiTitle());
body.add("url", url);
ResponseEntity<Map> re = restTemplate.postForEntity(getSwaggerRegisterUrl(), body, Map.class);
if (HttpStatus.OK.equals(re.getStatusCode())) {
logger.info("swagger api registered success to {}", getSwaggerRegisterUrl());
} else {
logger.warn("swagger api registered failed [{}]", re.getBody().get("msg"));
}
}
} }

该类完成了swagger的基本配置,同时将swagger的/v2/api-docs地址注册到了步骤2中介绍的注册服务。

然后,因为要从注册服务端调用该业务服务的接口进行调试,存在跨域,因此服务需要做跨域支持,配置文件中添加如下定义,

@Bean
@ConditionalOnMissingBean(name = "corsFilterRegistrationBean")
public FilterRegistrationBean corsFilterRegistrationBean() {
UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource(); CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.applyPermitDefaultValues();
corsConfiguration.setAllowedMethods(Arrays.asList(CorsConfiguration.ALL));
corsConfiguration.addExposedHeader(HttpHeaders.DATE); corsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); CorsFilter corsFilter = new CorsFilter(corsConfigurationSource);
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(corsFilter);
filterRegistrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
filterRegistrationBean.addUrlPatterns("/*"); return filterRegistrationBean;
}

最后,在属性配置文件application.yml中配置一些必要的属性,

swagger:
api-title: Demo标题 #会展示在下拉列表框中,一般写项目名称
api-description: Demo描述,集中注册
group-name: Demo项目
apis-base-package: cn.jboost.springboot.swagger # API类所在包名
swagger-registry-path: http://localhost:11090/swagger/register #就是2中注册服务的注册接口地址

配置完后, 就可以像一般项目一样编写接口类,加swagger注解。项目启动时, 会自动向注册服务完成注册,刷新注册服务的文档页面即可在下拉列表看到。

4. 总结

本文介绍了一个基于swagger ui增强版项目swagger-bootstrap-ui的接口文档集中化管理实现。采用该实现,将所有swagger在线接口文档集中管理,有效提高前后端对接效率。

Swagger API文档的更多相关文章

  1. 添加swagger api文档到node服务

    swagger,一款api测试工具,详细介绍参考官网:http://swagger.io/ ,这里主要记录下怎么将swagger api应用到我们的node服务中: 1.任意新建node api项目, ...

  2. xadmin引入drf-yasg生成Swagger API文档

    一.安装drf-yasg: 由于django-rest-swagger已经废弃了 所以引入了drf-yasg pip install drf-yasg 安装install drf-yasg库 http ...

  3. swagger api 文档框架

    <其他教程:https://www.cnblogs.com/FlyAway2013/p/7510279.html> 先看看swagger的生态使用图: 其中,红颜色的是swaggger官网 ...

  4. Swagger API文档集中化注册管理

    接口文档是前后端开发对接时很重要的一个组件.手动编写接口文档既费时,又存在文档不能随代码及时更新的问题,因此产生了像swagger这样的自动生成接口文档的框架.swagger文档一般是随项目代码生成与 ...

  5. Oh my God, Swagger API文档竟然可以这样写?

    最好的总会在不经意间出现. 作为后端程序员,免不了与前端同事对接API, 一个书写良好的API设计文档可有效提高与前端对接的效率. 为避免联调时来回撕逼,今天我们聊一聊正确使用Swaager的姿势. ...

  6. swagger api文档添加jwt授权配置

    最近写的swagger文档,要加jwt授权,所以几经google终于搞定了,简简单单几行配置如下: securityDefinitions: APIKey: type: apiKey name: Au ...

  7. JavaWeb项目中集成Swagger API文档

    1.增加依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-sw ...

  8. 在ASP.NET Core Web API上使用Swagger提供API文档

    我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的API文档功能.当设置IISExpress的默认启动路由到Swagger的API文档页 ...

  9. Core Web API上使用Swagger提供API文档

    在ASP.NET Core Web API上使用Swagger提供API文档   我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的AP ...

随机推荐

  1. mongodb 高级聚合查询

    mongodb高级聚合查询   在工作中会经常遇到一些mongodb的聚合操作,特此总结下.mongo存储的可以是复杂类型,比如数组.对象等mysql不善于处理的文档型结构,并且聚合的操作也比mysq ...

  2. nowcoder 181045 / 克洛涅的多项式 构造+思维

    题意:有多项式 $F(x),G(x)$,最高次项分别为 $n,m$.$F(x)$ 最高次项系数为 $1$. $m<n$ 给定 $n$ 个不同的点值,满足 $F(x[i])=G(x[i])$ 给定 ...

  3. 爬虫(十四):scrapy下载中间件

    下载器中间件是介于Scrapy的request/response处理的钩子框架,是用于全局修改Scrapy request和response的一个轻量.底层的系统. 激活Downloader Midd ...

  4. jQuery多选和单选下拉框插件select.js

    一.插件描述 可通过参数设置多选或者单选,多选返回数组结果,单选返回字符串,如图: 下载地址:https://pan.baidu.com/s/1JjVoK89_ueVVpfSlMDJwUQ   提取码 ...

  5. Pythton3实例

    计算1-100之和 #add.py n = 0 sum = 0 for n in range(0,101): sum += n print(sum) 实现99乘法法则 #mul.py i = 1 wh ...

  6. git 代码回滚与爬坑 -- reset and revert

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/git_code_roll_back_revert_and_res ...

  7. PHP + CI框架 + AdminLITE权限管理系统

    源码地址:https://github.com/yangsphp/rbac-master

  8. kde的配置文件

    主要是home目录下:/.kde4/share/config/ 如果实在是搞不定,还可以直接将.kde4目录全部删除或者替换即可.

  9. Centos7使用python3连接inception报错解决办法

    inception支持mysqldb库但不支持pymysql库,无奈mysqldb库不兼容py3,直接使用pymysql 连接inception报错如下: ValueError: invalid li ...

  10. 2018-2019-2 网络对抗技术 20165202 Exp9 Web安全基础

    博客目录 一.实践内容 跨站脚本攻击XSS 跨站请求伪造CSRF SQL注入攻击 二.实验中遇到的问题及解决 三.基础问题回答 四.实验总结 一.实践内容 本实践的目标理解常用网络攻击技术的基本原理. ...