使用Swagger2Markup實(shí)現(xiàn)API文檔的靜態(tài)部署(一):AsciiDoc

在閱讀本文之前,您先需要了解Swagger的使用,如果您還不知道它是用來干嘛的质帅,請(qǐng)先閱讀《Spring Boot中使用Swagger2構(gòu)建強(qiáng)大的RESTful API文檔》一文。

前言

在學(xué)會(huì)了如何使用Swagger之后,我們已經(jīng)能夠輕松地為Spring MVC的Web項(xiàng)目自動(dòng)構(gòu)建出API文檔了账磺。但是,如前文方式構(gòu)建的文檔必須通過在項(xiàng)目中整合swagger-ui痊远、或使用單獨(dú)部署的swagger-ui/v2/api-docs返回的配置信息才能展現(xiàn)出您所構(gòu)建的API文檔垮抗。本文將在使用Swagger的基礎(chǔ)上,再介紹一種生成靜態(tài)API文檔的方法碧聪,以便于構(gòu)建更輕量部署和使用的API文檔冒版。

Swagger2Markup簡(jiǎn)介

Swagger2Markup是Github上的一個(gè)開源項(xiàng)目。該項(xiàng)目主要用來將Swagger自動(dòng)生成的文檔轉(zhuǎn)換成幾種流行的格式以便于靜態(tài)部署和使用逞姿,比如:AsciiDoc辞嗡、Markdown、Confluence滞造。

項(xiàng)目主頁:https://github.com/Swagger2Markup/swagger2markup

如何使用

在使用Swagger2Markup之前续室,我們先需要準(zhǔn)備一個(gè)使用了Swagger的Web項(xiàng)目,可以是直接使用Swagger2的項(xiàng)目谒养,也可以是使用了spring-boot-starter-swagger的項(xiàng)目挺狰,比如我倉庫中的:https://github.com/dyc87112/swagger-starter-demo ,下面就來看看如何使用Swagger2Markup來創(chuàng)建AsciiDoc。

生成AsciiDoc

生成AsciiDoc的方式有兩種:

  1. 通過Java代碼來生成

第一步:編輯pom.xml增加需要使用的相關(guān)依賴和倉庫

<dependencies>
    ...

    <dependency>
        <groupId>io.github.swagger2markup</groupId>
        <artifactId>swagger2markup</artifactId>
        <version>1.3.1</version>
    </dependency>
</dependencies>

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

第二步:編寫一個(gè)單元測(cè)試用例來生成執(zhí)行生成文檔的代碼

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

    @Test
    public void generateAsciiDocs() throws Exception {
        //    輸出Ascii格式
        Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
                .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
                .build();

        Swagger2MarkupConverter.from(new URL("http://localhost:8080/v2/api-docs"))
                .withConfig(config)
                .build()
                .toFolder(Paths.get("src/docs/asciidoc/generated"));
    }

}

以上代碼內(nèi)容很簡(jiǎn)單丰泊,大致說明幾個(gè)關(guān)鍵內(nèi)容:

  • MarkupLanguage.ASCIIDOC:指定了要輸出的最終格式薯定。除了ASCIIDOC之外,還有MARKDOWN和CONFLUENCE_MARKUP
  • from(new URL("http://localhost:8080/v2/api-docs"):指定了生成靜態(tài)部署文檔的源頭配置瞳购,可以是這樣的URL形式话侄,也可以是符合Swagger規(guī)范的String類型或者從文件中讀取的流。如果是對(duì)當(dāng)前使用的Swagger項(xiàng)目学赛,我們通過使用訪問本地Swagger接口的方式年堆,如果是從外部獲取的Swagger文檔配置文件,就可以通過字符串或讀文件的方式
  • toFolder(Paths.get("src/docs/asciidoc/generated"):指定最終生成文件的具體目錄位置

在執(zhí)行了上面的測(cè)試用例之后罢屈,我們就能在當(dāng)前項(xiàng)目的src目錄下獲得如下內(nèi)容:

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

可以看到嘀韧,這種方式在運(yùn)行之后就生成出了4個(gè)不同的靜態(tài)文件。

輸出到單個(gè)文件

如果不想分割結(jié)果文件缠捌,也可以通過替換toFolder(Paths.get("src/docs/asciidoc/generated")toFile(Paths.get("src/docs/asciidoc/generated/all"))锄贷,將轉(zhuǎn)換結(jié)果輸出到一個(gè)單一的文件中,這樣可以最終生成html的也是單一的曼月。

  1. 通過Maven插件來生成

除了通過上面編寫Java代碼來生成的方式之外谊却,swagger2markup還提供了對(duì)應(yīng)的Maven插件來使用。對(duì)于上面的生成方式哑芹,完全可以通過在pom.xml中增加如下插件來完成靜態(tài)內(nèi)容的生成炎辨。

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

生成HTML

好了,完成了從Swagger文檔配置文件到AsciiDoc的源文件轉(zhuǎn)換之后聪姿,就是如何將AsciiDoc轉(zhuǎn)換成可部署的HTML內(nèi)容了碴萧。這里繼續(xù)在上面的工程基礎(chǔ)上,引入一個(gè)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>

通過上面的配置破喻,執(zhí)行該插件的asciidoctor:process-asciidoc命令之后,就能在src/docs/asciidoc/html目錄下生成最終可用的靜態(tài)部署HTML了盟榴。在完成生成之后曹质,可以直接通過瀏覽器來看查看,你就能看到類似下圖的靜態(tài)部署結(jié)果:

是不是感覺似曾相識(shí)呢擎场?是的羽德,Spring Cloud的E版之前的文檔也是這樣的!Q赴臁宅静!

本文首發(fā):http://blog.didispace.com/swagger2markup-asciidoc/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市站欺,隨后出現(xiàn)的幾起案子姨夹,更是在濱河造成了極大的恐慌究驴,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匀伏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蝴韭,警方通過查閱死者的電腦和手機(jī)够颠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榄鉴,“玉大人履磨,你說我怎么就攤上這事∏斐荆” “怎么了剃诅?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)驶忌。 經(jīng)常有香客問我矛辕,道長(zhǎng),這世上最難降的妖魔是什么付魔? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任聊品,我火速辦了婚禮,結(jié)果婚禮上几苍,老公的妹妹穿的比我還像新娘翻屈。我一直安慰自己,他們只是感情好妻坝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布伸眶。 她就那樣靜靜地躺著,像睡著了一般刽宪。 火紅的嫁衣襯著肌膚如雪厘贼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天纠屋,我揣著相機(jī)與錄音涂臣,去河邊找鬼。 笑死售担,一個(gè)胖子當(dāng)著我的面吹牛赁遗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播族铆,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼岩四,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了哥攘?” 一聲冷哼從身側(cè)響起剖煌,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤材鹦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后耕姊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桶唐,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年茉兰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尤泽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡规脸,死狀恐怖坯约,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情莫鸭,我是刑警寧澤闹丐,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站被因,受9級(jí)特大地震影響卿拴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梨与,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一巍棱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛋欣,春花似錦航徙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至尚猿,卻和暖如春窝稿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凿掂。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工伴榔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庄萎。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓踪少,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親糠涛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子援奢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)忍捡,斷路器集漾,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 需求: 為客戶端同事寫接口文檔的各位后端同學(xué),已經(jīng)在各種場(chǎng)合回憶了使用自動(dòng)化文檔工具前手寫文檔的血淚史.我的故事卻...
    _Lyux閱讀 4,699評(píng)論 0 2
  • Swagger是一個(gè)編寫API文檔的套件組合切黔,而不是一個(gè)單一的工具。具體可以在官網(wǎng)看到具篇。Swagger可以實(shí)現(xiàn)很多...
    寫B(tài)log不取名閱讀 20,045評(píng)論 0 6
  • 大旭長(zhǎng)大了纬霞,很有自己的想法,但同時(shí)驱显,他還不夠大险领,有時(shí)的想法還是那樣幼稚的可笑∶虢簦或許,我也是一樣的可笑挨下。我喜歡自由熔恢,...
    月芽啊閱讀 209評(píng)論 0 0
  • 我從一月出發(fā)叙淌。走過二月里的天涯。 折下三月的桃花愁铺。四月的風(fēng)撫摸我臉頰鹰霍。 在五月遇見他。六月的我們笑得好傻茵乱。 愛開在...
    段童閱讀 415評(píng)論 0 3