本文来自网易云社区

作者:李哲

接口文档管理一直是一个让人头疼的问题,伴随着各种接口文档管理平台涌现,如阿里开源的rap,ShowDoc,sosoapi,等等(网上能找到很多这种管理平台,包括我们自己做的idoc)。这些平台都是一个共同特点,创建文档,编辑,保存文档,一些功能强大的还有mock,统计接口信息等功能,所以这些平台更像一个接口文档的存储管理系统,可以方便人们查看、编辑文档。然而接口一般都是经常变化(添加、删除参数),这就需要接口编写者及时更新文档,否则文档将失去意义,但是频繁去更新文档也会花费开发不少时间。Swagger的出现在某种程度上解决了这些问题,Swagger提供了一套完整的接口文档解决方案,其功能非常强大,下面将从Swagger简单介绍和使用、Swagger-springmvc原理解析、Swagger其他功能等方面介绍。

一、Swagger介绍和使用

1、 什么是swagger

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger让部署管理和使用功能强大的API变得非常简单。官方网站:http://swagger.io/

Swagger采用OpenAPI规范,OpenAPI规范这类API定义语言能够帮助你更简单、快速的表述API,尤其是在API的设计阶段作用特别突出。一旦编写完成,API文档可以作为:

·  需求和系统特性描述的根据

·  前后台查询、讨论、自测的基础

·  部分或者全部代码自动生成的根据

·  其他重要的作用,比如开放平台开发者的手册

2、 如何编写API文档

(1)定义YAML文件,然后可以生成各种语言的代码框架,对于后台程序员来说,较少人会愿意写出一堆YAML格式。

(2)定义JSON格式文件,按照swagger文档书写规范编写文档,和YAML一样只是两种不同格式。

(3)通过swagger的各种语言的插件,可以通过配置及少量代码,生成接口文档及测试界面。通过yaml或json书写的是静态文档,需要书写文档中需要的内容,详细写法可参考:https://www.gitbook.com/book/huangwenchao/swagger/details,完成后可以通过可视化页面显示接口文档。但要完成整个项目的接口文档书写也非常耗时,如果是后台开发,可以通过简单配置实现文档的自动生成。

3、 Springmvc项目中使用swagger

1) 添加maven依赖

<dependency>

         <groupId>com.mangofactory</groupId>

         <artifactId>swagger-springmvc</artifactId>

         <version>1.0.2</version>

      </dependency>

2) 定义一个swagger配置类,添加如下注解,具体内容可参考网上demo

3) 在spring配置文件中将写的config类添加一个bean

4) 在controller中接口处添加swagger注解和相应参数

5) Swagger UI配置

https://github.com/swagger-api/swagger-ui 获取3.0版本以下,2.0版本以上。其所有的dist目录下东西放到需要集成的项目里,本文放入src/main/webapp/WEB -INF/docs/ 目录下。

  修改swagger/index.html文件,默认是从连接http://petstore.swagger.io/v2/ swagger.json获取 API 的 JSON,这里需要将url内容修改为http://{ip}:{port}/{project Name}/api-docs的形式,{}中的内容根据具体情况填写。比如本文的url值为:http://localhost/quality /docs/api-docs。所有工作完成后,在浏览器中输入上述url地址可得到如下页面(注:该页面是swagger官网示例)。

接口详情如下图所示:

可以根据请求参数访问接口,如果网络通畅将返回接口的response结果,在该页面可以看到接口的基本详情,而且如果后台接口发生变化,该页面中的信息也会随着变化,这样接口的内容就是实时变化的,相对于静态的文档每次改动都需要开发更新文档的方式,该方式无疑是非常好的解决方案。

如果过程中发现没有达到预期的结果,请检查swagger ui位置是否正确;spring中是否添加了SwaggerConfig的bean。

4、 Springboot项目中使用swagger2

相对于springmvc中添加swagger,springboot中更加简单。Springboot中许多配置是默认的,不用太多配置就能完成swagger的接入。具体流程如下:

1) 添加maven依赖

<!-- swagger框架 -->

      <dependency>

         <groupId>io.springfox</groupId>

         <artifactId>springfox-swagger2</artifactId>

         <version>2.2.2</version>

      </dependency>

      <dependency>

         <groupId>io.springfox</groupId>

         <artifactId>springfox-swagger-ui</artifactId>

         <version>2.2.2</version>

      </dependency>

2)  创建swagger2配置类,该类和springmvc中的不太一样,具体可参考swagger官网。配置中通过@Configuration注解,让Spring来加载该类配置。再通过@EnableSwagger2注解来启用Swagger2。

3)  和springmvc一样,在controller接口中编写swagger相关的注解来标识接口信息。如下所示,通过@ApiOperation注解来给API增加说明、通过@ApiImplicitParams、@ApiImplicitParam注解来给参数增加说明。

4)  完成上述代码添加上,启动Spring Boot程序,访问:http://localhost:8080/swagger- ui.html。就能看到前文所展示的RESTful API的页面。我们可以再打开具体的API请求,以POST类型的/users请求为例,可找到上述代码中我们配置的Notes信息以及参数user的描述信息,如下图所示。

通过简单的配置改动,spring就能结合swagger,通过简单的方式自动生成接口文档,而且以可视化页面的形式展现,非常灵活方便。

下面对swagger在spring中使用的一些常用注解进行说明:

  • Api、ApiIgnore

  • ApiModel

  • ApiModelProperty

  • ApiOperation

  • ApiParam、ApiImplicitParam、ApiImplicitParams

  • ApiResponse

  • ApiResponses

  • ResponseHeader

1)  Api注解用于类上,说明该类的作用。可以标记一个Controller类做为swagger 文档资源。与Controller注解并列使用。

            @Api(value = "/user", description = "Operations about user")

属性如下:

2) ApiOperation注解,用在方法上,说明方法的作用,与Controller中的方法并列使用。

3) ApiParam注解用在@ApiImplicitParams的方法里边,属性配置:

4) ApiResponse注解用于响应配置,与Controller中的方法并列使用。属性配置:

5) ApiResponses注解中包含ApiResponse,用于描述一组ApiResponse值。

6) ResponseHeader注解用于设置响应头,与Controller中的方法并列使用。 属性配置:

7) ApiImplicitParams注解用于方法上包含一组参数说明。

8) ApiImplicitParam注解用于描述请求参数,根据不同的paramType类型,请求的参数来源不同。属性及取值如下:

9)  ApiModel注解用于表示对类进行说明,描述一个Model的信息,表示参数用实体类接收。

10)ApiModelProperty注解用于方法、字段,表示对model属性的说明或者数据操作更改,配合ApiModel一起使用。

11)ApiIgnore注解用于类或方法上,表示不需要swagger处理。

Swagger提供的注解还有其他一些,此处不做解释(而且高版本中的注解可能不太一样),可以通过官方文档或源码查阅,基本常用的注解就是这些,详细的使用方法可以网上查看。如果熟悉了这些注解就可以很快的表示后台代码接口的信息,然后通过页面的形式展示出来。但是swagger是如何结合spring通过简单的配置、添加注解的方式就将接口的信息展现出来。下面将看看swagger为什么这么神奇。

相关阅读:接口文档神器Swagger(下篇)

网易云大礼包:https://www.163yun.com/gift

本文来自网易云社区,经作者李哲授权发布

相关文章:
【推荐】 大数据技术在金融行业的应用前景

接口文档神器Swagger(上篇)的更多相关文章

  1. 接口文档神器Swagger(下篇)

    本文来自网易云社区 作者:李哲 二.Swagger-springmvc原理解析 上面介绍了如何将springmvc和springboot与swagger结合,通过简单配置生成接口文档,以及介绍了swa ...

  2. Eolinker API 接口文档神器

    Eolinker API 接口文档神器 群里小伙伴推荐的,还没有去研究,先记下来. API文档管理.自动化测试.开发协作利器 正在为数万企业管理超过100万APIs,提高开发效率以及规范开发流程

  3. 接口文档神器--apiui的使用

    接口开发,最麻烦的就是写文档了,曾经我也因为写接口文档苦不堪言:自从使用了apiui接口文档神器,工作效率和文档清晰得到了不止一个档次的提升. 下面介绍一下这个神器的使用: 把文件下载下来,放在网站根 ...

  4. 接口开发-集成接口文档(swagger)

    在正式进入主题之前,先说说实际工作中遇到的问题.不算是传统的原生APP开发,还是眼下的H5混合开发,只要是需要前后端通过接口配合的,往往都存在几个普遍的问题 (1)接口文档谁来写,尤其是跨部门,并且, ...

  5. .Net Core3.0 WebApi 项目框架搭建 二:API 文档神器 Swagger

    .Net Core3.0 WebApi 项目框架搭建:目录 为什么使用Swagger 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.后端分离的形态,而且前端技术和后端技 ...

  6. JApiDocs(自动生成接口文档神器)

    JApiDocs教程 前言 作为一名优秀的程序员来说,由于涉及到要与前端进行对接,所以避免不了的就是写接口文档.写完接口文档,一旦代码返回结果,参数等出现变动,接口文档还得随之改动,十分麻烦,违背了我 ...

  7. API接口文档中将Swagger文档转Word 文档

    一般的开发工作,尤其是API接口的开发工作,首先要有开发文档,接口说明文档 ok,后来开发完毕了 和页面联调,或者是和第三方联调的时候, 这个时候,SA systeam admin 就会开始直接让开发 ...

  8. Swagger 接口文档规范

    导语: 相信无论是前端还是后端开发,都或多或少地被接口文档折磨过.前端经常抱怨后端给的接口文档与实际情况不一致.后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新.其实无论是前端调用后端,还是 ...

  9. SpringBoot 如何生成接口文档,老鸟们都这么玩的!

    大家好,我是飘渺. SpringBoot老鸟系列的文章已经写了两篇,每篇的阅读反响都还不错,果然大家还是对SpringBoot比较感兴趣.那今天我们就带来老鸟系列的第三篇:集成Swagger接口文档以 ...

随机推荐

  1. umbraco

    在任意页面获取根节点 var locale = CurrentPage.Site(); 遍历根节点 @foreach (var module in CurrentPage.Site().Childre ...

  2. Zabbix Agent 自动、主动注册

    简述: 今天来研究一下 Zabbix 的主动注册功能. 当你有十台机器需要监控时,你手动去添加是没有问题的.但是当你有五十台.上百台或更多服务器要监控时,你会怎么做 ? Active Agent Au ...

  3. MySQL数据库篇之初识数据库

    主要知识点: 一.数据库概述 二.mysql安装与基本管理 1️⃣ 数据库概述 1.什么是数据(Data)? 描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字.图片,图像.声音. ...

  4. solr的简单部署:在tomcat中启动slor

    1,首先要下载solr 途径1: 官网网址: http://lucene.apache.org/ 与Lucene的官网是一个 途径2: 下载历史版本的网址: http://archive.apache ...

  5. JAVA中集合转数组遍历

    JAVA中集合的遍历的一种方法时集合转数组遍历,也是就调用Collection中的toArray(). 代码: public static void main(String[] args) {     ...

  6. 高性能Web服务器Nginx的配置与部署研究(6)核心模块之主模块的测试常用指令

    1. daemon 含义:设置是否以守护进程模式运行 语法:daemon on|off 缺省:on 示例:daemon off; 注意:生产环境(production mode)中不要使用daemon ...

  7. Xen的源码安装及dom0,domU的设置

    Xen作为一种应用广泛的虚拟机方案,无论是在工业还是教育领域都发挥着巨大的作用.Xen不仅有其引以为豪的Paravirtualization实现,还有基于硬件支持的HVM实现.对于Xen,Ubuntu ...

  8. Python爬虫实战二之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...

  9. 设计模式(java)--Bridge模式之蜡笔与毛笔的故事

    转自:吕震宇 http://www.cnblogs.com/zhenyulu/articles/67016.html#!comments 我想大家小时候都有用蜡笔画画的经历吧.红红绿绿的蜡笔一大盒,根 ...

  10. bootstrap小图标引用方法

    <span class="glyphicon glyphicon-search"></span> <span class="glyphico ...