详解如何用spring Restdocs创建API文档
这篇文章将带你了解如何用spring官方推荐的restdoc去生成api文档。本文创建一个简单的springboot工程,将http接口通过api文档暴露出来。只需要通过 junit单元测试和spring的mockmvc就可以生成文档。
准备工作
- 你需要15min
- jdk 1.8
- maven 3.0+
- idea
创建工程
引入依赖,其pom文件:
<dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency> <dependency> <groupid>org.springframework.restdocs</groupid> <artifactid>spring-restdocs-mockmvc</artifactid> <scope>test</scope> </dependency> </dependencies>
通过@springbootapplication,开启springboot
@springbootapplication public class application { public static void main(string[] args) { springapplication.run(application.class, args); } }
在springboot通常创建一个controller:
@restcontroller public class homecontroller { @getmapping("/") public map<string, object> greeting() { return collections.singletonmap("message", "hello world"); } }
启动工程,访问localhost:8080,浏览器显示:
{“message”:”hello world”}
证明接口已经写好了,但是如何通过restdoc生存api文档呢
restdoc,通过单元测试生成api文档
restdocs是通过单元测试生存snippets文件,然后snippets根据插件生成htm文档的。
建一个单元测试类:
@runwith(springrunner.class) @webmvctest(homecontroller.class) @autoconfigurerestdocs(outputdir = "target/snippets") public class weblayertest { @autowired private mockmvc mockmvc; @test public void shouldreturndefaultmessage() throws exception { this.mockmvc.perform(get("/")).anddo(print()).andexpect(status().isok()) .andexpect(content().string(containsstring("hello world"))) .anddo(document("home")); } }
其中,@ autoconfigurerestdocs注解开启了生成snippets文件,并指定了存放位置。
启动单元测试,测试通过,你会发现在target文件下生成了一个snippets文件夹,其目录结构如下:
└── target └── snippets └── home └── httpie-request.adoc └── curl-request.adoc └── http-request.adoc └── http-response.adoc
默认情况下,snippets是asciidoctor格式的文件,包括request和reponse,另外其他两种httpie和curl两种流行的命令行的http请求模式。
到目前为止,只生成了snippets文件,需要用snippets文件生成文档。
怎么用snippets
创建一个新文件src/main/asciidoc/index.adoc :
用 spring rest docs 构建文档 this is an example output for a service running at http://localhost:8080: .request include::{snippets}/home/http-request.adoc[] .response include::{snippets}/home/http-response.adoc[] 这个例子非常简单,通过单元测试和一些简单的配置就能够得到api文档了。
adoc的书写格式,参考:,这里不多讲解。
需要使用asciidoctor-maven-plugin插件,在其pom文件加上:
<plugin> <groupid>org.asciidoctor</groupid> <artifactid>asciidoctor-maven-plugin</artifactid> <executions> <execution> <id>generate-docs</id> <phase>prepare-package</phase> <goals> <goal>process-asciidoc</goal> </goals> <configuration> <sourcedocumentname>index.adoc</sourcedocumentname> <backend>html</backend> <attributes> <snippets>${project.build.directory}/snippets</snippets> </attributes> </configuration> </execution> </executions> </plugin>
这时只需要通过mvnw package命令就可以生成文档了。
在/target/generated-docs下有个index.html,打开这个html,显示如下,界面还算简洁:
结语
通过单元测试,生存adoc文件,再用adoc文件生存html,只需要简单的几步就可以生成一个api文档的html文件,这个html文件你可以通网站发布出去。整个过程很简单,对代码无任何影响。
源码下载:https://github.com/forezp/springbootlearning
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: c#对list排序示例
下一篇: 27. 移除元素