优秀的编程知识分享平台

网站首页 > 技术文章 正文

API文档工具Swagger(api文档之间的共同点是什么)

nanyue 2024-08-04 17:01:44 技术文章 8 ℃

简介

问题:在我们API开发中,服务端和客户端会约定接口文档,而在实际开发中则可能出现,接口文档延迟更新,造成客户端看到的接口和服务端实际开发的接口不一致的问题;

Swagger 文档提供了一个方法,使我们可以用指定的 JSON 或者 YAML 摘要来描述你的 API,包括了比如 接口名、接口参数 等 API 信息。

你可以通过一个文本编辑器来编辑 Swagger 文件,或者你也可以从你的代码注释中自动生成。各种工具都可以使用 Swagger 文件来生成互动的 API 文档。

swagger的一些常用工具

1. swagger文件编写工具 (swagger editor):在线版本的swagger编辑器:http://editor.swagger.io/,支持json,yaml两种格式

  • 如果想了解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

对于各个不同的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注解完成接口描述。

最近发表
标签列表