基于springboot的文档管理
2017-04-14 16:54
357 查看
简介
本篇文章将阐述如何通过使用我开发Parliament,与Swagger、Keyhole Software提供的工具,搭建一套自动发布、集中管理的API文档中心。
背景介绍
Spring Boot与Sping Cloud等项目为我们搭建微服务架构提供了很大的便利。但是微服务架构的劣势之一就是增加了治理的复杂度。众所周知,微服务架构中的各个应用是独立开发、部署的。当微服务数量到达一定的数量后,集中管理API文档的难度越来越大。
为了减轻文档压力,很多Spring Boot项目集利用Swagger自动生成API描述页面。然而Swagger并没有解决API集中管控的问题,各个团队必须清楚的知道其他团队的Swagger页面地址,这势必完成了维护成本。这也是Parliament项目初衷。
解决方案
我开发了一个简单的API文档中心服务器Parliament。Parliament集成了Swagger UI,用于显示和调试API。API信息发布采用的是Keyhole Software开发的khs-spring-boot-publish-swagger-starter。需要注意的是原始的khs-spring-boot-publish-swagger-starter存在几个bug,请暂时使用
我提供的版本。
背后的逻辑是:
由Swagger2负责生成API描述,
当Spring Boot应用每次启动时,通过khs-spring-boot-publish-swagger-starter将API描述发送到Parliament服务器。
Parliament服务器存储并整理API描述,并提供UI展示给各个团队开发人员。
这样我们就拥有了一个集中的、自动化的API文档中心。
开始搭建
在部署Parliament之前,我们需要先安装MongoDB。关于如何安装、配置MongoDB不在此文章范围。安装好MongoDB后,进行如下步骤。
I.
部署Parliament
$git clone https://github.com/burnettzhong/parliament.git $cd parliament
修改application.properties,配置数据源, 请将根据实际的MongoDB信息修改:
spring.data.mongodb.host = {MongoDB address} spring.data.mongodb.database = {MongoDB database name} spring.data.mongodb.port = {MongoDB port}
构建并启动Parliament:
$mvn package && java -jar target/Parliament-1.0.0.jar
现在可以打开http://localhost:8080/index.html,当然在基本是个空白页面,因为我们还没有发布任何API信息到Parliament。
II.
让Spring Boot应用发布API信息
这里我们需要加入两个依赖库,一个是SpringFox的Swagger2,另一个是khs-spring-boot-publish-swagger-startera。注意:请不要使用来自Keyhole Software的khs-spring-boot-publish-swagger-starter,其中有两个bug。只有他们合并我们pull request,才可以直接使用。
在Keyhole Software在Maven公共库中更新之前,我们需要手动安装我的版本(1.0.2)到本地Maven库中:
git clone https://github.com/burnettzhong/khs-spring-boot-publish-swagger-starter cd khs-spring-boot-publish-swagger-starter mvn clean install
在Spring Boot应用中增加Swagger2和khs-spring-boot-publish-swagger-starter依赖
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>com.keyholesoftware</groupId> <artifactId>khs-spring-boot-publish-swagger-starter</artifactId> <version>1.0.2</version> </dependency>
在application.yml或application.properties中配置Parliament地址:
swagger: publish: publish-url: http://{Parliament server address}/swagger/publish/ swagger-url: http://127.0.0.1:${server.port}/v2/api-docs
这里有两个地址,publish-url是我们的Parliament部署地址,;swagger-url为获取API描述地址,一般来讲都是本应用地址。
最后通过注解配置Spring Boot应用:
@EnableSwagger2 @PublishSwagger public class ServiceApplication { ... }
@EnableSwagger2启用Swagger2生成API描述,@PublishSwagger让应用在启动的时候将API描述JSON发布到Parliament。
关于API描述的配置,Swagger2提供了很丰富的功能,请参考Springfox
Reference Documentation。
至此,全部安装部署结束。在启动配置好的Spring Boot应用后,再打开http://localhost:8080/index.html就可以看到我们的API信息了。
Parliament根据API的base path进行分类,点击某个base path可以查看更详细的API信息(这里采用的是Swagger UI)。
后记
如果需要,可以将Parliament作为一个微服务注册到Euraka或者Zookeeper中。因为Parliament主要是在内网使用,目前没有进行安全验证。未来会引入对应用的认证,和用户管理。
未来Parliament还将增加API使用统计的功能,完善整体API治理。
欢迎关注并贡献代码到https://github.com/burnettzhong/parliament
相关文章推荐
- 基于Spring cloud boot 的基础功能架构项目介绍文档
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- 【SpringBoot探索四】SpringBoot项目集成Swagger2管理接口文档
- 基于maven管理spring boot的批量上传
- 本文主要介绍使用SpringBoot与shiro实现基于数据库的细粒度动态权限管理系统实例。
- Spring boot 中的事务管理,并基于junit进行测试
- 提供一套基于SpringBoot-shiro-vue的权限管理思路.
- 两种基于AOP的日志管理方法(springboot)
- 基于spring-boot使用Swagger构建restful api文档
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- 基于easyui的文档管理系统springmvc+mybaits实现
- 使用Swagger在SpringBoot项目中管理API文档(使用Oauth2)
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- SpringBoot 使用@Aspect进行日志管理(基于反射代理模式)
- 基于springboot+redis+bootstrap+mysql开发一套属于自己的分布式springcloud云权限架构(十)【权限架构生产者(用户管理)】
- 基于springboot+redis+bootstrap+mysql开发一套属于自己的分布式springcloud云权限架构(十二)【权限架构生产者(菜单管理)】
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- 基于Nginx+Spring Boot+Swagger的api文档实践
- 基于SpringBoot框架的权限管理系统--sbed
- 基于SpringBoot的Guns管理系统