Smart-doc:零注解侵入的API接口文档生成插件

news/2024/11/15 17:58:33/文章来源:https://www.cnblogs.com/zhaobo1997/p/18300482

零注解侵入的API接口文档生成插件——Smart-doc

smart-doc 是一款同时支持 JAVA REST API 和 Apache Dubbo RPC 接口文档生成的工具,在业内率先提出基于JAVA泛型定义推导的理念, 完全基于接口源码来分析生成接口文档,不采用任何注解侵入到业务代码中。 你只需要按照java-doc标准编写注释, smart-doc就能帮你生成一个简易明了的MarkdownHTML5Postman Collection2.0+OpenAPI 3.0+的文档。

1 特性

  • 零注解、零学习成本、只需要写标准JAVA注释。
  • 基于源代码接口定义自动推导,强大的返回结构推导。
  • 支持Spring MVCSpring BootSpring Boot Web Flux(Controller书写方式)、Feign
  • 支持CallableFutureCompletableFuture等异步接口返回的推导。
  • 支持JavaBean上的JSR303参数校验规范,包括分组验证。
  • JSON请求参数的接口能够自动生成模拟JSON参数。
  • 对一些常用字段定义能够生成有效的模拟值。
  • 支持生成JSON返回值示例。
  • 支持从项目外部加载源代码来生成字段注释(包括标准规范发布的jar包)。
  • 支持生成多种格式文档:MarkdownHTML5WordAsciidoctorPostman CollectionOpenAPI 3.0。 开放文档数据,可自由实现接入文档管理系统。
  • 支持导出错误码和定义在代码中的各种字典码到接口文档。
  • 支持生成JMeter性能测试脚本。
  • 支持MavenGradle插件式轻松集成。
  • 支持Apache Dubbo RPC接口文档生成。
  • 支持普通Java类生成javadoc文档。
  • 支持基于Git管理项目的变更增量文档生成。
  • debug接口调试html5页面完全支持文件上传,下载(@download tag标记下载方法)测试。

2 与Swagger对比

功能特性 smart-doc swagger
代码侵入 注解侵入性严重
集成复杂度 简单,只需插件 偏复杂
插件支持 有 gradle 和 maven 插件 无插件
openapi 规范支持 支持 openapi 3.0 完全支持 openapi 的版本
CI 构建集成 可在 ci 构建阶段使用maven 或者 gradle 命令启动插件生成文档 不支持
集中化文档中心集成 已经和 torna 企业级接口文档管理平台对接 不支持
维护持续性 值得信赖,开源后用户基础多,一直持续维护 全球用户多,开源维护值得信赖
接口 debug 2.0.0 版本开始已经支持 debug,页面比 swagger 漂亮太多了。 支持

Smart-doc 从 2.0.0 后几乎实现了 swagger ui 的功能,并且比 swagger ui 更简洁大方,也更符合国内开发者的诉求。当然 smart-doc 的功能也已经超过了 swagger 为 java 开发者提供的功能。当然 smart-doc 本身是只支持扫描代码生成 openapi 3.0 的文档的,也可以将生成的 openapi 3.0 文档导入到其他 ui 中渲染展示。

设计思路不同,smart-doc 是基于 源码分析的,它生成api文档是通过分析JAVA源码主要是通过 注释 和 系统自带注解,来实现文档的 生成,而 swagger 是运行时自动生成在线文档,并且生成测试接口的案例。由于他们设计思路不一样,swagger2 使用过程需要使用它定义的 @API 相关注解,这样就污染了源码,代码入侵有点高,而smart -doc 不同,主要是通过注释来生成API文档的 。

与 Swagger 对比最大的区别在于:

  1. Smart-doc 不需要启动,直接运行插件就可以生成api文档;
  2. Smart-doc 不需要编写复杂注解来生成文档;

3 使用和实践

3.1 引入maven依赖

		<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>com.github.shalousun</groupId><artifactId>smart-doc-maven-plugin</artifactId><version>2.4.8</version><configuration><!--指定生成文档的使用的配置文件,配置文件放在自己的项目中--><configFile>./src/main/resources/smart-doc.json</configFile><!--指定项目名称,推荐使用动态参数,例如${project.description}--><!--如果smart-doc.json中和此处都未设置projectName,2.3.4开始,插件自动采用pom中的projectName作为设置--><projectName>${project.description}</projectName></configuration><executions><execution><!--如果不需要在执行编译时启动smart-doc,则将phase注释掉--><phase>compile</phase><goals><!--smart-doc提供了html、openapi、markdown等goal,可按需配置--><goal>html</goal></goals></execution></executions></plugin></plugins></build>

3.2 配置 Smart-doc 插件

结合我司实际使用情况来看,我们采用的是Smart-doc + Apifox 来生成、解析接口文档进行前后端协作开发。在resource下创建一个smart-doc.json文件,内容如下:

{"serverUrl": "http://123.xxx.xxx.165:18888","pathPrefix": "/api/v1","isStrict": false,"allInOne": true,"nameStyle": "original","outPath": "src/main/resources/templates/apidoc","coverOld": true,"createDebugPage": true,"packageFilters": "com.xxx.insurance.agency.app.controller.temp.*","md5EncryptedHtmlName": false,"style": "xt256","projectName": "xxx App-Console API","skipTransientField": true,"sortByTitle": false,"showAuthor": true,"requestFieldToUnderline": false,"responseFieldToUnderline": false,"inlineEnum": true,"recursionLimit": 7,"allInOneDocFileName": "index.html","requestExample": "true","responseExample": "true","version": "v0.0.1","responseBodyAdvice": {"className": "com.xxx.ddd.base.CommonResponse"},"requestHeaders": [{"name": "X-xxx-Webservice-Id","type": "string","desc": "请求特有的webServiceId","value": "xxx","required": true},{"name": "Authorization","type": "string","desc": "Bearer开头的登陆校验","value":"Bearer ","required": true}]
}

介绍一些重要的配置参数,其中:

  • outPath 表示api文档输出路径;

  • serverUrl 表示服务url,便于前端发起请求联调;

  • pathPrefix 表示路径前缀,注意在Controller层无需重复写requestMapping的前缀;

  • packageFilters 表示仅检测该包路径下的Controller类;

  • requestHeaders 表示自动添加的请求头;

  • responseBodyAdvice表示为我们自动增强的切面类;

    其他参数以及更多参数介绍请参考官网:https://smart-doc-group.github.io/zh/

image-20240713181743723

3.3 使用maven插件生成api文档

image-20240713181926701

也可以使用maven命令生成:

// Http Restful api文档
//生成 html
mvn -Dfile.encoding=UTF-8 smart-doc:html
//生成 markdown
mvn -Dfile.encoding=UTF-8 smart-doc:markdown
//生成 adoc
mvn -Dfile.encoding=UTF-8 smart-doc:adoc
//生成 postman json数据
mvn -Dfile.encoding=UTF-8 smart-doc:postman
// 生成 OpenApi 3.0
mvn -Dfile.encoding=UTF-8 smart-doc:openapi// Apache Dubbo RPC文档
// 生成 html
mvn -Dfile.encoding=UTF-8 smart-doc:rpc-html
// 生成 markdown
mvn -Dfile.encoding=UTF-8 smart-doc:rpc-markdown
// 生成 adoc
mvn -Dfile.encoding=UTF-8 smart-doc:rpc-adoc

生成后如下图所示:

image-20240713182318386

3.4 实践效果

如果采用postman管理api接口,可以生成postman的json格式的文档,如果使用apifox可以生成markdownopenapi导入,导入api文档后如下图所示:

image-20240713183231687

生成的html文档如下所示:

image-20240713183130060

以上。


本博客内容仅供个人学习使用,禁止用于商业用途。转载需注明出处并链接至原文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/743201.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何对Linux系统进行基准测试4工具Sysbench

Sysbench简介 Sysbench是一款多用途基准测试工具,可对CPU、内存、I/O甚至数据库性能进行测试。它是一个基本的命令行工具,提供了直接、简便的系统测试方法。github地址:https://github.com/akopytov/sysbench 。主要功能:CPU: 衡量CPU执行计算密集型任务的能力。 内存: 衡量…

containerd 容器基础环境组件的搭建

1 基础环境说明(1)本次所有部署软件版本说明软件名称 版本号操作系统内核(后续升级为 lt-5.4.278)CentOS 7.9.2009 (3.10.0-1160.el7) 1c1GB 20GBCentOS-7-x86_64-Minimal-2009.isocontainerd v1.6.6cfssl v1.6.1cni v1.1.1crictl v1.24.2nerdctl 1.7.6buildkit v0.14.1(2)系统…

【JavaScript】聊一聊js中的浅拷贝与深拷贝与手写实现

什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:前言 什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:…

分页查询及其拓展应用案例

分页查询 分页查询是处理大量数据时常用的技术,通过分页可以将数据分成多个小部分,方便用户逐页查看。SQLAlchemy 提供了简单易用的方法来实现分页查询。 本篇我们也会在最终实现这样的分页效果:1. 什么是分页查询 分页查询是将查询结果按照一定数量分成多页展示,每页显示固…

delphi dev cxgrid 列绑定Richedti 支持过滤

默认是不支持过滤的,这里需要改到内部的一些源码文件。 先说思路: 1.要让列支持过滤需要重载richedit类的 GetSupportedOperations,typeTcxRichEditProperties = class(cxRichEdit.TcxRichEditProperties)publicfunction GetSupportedOperations: TcxEditSupportedOperation…

《项目管理》-笔记1

PMBOK解读 1.1项目和项目管理 项目:项目是为创造独特的产品、服务或成果而进行的临时性工作。 项目管理:在项目的活动中运用知识、技术、工具、技巧,以满足项目要求。 1.2十大知识领域 (1)项目整合管理 项目整合管理包括为识别、定义、组合、统一和协调各项目管理过程组的各…

Cilium Ingress 特性(转载)

Cilium Ingress 特性Cilium Ingress 特性(转载) 一、环境信息主机 IPubuntu 10.0.0.234软件 版本docker 26.1.4helm v3.15.0-rc.2kind 0.18.0kubernetes 1.23.4ubuntu os Ubuntu 22.04.6 LTSkernel 5.15.0-106二、Cilium Ingress 流程图Cilium 现在提供了开箱即用的 Kuberne…

N1盒子挂载阿里云盘-Alist工具

Markdown Example.centered-text { text-align: center; font-size: 40px; font-family: "Times New Roman", Georgia, serif }N1盒子挂载阿里云盘安装Alist手动安装 参考:官方文档step 1step 2配置-启动step 3打开web网页:http://192.168.1.254:5244/ 登录界面、拉…

WindowsLinux搭建frp内网穿透(自用)

Linux服务器搭建服务端 1、下载官方frp包,软件是开源的,下载链接: https://github.com/fatedier/frp/releases 根据自己的版本需求,自行下载对应的版本号,本文章以0.37版本为例wget -c https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64…

2024-07-13:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组仅包含整数-1、0和1。 一个子数组nums[i.

2024-07-13:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组仅包含整数-1、0和1。 一个子数组nums[i..j]的大小为m+1,如果满足以下条件,则我们称该子数组与模式数组pattern匹配: 1.若pattern[k]为1,则nums[i+…

dbeaver

修改字体 参考 【DBeaver】常用自定义设置 旧版 编辑器字体查询结果字体新版 应用字体编辑器字体修改背景色 编辑器背景色注意: 此设置会同时修改查询结果背景色,但是需要重启 dbeaver格式化配置 参考 【DBeaver】常用自定义设置 格式化大小写关闭自动插入表别名关于语句分隔符…

动态规划的“三步走”方法

“三步走”方法 动态规划问题种类较多,但大多都能通过“三步走”方法解决。状态表示:将具体问题抽象为数学问题,明确需要表示的状态,数组中的下标分别表示哪种状态。 状态转移:状态转移相当于递推公式。主要有两种方式,可以从上一个状态转移到当前状态,或者从当前状态转…