目前是通过 swagger + knife4j 的方式集成到微服务项目中,后端同学在开发或修改接口后,需要手动同步维护至公司内部的wiki中供前端和测试同学们查阅。
目前来说,这种现有方式存在如下的几个问题:
后端同学角度:
前端同学角度:
测试同学角度:
公司角度:
https://swagger.io/
swagger 是一个 api 文档维护组织,后来成为了 Open API 标准的主要定义者,现在最新的版本为17年发布的 Swagger3(Open Api3)。
同时Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务,并于2015年重命名为OpenApi。
Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。
https://doc.xiaominfo.com/knife4j/
knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名knife4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍!
knife4j的前身是swagger-bootstrap-ui
,为了契合微服务的架构发展,由于原来swagger-bootstrap-ui
采用的是后端Java代码+前端Ui混合打包的方式,在微服务架构下显的很臃肿,因此项目正式更名为knife4j
https://www.apifox.cn
文档:https://apifox.com/help/
Apifox 是集 API 文档、API 调试、API Mock、API 自动化测试多项实用功能为一体的 API 管理平台,定位为 Postman + Swagger + Mock + JMeter
。旨在通过一套系统、一份数据,解决多个工具之间的数据同步问题。只需在 Apifox 中定义 API 文档;API 调试、API 数据 Mock、API 自动化测试等功能就可以直接使用,无需再次定义。API 文档和 API 开发调试流程在同一个工具内闭环,API 调试完成后即可确保与 API 文档定义完全一致。高效、及时、准确!
smart-doc官方网址:https://smart-doc-group.github.io/#/zh-cn/
Torna官方网址:https://www.torna.cn/
Torna整合smart-doc教程 https://torna.cn/dev/smart-doc.html
smart-doc是一款同时支持JAVA REST API和Apache Dubbo RPC接口文档生成的工具,smart-doc在业内率先提出基于JAVA泛型定义推导的理念, 完全基于接口源码来分析生成接口文档,不采用任何注解侵入到业务代码中。你只需要按照java-doc标准编写注释, smart-doc就能帮你生成一个简易明了的Markdown、HTML5、Postman Collection2.0+、OpenAPI 3.0+的文档。
Torna是由smart-doc官方独家推动联合研发的企业级文档管理系统,因此smart-doc官方不会对接其它任何的外部文档管理系统,例如像showdoc、yapi 之类的对接请自定内部处理。
smart-doc是一个文档推导工具,可以根据原生的javadoc及自定义的一些javedoc生成多种格式的接口文档。而Torna是一个文档管理平台,官方提供了很好的聚合方案,例如:使用smart-doc的插件方式(下面会说到)。
Yapi: http://yapi.mglicai.com/
Yapi文档: http://hellosean1025.github.io/yapi
EasyYapi:https://easyyapi.com/
YApi是由去哪儿网移动架构组(简称YMFE,一群由FE、iOS和Android工程师共同组成的最具想象力、创造力和影响力的大前端团队)开发的可视化接口管理工具,是一个可本地部署的、打通前后端及QA的接口管理平台。
YApi旨在为开发、产品和测试人员提供更优雅的接口管理服务,可以帮助开发者轻松创建、发布和维护不同项目,不同平台的API。有了YApi,我们可以很方便的测试、管理和维护多个项目的API接口,不像Swagger那样是随应用生和灭的(且线上环境下大多数须关闭),YApi是一个独立的服务平台。
EasyYapi是一款Idea插件,帮你导出API到YApi、postman、markdown。
Yapi参考安装:https://mp.weixin.qq.com/s?__biz=MzA4ODIyMzEwMg==&mid=2447536869&idx=1&sn=5cf1a994e428312054ff5e015f0a57dd&chksm=843baef4b34c27e2be91e4216f44710f3e40c6b2ac2ea82c27e2eac509ae8330d09dfcf2577e&scene=21#wechat_redirect
EasyYapi的使用参考文档:https://mp.weixin.qq.com/s?__biz=MzA4ODIyMzEwMg==&mid=2447536892&idx=1&sn=b49f4f39ae39c83744f27df29e41a107&chksm=843baeedb34c27fb712b1b21bdd37891ca82249838b87f7aaf042ad9835dcb98ddd21f44c731&cur_album_id=2329480871705296897&scene=189#wechat_redirect
本地化部署
本地化部署
免费是Saas版,私有版需要付费
功能丰富,包括文档管理、接口调试、Mock、接口自动化测试等 商业软件,更新和维护比较稳定。 有桌面版和web版,桌面版功能比较全 免费版可用,基本无限制 方便集成Swagger和Springdoc
免费是Saas版,需要进行定期的账号管理,防止泄露。同时接口的安全风险可能需要进一步考虑
支持App、网页访问、支持网页分享 支持导出静态文档(但是目前不支持直接导出word)。
国产开源项目,私有化本地部署。支持windows,linux,docker,k8s多种方式。
支持本地化部署,支持Docker部署
功能丰富,包括文档管理、接口调试、Mock。 方便集成Swagger和Springdoc。
Yapi有较为细致的权限管理。
Yapi目前已经不怎么维护更新了,社区活跃度较低
支持App、网页访问、支持网页分享 支持导出静态文档(但是目前不支持直接导出word)。
基于以上的对比,加上目前公司的开发方式,最后选型 smart-doc + Torna实现文档全流程自动化。
原因如下:
前往 发行版页面 ,下载最新版本,解压zip
导入数据库,执行mysql.sql
打开application.properties
配置文件,修改数据库连接配置
执行sh startup.sh
启动(Windows执行startup.bat
)
访问:http://ip:7700
无特殊说明,只需要覆盖torna.jar文件
和dist文件夹
,然后重启即可
创建配置文件,执行命令:
mkdir /etc/torna && wget https://gitee.com/durcframework/torna/raw/master/install/application.properties -O /etc/torna/application.properties
vim /etc/torna/application.properties
修改数据库连接配置
拉取最新版本并启动,以1.21.0为例
wget https://gitee.com/durcframework/torna/raw/master/install/restart-torna.sh && sh restart-torna.sh 1.21.0
后续更新版本只需执行sh restart-torna.sh 版本号
导入数据库,执行mysql.sql
下载公共镜像
docker pull tanghc2020/torna:1.21.0
创建配置文件,执行命令:
mkdir /etc/torna && wget https://gitee.com/durcframework/torna/raw/master/install/application.properties -O /etc/torna/application.properties
vim /etc/torna/application.properties
修改数据库连接配置
执行docker命令:
docker run --name torna --restart=always \
-p 7700:7700 \
-e JAVA_OPTS="-server -Xms512m -Xmx512m" \
-v /etc/torna/application.properties:/torna/config/application.properties \
-d tanghc2020/torna:1.21.0
浏览器访问http://ip:7700
,ip对应docker宿主机器ip,非docker容器ip
运维脚本
【docker-compose方式部署torna】
【kubernetes部署torna】
<plugin>
<groupId>com.github.shalousungroupId>
<artifactId>smart-doc-maven-pluginartifactId>
<version>2.4.9version>
<configuration>
<configFile>${basedir}/src/main/resources/smart-doc.jsonconfigFile>
configuration>
<executions>
<execution>
<phase>packagephase>
execution>
executions>
plugin>
{
"outPath": "target/doc",
"projectName": "torna-test",
"packageFilters": "com.tmzh.apidoc.torna.web.controller.*",
"openUrl": "http://localhost:7700/api",
"appToken": "7af425085ee94d7d8b74d4074e51af32",
"debugEnvName":"本地环境",
"debugEnvUrl":"http://127.0.0.1:8080",
"tornaDebug": true,
"replace": true
}
参数说明:
,
隔开这里是快速配置,完整版的配置参考:https://smart-doc-group.github.io/#/zh-cn/diy/config
参考:https://smart-doc-group.github.io/#/zh-cn/start/javadoc
smart-doc支持的原生javadoc:
tag名称 | 使用描述 |
---|---|
@param |
对于在Spring Boot 接口层,对于简单类型的参数必须在使用@param 时写上注释描述,对于Entity 类型smart-doc 则不会检查 |
@deprecated |
可以在注释中用于标记接口已经废弃,作用同@Deprecated 注解 |
@apiNote |
@apiNote 是JAVA 新增的文档tag ,smart-doc 使用@apiNote 的注释作为方法的详细描述,因此可以使用@apiNote 来写一段长注释。如果一个方法不写 @apiNote 注释说明,smart-doc 直接使用方法默认注释填充 |
@author |
smart-doc 会提取代码中@author 标注到文档中,@author 可以写在方法上也可以写到类上。例如:@author sunyu on 2016/12/6. |
smart-doc自定义Tag:
tag名称 | 描述 |
---|---|
@ignore |
@ignore 如果@ignore 加到方法上,则接口方法不会输出到文档。从1.8.4 开始@ignore 支持添加到Controller 上进行忽略不想生成文档的接口类。@ignore 也可以用于方法上忽略某个请求参数。 |
@required |
如果你没有使用JSR303 参数验证规范实现的方式来标注字段,就可以使用@required 去标注请求参数对象的字段,标注smart-doc 在输出参数列表时会设置为true 。【不建议使用,以后会删除】 |
@mock |
从smart-doc 1.8.0 开始,@mock tag 用于在对象基本类型字段设置自定义文档展示值。设置值后smart-doc 不再帮你生成随机值。方便可以通过smart-doc 直接输出交付文档。 |
@dubbo |
从smart-doc 1.8.7 开始,@dubbo tag 用于在Dubbo 的API 接口类上添加让smart-doc 可以扫描到Dubbo RPC 的接口生成文档。 |
@restApi |
从smart-doc 1.8.8 开始,@restApi tag 用于支持smart-doc 去扫描Spring Cloud Feign 的定义接口生成文档。 |
@order |
从smart-doc 1.9.4 开始,@order tag 用于设置Controller 接口或者API 入口的自定义排序序号,@order 1 就表示设置序号为1 。 |
@ignoreResponseBodyAdvice |
从smart-doc 1.9.8 开始,@ignoreResponseBodyAdvice tag 用于忽略ResponseBodyAdvice 设置的包装类。 |
@download |
从smart-doc 2.0.1 开始,@download tag 用于标注在Controller 的文件下载方法上,生成debug 页面时可实现文件下载测试。并且支持下载文件带请求头参数测试。 |
@page |
从smart-doc 2.0.2 开始,@page tag 用于标注在Controller 的方法上表示该方法用来渲染返回一个静态页面,生成debug 页面时如果发起测试,测试页面会自动在浏览器开启新标签显示页面。 |
@ignoreParams |
从smart-doc 2.1.0 开始,@ignoreParams tag 用于标注在Controller 方法上忽略掉不想显示在文档中的参数,例如:@ignoreParams id name ,多个参数名用空格隔开 |
@response |
从smart-doc 2.2.0 开始,@response tag 标注在Controller 方法上可以允许用这自己定义返回的json example 。建议只在返回基础类型时使用,如:Result 类型这种泛型是简单原生类型的响应。 |
@tag |
@since 2.2.5 , @tag 用于将Controller 方法分类, 可以将不同Contoller 下的方法指定到多个分类下, 同时也可以直接指定Controller 为一个分类或多个分类,【不要使用,不支持,直接用分组配置代替】 |
mvn -Dfile.encoding=UTF-8 smart-doc:torna-rest -pl :torna-test -am
## 其中-pl :torna-test -am表示推送哪个子模块
对于maven多模块项目,推荐使用命令行的形式,推送某个具体的服务至torna。可以参考:
maven多模块中使用插件 示例如下:
建议使用统一的分支进行文档推送
后面文档稳定了,建议关闭smart-doc.json中的replace,防止文档误操作变更。