API文檔工具Swagger

簡介

問題:在我們API開發中,服務端和客戶端會約定介面文檔,而在實際開發中則可能出現,介面文檔延遲更新,造成客戶端看到的介面和服務端實際開發的介面不一致的問題;

Swagger 文檔提供了一個方法,使我們可以用指定的 JSON 或者 YAML 摘要來描述你的 API,包括了比如 介面名、介面參數 等 API 信息。

你可以通過一個文本編輯器來編輯 Swagger 文件,或者你也可以從你的代碼註釋中自動生成。各種工具都可以使用 Swagger 文件來生成互動的 API 文檔。

swagger的一些常用工具

1. swagger文件編寫工具 (swagger editor):在線版本的swagger編輯器:http://editor.swagger.io/,支持json,yaml兩種格式

Advertisements

  • 如果想了解swagger文檔的編寫語法,可以在http://swagger.io/docs/specification/swagger-extensions/這裡查看

2. swagger ui可視化文件生成工具 (swagger ui)靜態頁面(用於將json,yaml轉化為可視化的頁面顯示)

3. Swagger-codegen (swagger codegen):用於生成客戶端和服務端各個語言的代碼

4. swagger hub介面管理 (swagger hub) :swagger文檔雲端管理工具,類似於github

swagger api 集成

目前官網上有提供 Jersey 1.X Jersey 2.X RESTEasy 2.X Mule的配置方法,官網wiki寫的很詳細https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-JAX-RS-Project-Setup-1.5.X#hooking-up-swagger-core-in-your-application

Advertisements

對於各個不同的rest服務,git-hub也有提供相關的demo,https://github.com/swagger-api/swagger-samples


配置樣例(jersey2)

配置API項目過程中的樣例,主要有兩種配置方式:web.xml的servlet配置、BeanConfig配置。

1. 引入swagger相關jar包

<dependency>

<groupId>io.swagger</groupId>

<artifactId>swagger-jersey2-jaxrs</artifactId>

<version>1.5.10</version>

</dependency>

2. web.xml中jersey配置中加入對,swagger相關resource的路徑

<servlet>

<servlet-name>JerseyServlet</servlet-name>

<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

<init-param>

<param-name>jersey.config.server.provider.packages</param-name>

<param-value>

io.swagger.jaxrs.listing,<!--swagger相關資源-->

com.sohu.tv.api4.rest.controller <!--業務資源>

</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>JerseyServlet</servlet-name>

<url-pattern>/*</url-pattern>

</servlet-mapping>

3. swagger相關配置(一些全局描述)

web.xml中servlet配置(第一種方式)

<servlet>

<servlet-name>Jersey2Config</servlet-name>

<servlet-class>io.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>

<init-param>

<param-name>api.version</param-name>

<param-value>1.0.0</param-value>

</init-param>

<init-param>

<param-name>swagger.api.basepath</param-name>

<param-value>/</param-value>

</init-param>

<init-param>

<!-- 是否掃描全部資源,包含沒使用swagger註解聲明過的rest資源 -->

<param-name>scan.all.resources</param-name>

<param-value>true</param-value>

</init-param>

<load-on-startup>2</load-on-startup>

</servlet>

此外還有:

swagger.api.host 、 swagger.api.schemes、swagger.api.title、

swagger.filter都可以在servlet的參數中聲明

BeanConfig配置(第二種方式)

<!–web.xml中聲自定義明配置的servlet-->

<servlet>

<servlet-name>Bootstrap</servlet-name>

<servlet-class>com.sohu.tv.api4.utils.Bootstrap</servlet-class>

<init-param>

<param-name>scan.all.resources</param-name>

<param-value>true</param-value>

</init-param>

<load-on-startup>2</load-on-startup>

</servlet>

// 自定義servlet的類配置

public class Bootstrap extends HttpServlet {

@Override

public void init(ServletConfig config) throws ServletException {

super.init(config);

BeanConfig beanConfig = new BeanConfig();

beanConfig.setVersion("1.0.2");

beanConfig.setSchemes(new String[]{"http"});

beanConfig.setHost("localhost:8002");

beanConfig.setBasePath("/api");

// resourcepackage指明需要掃描的業務rest資源路徑(未指明,則不會掃描資源)

beanConfig.setResourcePackage("io.swagger.resources");

// setScan說明beanconfig是否生效被掃描

beanConfig.setScan(true);

// 如果想讓未加swagger註解的rest資源被掃到,需加如下配置:

ReaderConfigUtils.initReaderConfig(config);

}

}

完成上述配置,既可以在項目中,使用swagger註解完成介面描述。

Advertisements

你可能會喜歡