Api管理工具(spring-rest-docs)
对于app开发来说,必须需要有相应的api文档,一般最基础的就是用markdown工具来撰写api文档。当对于开发人员来说,是总会想着寻找更方便撰写,测试,对接前端开发的文档生成的工具。
其实这方面的工具很多:手动撰写的也很多,很多都带有mock测试功能。方便前端对接时使用。
国内的也不少:
RAP:动态生成模拟数据,实时测试等功能。
eoLinker:基于云端的api管理工具,同时提供在线协作,测试等的功能。
SBDoc:SBDoc是一个商业化开源产品,完全免费。无论你是前端工程师,还是后端工程师,接口永远都是两者交互的桥梁,所以SBDoc专为中小型团队量身打造,旨在解决接口的管理,测试与数据生成,实现真正的一体化解决方案。
Apizza - 为极客打造的api管理工具。
easyApi:有分免费和收费,但只支持在线版本的api管理。
CrapApi:一个由anjularjs+bootstrap+springMVC搭建的免费开源的API接口、文档管理系统(应用接口管理系统)。
showDoc:国内的api 管理工具,比较简洁。https://www.showdoc.cc/demo?page_id=10
小幼鸡:也是api 管理工具,差不多,自己可以比较试用,小幺鸡,简单好用的在线接口文档管理系统
NEI:团队协作工具,其实也是在文档等包括api接口的测试等的工具。https://nei.netease.com/
apiview:不多说就是一个工具。https://www.apiview.com/
apidoc:apidoc可以根据代码注释生成web api;没什么侵入性,可是学习成本稍微高点,要了解很多注释里使用到的注解
外国的Swagger 是一款java的api 生成工具,不过是代码侵入的形式,功能是很强大啊。可是代码里要加很多注解,让人别扭。
WSO2 API Management : 是比较好的api管理框架吧!
当然还有很多这种api管理工具,基本都是在云应用上,至少都有免费的。最好寻找离线的工具,可以在本地部署使用为最优了。
==========================================================================
下面重点介绍的是spring-rest-docs的使用。
spring-rest-docs是一个测试驱动的spring组件,他能生成测试成功的接口进行文档生成,支持markdown的转换或者html的转化,对于文档对接,其实也够了,缺点就是无法像其他工具那样模拟测试数据,前端在对接的时候,可以直接调用模拟数据,尤其对于赶进度的接口,可能是先写接口,再写实现,那么这样的话,就有点不适合。
但他的强大之处,就是可以自动生成文档,而且是经过测试过的接口,减去一些不必要的撰写工作,相对于Swagger来说,没有任何代码的依赖侵入。所以在实际的spring那套开发框架下,还是建议使用,他确实很不错。如果真的需要用到其他系统化的api管理工具,可以把markdown再导入到管理工具中去,即可。
另外apidoc 也不错,也是可以考虑使用的。
--------------------------------------------------------------------------------
spring-boot 整合 spring-rest-docs
1,pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.ouyang</groupId>
<artifactId>boss</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>boss</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</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> <!-- java-web-token 验证授权-->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency> <dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<version>1.5.2</version>
<executions>
<execution>
<id>generate-docs</id>
<phase>prepare-package</phase>
<goals>
<goal>process-asciidoc</goal>
</goals>
<configuration>
<backend>html</backend>
<doctype>book</doctype>
<attributes>
<snippets>${project.build.directory}/generated-snippets</snippets>
</attributes>
<!-- <sourceDirectory>src/docs/asciidocs</sourceDirectory>
<outputDirectory>target/generated-docs</outputDirectory>-->
</configuration>
</execution>
</executions>
</plugin>
<!--<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.outputDirectory}/static/docs
</outputDirectory>
<resources>
<resource>
<directory>
${project.build.directory}/generated-docs
</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>-->
</plugins>
</build> </project>
2,写测试类
@RunWith(SpringRunner.class)
@WebMvcTest(TestController.class)
@AutoConfigureRestDocs(outputDir = "target/generated-snippets")
public class SpringRest2 { @Autowired
private MockMvc mockMvc; @Test
public void shouldReturnDefaultMessage() throws Exception {
this.mockMvc.perform(get("/xiaofeng").param("xiaobing", "Tester").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(document("index2", requestParameters(
parameterWithName("xiaobing").description("xiaobing is autoSelected avaible"))));
} // @Test
// public void shouldReturnDefaultMessage2() throws Exception {
// this.mockMvc.perform(get("/api/liu").accept(MediaType.APPLICATION_JSON))
// .andExpect(status().isOk())
// .andDo(document("index"));
// } }
3,进行junit测试后在target目录下会生成
然后再手动配置接口展示的文档:
这里需要建立相应的文档,并建立index.adoc文件。{snippets} 就是你配置在asciidoctor-maven-plugin插件里的snippets属性
4,生成html文档
在控制台输入: mvnw package (或者mvn package)
会在target/generated-docs 里面生成对应的html文档。
还有更好的用法,可以查看官方文档:
http://docs.spring.io/spring-restdocs/docs/1.1.0.RELEASE/reference/html5/
intellj可以按照asciiDoc插件 方便查看文档
参考:spring-rest-docs https://github.com/sumit-samaddar/spring-rest-docs
官方地址:http://docs.spring.io/spring-restdocs/docs/1.1.0.RELEASE/reference/html5/
Api管理工具(spring-rest-docs)的更多相关文章
- 你不得不知的几款常用的在线API管理工具
在项目开发过程中,总会涉及到接口文档的设计编写,之前使用的都是ms office工具,不够漂亮也不直观,变更频繁的话维护成本也更高,及时性也是大问题.基于这个背景,下面介绍几个常用的API管理工具,方 ...
- 几款常用的在线API管理工具(是时候抛弃office编写接口文档了)
在项目开发过程中,总会涉及到接口文档的设计编写,之前使用的都是ms office工具,不够漂亮也不直观,变更频繁的话维护成本也更高,及时性也是大问题.基于这个背景,下面介绍几个常用的API管理工具,方 ...
- 介绍几款常用的在线API管理工具
在项目开发过程中,总会涉及到接口文档的设计编写,之前使用的都是ms office工具,不够漂亮也不直观,变更频繁的话维护成本也更高,及时性也是大问题.基于这个背景,下面介绍几个常用的API管理工具,方 ...
- FREE 开源 API 管理工具等
最近学习API 管理工具,发现几个不错的东西,记录如下: 1.IBM 收购NODE 厂家 STRONGLOOP 有一产品LOOPBACK,开源,好! 2.apigee api管理平台 也不错. 3 ...
- API 管理工具
API 管理工具 你还苦于无法有效的管理大量的API吗?今天给大家介绍一款API的管理工具.这款工具可以免费使用,虽然中途可能会提示你购买,但并不影响我们的使用. 下载地址: Windows:http ...
- API管理工具介绍
时间都去哪里了 敏捷迭代和团队协作,前后端分离的工作模式几乎是每个互联网公司的常规工作模式. 前后端分离,各自开发的优点很多,其中一项是它只需要提供一个统一的API接口,即可被web,iOS,An ...
- API管理工具
开源的api文档管理系统 api文档 php 在项目中,需要协同开发,所以会写许多API文档给其他同事,以前都是写一个简单的TXT文本或Word文档,口口相传,这种方式比较老土了,所以,需要有个api ...
- 论元数据和API管理工具
公司里面的很多部门都在广泛的采用元数据管理,也采用了公司内部开发的元数据管理工具,有些部门的实施效果一直非常好,而有些部门的效果则差强人意.这个问题,其实和软件系统开发完成进入维护阶段后成本居高不下的 ...
- 前端api管理工具YApi
使用YApi接口管理工具,提升前端开发效率前端开发苦恼: 代码中使用json数据模拟后端api数据,注释调取api接口代码,代码乱七八糟 为了测试不同case,央求后端人员返回不同的数据,返回状态.返 ...
随机推荐
- Android 添加水印, 以及屏幕存取
/** * 获取水印 */ try { String s = CustomPreferences.getUserInfo().getAccountNo().substring(7,11); View ...
- Emgu.CV(三)
像素交换 private void btn_Exchange_Click(object sender, EventArgs e) { if (imageBox1.Image != null) { va ...
- win10 uwp 读取文本GBK错误
本文讲的是解决UWP文本GBK打开乱码错误,如何去读取GBK,包括网页GBK.最后本文给出一个方法追加文本. 我使用NotePad记事本保存文件,格式ASCII,用微软示例打开文件方式读取,出现错误 ...
- WPF DataGridHyperlinkColumn
为了点击链接,我们使用 <DataGrid x:Name="data" LoadingRow="load" ItemsSource="{Bind ...
- vs2012建一个空解决方案添加以前老版本的Web项目调试弹出window安全
解决方法:NTLM身份验证去掉就行.
- NodeJs通过镜像下载相关NPM模块
临时通过镜像使用一次:npm --registry https://registry.npm.taobao.org install 模块名[设置镜像源地址为淘宝] 持久使用的第一种方法: npm c ...
- [ACdream]瑶瑶带你玩激光坦克
题目链接:http://acdream.info/contest?cid=1269#problem-B Problem Description 有一款名为激光坦克的游戏,游戏规则是用一个坦克发出激光来 ...
- SQL查询一个表里面某个字段值相同的数据记录
好长时间没有用SQL了...还停留在学生时代的水平... 转: 昨天遇到个面试题:查询一个表里面某个字段值相同的数据记录,好久没有写过这种,还真的花了点时间才写出来.如表g_carddetail,有 ...
- Vue-cli安装教程
第一步:安装vue-cli npm install vue-cli -g -g :代表全局安装.如果你安装时报错,一般是网络问题,你可以尝试用cnpm来进行安装. 检测是否安装成功:可以用vue -V ...
- struts2(五)之struts2拦截器与自定义拦截器
前言 前面介绍了struts2的输入验证,如果让我自己选的话,肯定是选择xml配置校验的方法,因为,能使用struts2中的一些校验规则,就无需自己编写了, 不过到后面应该都有其他更方便的校验方法,而 ...