Api管理工具(spring-rest-docs)
對于app開發(fā)來說,必須需要有相應的api文檔,一般最基礎的就是用markdown工具來撰寫api文檔。當對于開發(fā)人員來說,是總會想著尋找更方便撰寫,測試,對接前端開發(fā)的文檔生成的工具。
其實這方面的工具很多:手動撰寫的也很多,很多都帶有mock測試功能。方便前端對接時使用。
國內(nèi)的也不少:
RAP:動態(tài)生成模擬數(shù)據(jù),實時測試等功能。
eoLinker:基于云端的api管理工具,同時提供在線協(xié)作,測試等的功能。
SBDoc:SBDoc是一個商業(yè)化開源產(chǎn)品,完全免費。無論你是前端工程師,還是后端工程師,接口永遠都是兩者交互的橋梁,所以SBDoc專為中小型團隊量身打造,旨在解決接口的管理,測試與數(shù)據(jù)生成,實現(xiàn)真正的一體化解決方案。
Apizza - 為極客打造的api管理工具。
easyApi:有分免費和收費,但只支持在線版本的api管理。
CrapApi:一個由anjularjs+bootstrap+springMVC搭建的免費開源的API接口、文檔管理系統(tǒng)(應用接口管理系統(tǒng))。
showDoc:國內(nèi)的api 管理工具,比較簡潔。https://www.showdoc.cc/demo?page_id=10
小幼雞:也是api 管理工具,差不多,自己可以比較試用,小幺雞,簡單好用的在線接口文檔管理系統(tǒng)
NEI:團隊協(xié)作工具,其實也是在文檔等包括api接口的測試等的工具。https://nei.netease.com/
apiview:不多說就是一個工具。https://www.apiview.com/
apidoc:apidoc可以根據(jù)代碼注釋生成web api;沒什么侵入性,可是學習成本稍微高點,要了解很多注釋里使用到的注解
?
外國的Swagger 是一款java的api 生成工具,不過是代碼侵入的形式,功能是很強大啊。可是代碼里要加很多注解,讓人別扭。
WSO2 API Management?: 是比較好的api管理框架吧!
當然還有很多這種api管理工具,基本都是在云應用上,至少都有免費的。最好尋找離線的工具,可以在本地部署使用為最優(yōu)了。
==========================================================================
下面重點介紹的是spring-rest-docs的使用。
spring-rest-docs是一個測試驅(qū)動的spring組件,他能生成測試成功的接口進行文檔生成,支持markdown的轉(zhuǎn)換或者html的轉(zhuǎn)化,對于文檔對接,其實也夠了,缺點就是無法像其他工具那樣模擬測試數(shù)據(jù),前端在對接的時候,可以直接調(diào)用模擬數(shù)據(jù),尤其對于趕進度的接口,可能是先寫接口,再寫實現(xiàn),那么這樣的話,就有點不適合。
但他的強大之處,就是可以自動生成文檔,而且是經(jīng)過測試過的接口,減去一些不必要的撰寫工作,相對于Swagger來說,沒有任何代碼的依賴侵入。所以在實際的spring那套開發(fā)框架下,還是建議使用,他確實很不錯。如果真的需要用到其他系統(tǒng)化的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 驗證授權(quán)--><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/
?轉(zhuǎn)載于:https://www.cnblogs.com/qq350760546/p/8397557.html
總結(jié)
以上是生活随笔為你收集整理的Api管理工具(spring-rest-docs)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 趣谈NAT和防火墙的对话+防火墙静态PA
- 下一篇: zabbix的主动模式和被动模式、添加监