欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解如何用spring Restdocs创建API文档

程序员文章站 2024-02-24 18:00:16
这篇文章将带你了解如何用spring官方推荐的restdoc去生成api文档。本文创建一个简单的springboot工程,将http接口通过api文档暴露出来。只需要通过...

这篇文章将带你了解如何用spring官方推荐的restdoc去生成api文档。本文创建一个简单的springboot工程,将http接口通过api文档暴露出来。只需要通过 junit单元测试和spring的mockmvc就可以生成文档。

准备工作

  1. 你需要15min
  2. jdk 1.8
  3. maven 3.0+
  4. 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,显示如下,界面还算简洁:

详解如何用spring Restdocs创建API文档

结语

通过单元测试,生存adoc文件,再用adoc文件生存html,只需要简单的几步就可以生成一个api文档的html文件,这个html文件你可以通网站发布出去。整个过程很简单,对代码无任何影响。

源码下载:https://github.com/forezp/springbootlearning

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。