当前位置: 首页 > 后端技术 > Java

告别丑陋的SwaggerUI,这款开源API文档生成神器界面更酷炫!

时间:2023-04-02 01:46:51 Java

Swagger一般在使用SpringBoot开发前后端分离项目时使用。Swagger是一个用于生成、描述、调试和可视化RESTfulWebAPI服务框架的规范和完整框架。但是随着系统功能的不断增加,接口数量的爆发式增长,使用Swagger的体验会越来越差。比如请求参数为JSON时,没办法格式化,返回的结果无法折叠。不提供搜索功能。正好最近Knife4j弥补了这些不足,赋予了Swagger更强的生命力,所以就来给大家安利一波。一、关于Knife4jKnife4j的前身是swagger-bootstrap-ui,它是springfox-swagger-ui的增强UI实现。swagger-bootstrap-ui采用前端UI混合后端Java代码的封装方式,在微服务场景下非常臃肿。改进后的Knife4j更小、更轻、功能更强大。springfox-swagger-ui的界面是这样的。说实话,确实有点难看。增强的swagger-bootstrap-ui看起来像这样。单纯从直观体验的角度来看,确实是得到了提升。改进后的Knife4j不仅在界面上更加优雅炫酷,在功能上也更加强大:后端Java代码和前端UI模块分离,在微服务场景下更加灵活;它还提供了一个专注于Swagger的增强解决方案。官方文档:https://doc.xiaominfo.com/knife4j/documentation/码云地址:https://gitee.com/xiaoym/knife4j示例地址:https://gitee.com/xiaoym/swag...2一、整合Swagger为了比较Knife4j和Swagger,我们先来整合体验一下Swagger。第一步在pom.xml中加入springfox官方的Swagger依赖:io.springfoxspringfox-boot-starter3.0.0第二步添加Swagger的Java配置。你只需要配置基本的API信息和需要扫描的类路径即可。@ConfigurationpublicclassSwaggerConfig{@BeanpublicDocketdocket(){Docketdocket=newDocket(DocumentationType.OAS_30).apiInfo(apiInfo()).enable(true).select()//apis:添加swagger接口提取scope.apis(RequestHandlerSelectors.basePackage("com.codingmore.controller")).paths(PathSelectors.any()).build();返回摘要;}privateApiInfoapiInfo(){returnnewApiInfoBuilder().title("编程猫学习网站管理员管理API").description("codingmore").contact(newContact("沉默王二&石磊","https://tobebetterjavaer.com","983436076@qq.com")).version("1.0").build();}}第二步访问API文档,访问地址如下:http://localhost:9002/swagger...在项目路径ui后添加swagger-即可。在Controller类中可以看到Swagger常用注解@Api和@ApiOperation:@Controller@Api(tags="Article")@RequestMapping("/posts")publicclassPostsController{@RequestMapping(value="/delete",method=RequestMethod.GET)@ResponseBody@ApiOperation("Delete")publicResultObjectdelete(longpostsId){returnResultObject.success(postsService.removePostsById(postsId)?"删除成功":"删除失败");@Api注释用于类,它将Controller类标记为Swagger资源(API)。默认情况下,Swagger只会扫描和解析带有@Api注解的类。@ApiOperation注解用在方法上,在指定的方法上描述方法。Swagger还有很多其他的注解,比如@ApiParam、@ApiResponses等,这里不再赘述。3、集成Knife4jKnife4j完全沿用了Swagger的用法,可以无缝切换。第一步是在pom.xml文件中添加Knife4j依赖(不需要引入springfox-boot-starter)。com.github.xiaoyminknife4j-spring-boot-starter3.0.2第二步,在Java配置类中添加@EnableOpenApi注解,开启增强的Knife4j功能。@Configuration@EnableOpenApipublicclassSwaggerConfig{}第三步,重新运行SpringBoot工程,访问API文档,查看效果。访问地址:http://localhost:9002/doc.html如果项目中添加了权限认证,记得给Knife4j添加白名单。我的项目使用了SpringSecurity,所以需要在application.yml文件中添加。secure:ignored:urls:#安全路径白名单-/doc.html-/swagger-ui/**-/swagger/**-/swagger-resources/**-/**/v3/api-docs4.特性Knife4j的1)支持登录认证和Swagger一样,Knife4j也支持header登录认证。单击“授权”菜单并添加登录信息以保留登录身份验证令牌。如果API需要登录认证,之前填写的信息会被带过来。2)支持JSON折叠Swagger不支持JSON折叠。当返回的信息很多时,界面会显得很臃肿。Knife4j不同,可以折叠返回的JSON节点。3)离线文档Knife4j支持将API文档导出为离线文档(支持markdown格式、HTML格式、Word格式)。用Typora打开后的样子如下,非常大方漂亮。4)全局参数当一些请求需要全局参数时,这个功能非常实用。Knife4j支持标头和查询方法。后面做请求的时候,这个全局参数会带过来。5)搜索API接口Swagger没有搜索功能。当需要测试的接口很多,需要找某个API的时候,你会傻眼,只能一个一个的拖动滚动条去寻找。在文档的右上角,Knife4j提供了文档搜索功能,输入要查询的关键字,就可以进行搜索和筛选,是不是很方便?目前支持搜索接口的地址、名称和描述。5.结束除了我上面提到的增强功能,Knife4j还提供了很多实用的功能。大家可以通过官网的介绍一一试用,制作效率会提高不少。https://doc.xiaominfo.com/kni...如果你之前在项目中使用过Swagger生成接口文档,那么切换到Knife4j可以说是非常顺利,只需要两步:将springfox-放入pom.xml文件Boot-starter替换为knife4j-spring-boot-starter;访问地址由原来的http://${host}:${port}/swagger-ui.html切换为http://${host}:${port}/doc.html,如果有权限限制,记得开启白名单。本文已收录在GitHub上1.4k+star的开源专栏《Java 程序员进阶之路》。本专栏幽默风趣,通俗易懂,对Java爱好者极其友好舒适。内容包括但不限于Java基础、Java集合框架、JavaIO、Java并发编程、Java虚拟机、Java企业开发(Git、SSM、SpringBoot)等核心知识点。https://github.com/itwanger/toBeBetterJavaerstar这个存储库意味着你有潜力成为一名优秀的Java工程师。也可以点击下方链接跳转到《Java 程序员进阶之路》官网,开启愉快的学习之旅。https://tobebetterjavaer.com/没有什么能阻止我——除了目的,即使岸边有玫瑰、绿荫和宁静的港湾,我也不受束缚。