首页 技术 正文
技术 2022年11月12日
0 收藏 439 点赞 2,183 浏览 4799 个字

https://cloud.tencent.com/developer/article/1332445

使用Swagger2Markup实现导出API文档

飞狗发表于专注于主流技术和业务订阅

2.4K

在这篇文章中:

    • REST API文档工具Swagger2,以及与SpringBoot的集成

      Swagger2Markup简介

      Swagger2Markup是Github上的一个开源项目。该项目主要用来将Swagger自动生成的文档转换成几种流行的格式以便于静态部署和使用,比如:AsciiDoc、Markdown、Confluence。

      项目主页:https://github.com/Swagger2Markup/swagger2markup

      如何使用

      在使用Swagger2Markup之前,我们先需要准备一个使用了Swagger的Web项目,REST API文档工具Swagger2,以及与SpringBoot的集成

      生成AsciiDoc

      生成AsciiDoc的方式有两种:

      1. 通过Java代码来生成

      第一步:编辑pom.xml增加需要使用的相关依赖和仓库

      <dependency>
      <groupId>io.github.swagger2markup</groupId>
      <artifactId>swagger2markup</artifactId>
      <version>1.3.3</version>
      </dependency>
      <repositories>
      <repository>
      <snapshots>
      <enabled>true</enabled>
      <updatePolicy>always</updatePolicy>
      </snapshots>
      <id>jcenter-releases</id>
      <name>jcenter</name>
      <url>http://jcenter.bintray.com</url>
      </repository>
      </repositories>

      第二步:编写一个单元测试用例来生成执行生成文档的代码

      /**
      * 生成AsciiDocs格式文档
      * @throws Exception
      */
      @Test
      public void generateAsciiDocs() throws Exception {
      // 输出Ascii格式
      Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
      .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
      .withOutputLanguage(Language.ZH)
      .withPathsGroupedBy(GroupBy.TAGS)
      .withGeneratedExamples()
      .withoutInlineSchema()
      .build(); Swagger2MarkupConverter.from(new URL("http://127.0.0.1:8082/v2/api-docs"))
      .withConfig(config)
      .build()
      .toFolder(Paths.get("./docs/asciidoc/generated"));
      } /**
      * 生成Markdown格式文档
      * @throws Exception
      */
      @Test
      public void generateMarkdownDocs() throws Exception {
      // 输出Markdown格式
      Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
      .withMarkupLanguage(MarkupLanguage.MARKDOWN)
      .withOutputLanguage(Language.ZH)
      .withPathsGroupedBy(GroupBy.TAGS)
      .withGeneratedExamples()
      .withoutInlineSchema()
      .build(); Swagger2MarkupConverter.from(new URL("http://localhost:8082/v2/api-docs"))
      .withConfig(config)
      .build()
      .toFolder(Paths.get("./docs/markdown/generated"));
      }
      /**
      * 生成Confluence格式文档
      * @throws Exception
      */
      @Test
      public void generateConfluenceDocs() throws Exception {
      // 输出Confluence使用的格式
      Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
      .withMarkupLanguage(MarkupLanguage.CONFLUENCE_MARKUP)
      .withOutputLanguage(Language.ZH)
      .withPathsGroupedBy(GroupBy.TAGS)
      .withGeneratedExamples()
      .withoutInlineSchema()
      .build(); Swagger2MarkupConverter.from(new URL("http://localhost:8082/v2/api-docs"))
      .withConfig(config)
      .build()
      .toFolder(Paths.get("./docs/confluence/generated"));
      } /**
      * 生成AsciiDocs格式文档,并汇总成一个文件
      * @throws Exception
      */
      @Test
      public void generateAsciiDocsToFile() throws Exception {
      // 输出Ascii到单文件
      Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
      .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
      .withOutputLanguage(Language.ZH)
      .withPathsGroupedBy(GroupBy.TAGS)
      .withGeneratedExamples()
      .withoutInlineSchema()
      .build(); Swagger2MarkupConverter.from(new URL("http://localhost:8082/v2/api-docs"))
      .withConfig(config)
      .build()
      .toFile(Paths.get("./docs/asciidoc/generated/all"));
      } /**
      * 生成Markdown格式文档,并汇总成一个文件
      * @throws Exception
      */
      @Test
      public void generateMarkdownDocsToFile() throws Exception {
      // 输出Markdown到单文件
      Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
      .withMarkupLanguage(MarkupLanguage.MARKDOWN)
      .withOutputLanguage(Language.ZH)
      .withPathsGroupedBy(GroupBy.TAGS)
      .withGeneratedExamples()
      .withoutInlineSchema()
      .build(); Swagger2MarkupConverter.from(new URL("http://localhost:8082/v2/api-docs"))
      .withConfig(config)
      .build()
      .toFile(Paths.get("./docs/markdown/generated/all"));
      }

      以上代码内容很简单,大致说明几个关键内容:

      • MarkupLanguage.ASCIIDOC:指定了要输出的最终格式。除了ASCIIDOC之外,还有MARKDOWN和CONFLUENCE_MARKUP
      • from(new URL("http://localhost:8080/v2/api-docs"):指定了生成静态部署文档的源头配置,可以是这样的URL形式,也可以是符合Swagger规范的String类型或者从文件中读取的流。如果是对当前使用的Swagger项目,我们通过使用访问本地Swagger接口的方式,如果是从外部获取的Swagger文档配置文件,就可以通过字符串或读文件的方式
      • toFolder(Paths.get("src/docs/asciidoc/generated"):指定最终生成文件的具体目录位置 输出到单个文件

      如果不想分割结果文件,也可以通过替换toFolder(Paths.get("src/docs/asciidoc/generated")toFile(Paths.get("src/docs/asciidoc/generated/all")),将转换结果输出到一个单一的文件中,这样可以最终生成html的也是单一的。 在执行了上面的测试用例之后,我们就能在当前项目的目录下获得如下内容:

      swagger 生成 api  文档 html

      image.png

      可以看到,这种方式在运行之后就生成出了5个不同的静态文件。

      1. 通过Maven插件来生成

      除了通过上面编写Java代码来生成的方式之外,swagger2markup还提供了对应的Maven插件来使用。对于上面的生成方式,完全可以通过在pom.xml中增加如下插件来完成静态内容的生成。

      <plugin>
      <groupId>org.asciidoctor</groupId>
      <artifactId>asciidoctor-maven-plugin</artifactId>
      <version>1.5.6</version>
      <configuration>
      <sourceDirectory>./docs/asciidoc/generated</sourceDirectory>
      <outputDirectory>./docs/asciidoc/html</outputDirectory>
      <headerFooter>true</headerFooter>
      <doctype>book</doctype>
      <backend>html</backend>
      <sourceHighlighter>coderay</sourceHighlighter>
      <attributes>
      <!--菜单栏在左边-->
      <toc>left</toc>
      <!--多标题排列-->
      <toclevels>3</toclevels>
      <!--自动打数字序号-->
      <sectnums>true</sectnums>
      </attributes>
      </configuration>
      </plugin>

      swagger 生成 api  文档 html

      配置执行命令

      通过上面的配置,执行该插件的asciidoctor:process-asciidoc命令之后,就能在docs/asciidoc/html目录下生成最终可用的静态部署HTML了。在完成生成之后,可以直接通过浏览器来看查看,你就能看到类似下图的静态部署结果:

      swagger 生成 api  文档 html

      image.png

      腾讯云+社区邀请

      我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1eyx9f4wbftcp

      本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

      发表于 2018-09-10

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,498
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,911
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,745
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,502
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,141
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,304