Spring Boot 2.x基础教程:Swagger静态文档的生成

前言

经过以前的两篇关于Swagger入门以及具体使用细节的介绍以后,咱们已经可以轻松地为Spring MVC的Web项目自动构建出API文档了。若是您还不熟悉这块,能够先阅读:html

在这两篇文章中,咱们构建的文档必须经过在项目中整合swagger-ui、或使用单独部署的swagger-ui/v2/api-docs返回的配置信息才能展示出您所构建的API文档。而有些时候,咱们可能只须要提供静态文档给其余对接方的时候,咱们要如何快速轻便的产生静态API文档呢?java

接下来咱们就来学习一个解决该问题的工具:Swagger2Markupgit

Swagger2Markup简介

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

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

如何使用

在使用Swagger2Markup以前,咱们先须要准备一个使用了Swagger的Web项目,能够是直接使用Swagger2的项目,也可使用Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档一文中构建的项目。读者能够经过下面的仓库获取:spring

接下来,咱们将利用这个项目中的chapter2-2模块做为基础来来生成几种不一样格式的静态文档。api

生成 AsciiDoc 文档

生成 AsciiDoc 文档的方式有两种:浏览器

经过Java代码来生成

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

<dependencies>
    ...

    <dependency>
        <groupId>io.github.swagger2markup</groupId>
        <artifactId>swagger2markup</artifactId>
        <version>1.3.3</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<repositories>
    <repository>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <id>jcenter-releases</id>
        <name>jcenter</name>
        <url>http://jcenter.bintray.com</url>
    </repository>
</repositories>

自己这个工具主要就临时用一下,因此这里咱们把scope设置为test,这样这个依赖就不会打包到正常运行环境中去。maven

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

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class DemoApplicationTests {

    @Test
    public void generateAsciiDocs() throws Exception {

        URL remoteSwaggerFile = new URL("http://localhost:8080/v2/api-docs");
        Path outputDirectory = Paths.get("src/docs/asciidoc/generated");

        //    输出Ascii格式
        Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
                .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
                .build();


        Swagger2MarkupConverter.from(remoteSwaggerFile)
                .withConfig(config)
                .build()
                .toFolder(outputDirectory);
    }

}

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

  • MarkupLanguage.ASCIIDOC:指定了要输出的最终格式。除了ASCIIDOC以外,还有MARKDOWNCONFLUENCE_MARKUP,分别定义了其余格式,后面会具体举例。
  • from(remoteSwaggerFile:指定了生成静态部署文档的源头配置,能够是这样的URL形式,也能够是符合Swagger规范的String类型或者从文件中读取的流。若是是对当前使用的Swagger项目,咱们经过使用访问本地Swagger接口的方式,若是是从外部获取的Swagger文档配置文件,就能够经过字符串或读文件的方式
  • toFolder(outputDirectory):指定最终生成文件的具体目录位置

在执行了上面的测试用例以后,咱们就能在当前项目的src目录下得到以下内容:

src
--docs
----asciidoc
------generated
--------definitions.adoc
--------overview.adoc
--------paths.adoc
--------security.adoc

能够看到,这种方式在运行以后就生成出了4个不一样的静态文件。

输出到单个文件

若是不想分割结果文件,也能够经过替换toFolder(Paths.get("src/docs/asciidoc/generated")toFile(Paths.get("src/docs/asciidoc/generated/all")),将转换结果输出到一个单一的文件中,这样能够最终生成html的也是单一的。

经过 Maven 插件来生成

除了经过上面编写Java代码来生成的方式以外,swagger2markup还提供了对应的Maven插件来使用。对于上面的生成方式,彻底能够经过在pom.xml中增长以下插件来完成静态内容的生成。

<plugin>
    <groupId>io.github.swagger2markup</groupId>
    <artifactId>swagger2markup-maven-plugin</artifactId>
    <version>1.3.3</version>
    <configuration>
        <swaggerInput>http://localhost:8080/v2/api-docs</swaggerInput>
        <outputDir>src/docs/asciidoc/generated-by-plugin</outputDir>
        <config>
            <swagger2markup.markupLanguage>ASCIIDOC</swagger2markup.markupLanguage>
        </config>
    </configuration>
</plugin>

在使用插件生成前,须要先启动应用。而后执行插件,就能够在src/docs/asciidoc/generated-by-plugin目录下看到也生成了上面同样的adoc文件了。

生成HTML

在完成了从Swagger文档配置文件到AsciiDoc的源文件转换以后,就是如何将AsciiDoc转换成可部署的HTML内容了。这里继续在上面的工程基础上,引入一个Maven插件来完成。

<plugin>
    <groupId>org.asciidoctor</groupId>
    <artifactId>asciidoctor-maven-plugin</artifactId>
    <version>1.5.6</version>
    <configuration>
        <sourceDirectory>src/docs/asciidoc/generated</sourceDirectory>
        <outputDirectory>src/docs/asciidoc/html</outputDirectory>
        <backend>html</backend>
        <sourceHighlighter>coderay</sourceHighlighter>
        <attributes>
            <toc>left</toc>
        </attributes>
    </configuration>
</plugin>

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

是否是感受似曾相识呢?是的,Spring Cloud的E版以前的文档也是这样的!!!

Markdown 与 Confluence 的支持

要生成Markdown和Confluence的方式很是简单,与上一篇中的方法相似,只须要修改一个参数便可。

生成 Markdown 和 Confluence 文档

生成方式有一下两种:

  • 经过Java代码来生成:只须要修改withMarkupLanguage属性来指定不一样的格式以及toFolder属性为结果指定不一样的输出目录。

生成markdown的代码片断:

URL remoteSwaggerFile = new URL("http://localhost:8080/v2/api-docs");
Path outputDirectory = Paths.get("src/docs/markdown/generated");

//    输出Ascii格式
Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
    .withMarkupLanguage(MarkupLanguage.MARKDOWN)
    .build();

Swagger2MarkupConverter.from(remoteSwaggerFile)
    .withConfig(config)
    .build()
    .toFolder(outputDirectory);

生成confluence的代码片断:

URL remoteSwaggerFile = new URL("http://localhost:8080/v2/api-docs");
Path outputDirectory = Paths.get("src/docs/confluence/generated");

//    输出Ascii格式
Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
    .withMarkupLanguage(MarkupLanguage.CONFLUENCE_MARKUP)
    .build();

Swagger2MarkupConverter.from(remoteSwaggerFile)
    .withConfig(config)
    .build()
    .toFolder(outputDirectory);

在执行了上面的设置内容以后,咱们就能在当前项目的src目录下得到以下内容:

src
--docs
----confluence
------generated
--------definitions.txt
--------overview.txt
--------paths.txt
--------security.txt
----markdown
------generated
--------definitions.md
--------overview.md
--------paths.md
--------security.md

能够看到,运行以后分别在markdown和confluence目录下输出了不一样格式的转换内容。若是读者想要经过插件来生成,直接参考上一节内容,只须要修改插件配置中的swagger2markup.markupLanguage便可支持输出其余格式内容。

最后,咱们一块儿来看看生成的Markdown和Confluence文档要怎么使用

Markdown的部署

Markdown目前在文档编写中使用很是常见,因此可用的静态部署工具也很是多,好比:Hexo、Jekyll等均可以轻松地实现静态化部署,也可使用一些SaaS版本的文档工具,好比:语雀等。具体使用方法,这里按照这些工具的文档都很是详细,这里就不具体介绍了。

Confluence的部署

相信不少团队都使用Confluence做为文档管理系统,因此下面具体说说Confluence格式生成结果的使用。

第一步:在Confluence的新建页面的工具栏中选择{}Markup

img

第二步:在弹出框的Insert选项中选择Confluence Wiki,而后将生成的txt文件中的内容,黏贴在左侧的输入框中;此时,在右侧的阅览框能够看到以下图的效果了。

img

注意:因此Insert选项中也提供了Markdown格式,咱们也能够用上面生成的Markdown结果来使用,可是效果并很差,因此在Confluence中使用专门的生成结果为佳。

代码示例

本文的完整工程能够查看下面仓库中的chapter2-5目录:

若是您以为本文不错,欢迎Star支持,您的关注是我坚持的动力!

参考资料

  • [1] https://github.com/Swagger2Markup/swagger2markup
  • [2] http://blog.didispace.com/swagger2markup-asciidoc/
  • [3] http://blog.didispace.com/swagger2markup-markdown-confluence/

欢迎关注个人公众号:程序猿DD,得到独家整理的学习资源和平常干货推送。
若是您对个人专题内容感兴趣,也能够关注个人博客:didispace.com

相关文章
相关标签/搜索