`

RESTful API的灵魂伴侣——Swagger

阅读更多

开篇总是要写一些概括性的东西!

 

    Swagger 是一个RESTful接口的文档的实时生成与测试工具。没接触过类似工具的你可能对这句话没什么概念,不要急,我来慢慢解释。

    使用REST的原因之一就是方便前后端分离开发,后端开发者写后端的逻辑,前端开发者写前端的逻辑,然后大家约定好一个API的风格,使用HTTP的get、post、put、delete来对应资源的CURD。避免了这种情况的发生:前端开发者拿着后端提供的厚厚的API文档边查阅边愤愤地开发,每个业务逻辑对应一个接口规范,混乱不堪。然后某一天后端改了逻辑,删掉了几个接口又增加了几个接口,前端又要大范围地改代码,然后前后端就打起来了。

    为了避免打架,规范了API的设计,使用了较为轻便的RESTful风格。而Swagger起到一个锦上添花的作用,它使得前后端的协同变得更加效率。后端开发者在定义好接口后,Swagger会自动生成并更新文档,文档中会详细记录接口的使用方法,需要传入哪些参数,又会返回什么样的结果,即节约了写文档的时间,又提高了文档的同步速度,提高了开发效率。另外Swagger不止这些功能,它还有一个强大的功能,就是在文档中直接对接口进行测试,我们可以使用Swagger模拟用户的真实操作,向后台发一个请求来验证接口是否满足需求。说了这么多,可能你还是不太明白,那我直接贴张图片吧,下图就是Swagger生成的文档:

 

 

 

 

 

    算了,不截图了,直接给个链接吧:http://petstore.swagger.io/?_ga=2.151670393.1145939008.1514200525-1067691787.1514200525

    这是官方提供一个demo文档,可以简单操作一下,聪明的你应该豁然开朗了吧!

 

    好了,Swagger介绍完了,相信大家已经认识他了吧。下面我将介绍如何在spring mvc项目中嵌入Swagger:

    本文使用 springfox-swagger实现Swagger的集成。很简单,仅仅几步就可搞定!

步骤↓:

  1. 引入jar包,此处笔者使用maven,直接引入依赖:
    		<!-- swagger RestfulAPI 文档工具 -->
    		<dependency>
    			<groupId>io.springfox</groupId>
    			<artifactId>springfox-swagger2</artifactId>
    			<version>${springfox.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>io.springfox</groupId>
    			<artifactId>springfox-swagger-ui</artifactId>
    			<version>${springfox.version}</version>
    		</dependency>
     此处使用的版本是springfox.version=2.6.1
  2. 重写一下Swagger的配置类并声明成bean:
    package com.ds.core.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
    
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    @EnableWebMvc
    @EnableSwagger2
    @ComponentScan("com.ds.literary.controller")//配置Swagger要扫描的包
    @Configuration
    public class SwaggerConfig extends WebMvcConfigurationSupport {
    
    	@Bean
    	public Docket docket() {
    		return new Docket(DocumentationType.SWAGGER_2)
    				.apiInfo(apiInfo())
    				.groupName("Du")
    				.select()
    //				.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
    //				.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
    				.paths(PathSelectors.any())
    				.build();
    	}
    
    //	@Bean
    //	public Docket xxx() {
    //		return new Docket(DocumentationType.SWAGGER_2)
    //				.apiInfo(apiInfo())
    //				.groupName("xxx")
    //				.select()
    //				.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
    //				.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
    //				.paths(PathSelectors.ant("/xxx/**"))
    //				.build();
    //	}
    
    	private ApiInfo apiInfo() {
    		return new ApiInfoBuilder()
    				.title("Ds")
    				.contact(new Contact("Du", "", "981040863@qq.com"))
    				.version("0.0.1")
    				.build();
    	}
    }
     
  3. 在写controller的时候加入一些annotation就好了:
    @RestController
    @RequestMapping("/blog")
    @Api(value = "管理用户发表的博客,文章,日志接口", description = "管理用户发表的博客,文章,日志接口")
    public class BlogController extends BaseController<Blog>{
    	public String getService() {
    		return "blogService";
    	}
    
    	@PutMapping
    	@ApiOperation(value = "修改用户发表的博客,文章,日志", produces = MediaType.APPLICATION_JSON_VALUE)
    	public Object update(HttpServletRequest request, @RequestBody Blog param) {
                    ModelMap modelMap = new ModelMap();
                    long authorId=getCurrUser();
                    param.setAuthorId(authorId);
    		return super.update(modelMap, param);
    	}
    
    	@DeleteMapping
    	@ApiOperation(value = "删除用户发表的博客,文章,日志", produces = MediaType.APPLICATION_JSON_VALUE)
    	public Object delete(HttpServletRequest request, @RequestBody Blog param) {
                    ModelMap modelMap = new ModelMap();
    		return super.delete(modelMap, param);
    	}
    }
     
  4. 在spring中配置一个资源重定向:
    <mvc:resources mapping="swagger-ui.html" location="classpath:/META-INF/resources/" />
     
  5. 启动项目,打开默认文档界面http://localhost:8080/ds-sys-web/swagger-ui.html,这个路径根据你的实际情况修改。如果你觉得这个界面丑,是可以自己定制的,具体方法本篇就不介绍了。

下面是成功后的截图:

 

 

搞定!酷

 

  • 大小: 104 KB
1
0
分享到:
评论

相关推荐

    Python Flask高级编程之RESTFul API前后端分离精讲第七章节

    Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API...

    Spring Boot中使用Swagger2构建强大的RESTful API文档

    为了解决上面这样的问题,本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档。它既可以减少我们创建文档的工作量,同时说明内容又...

    Python Flask高级编程之RESTFul API前后端分离精讲第一讲解

    Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask...

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验 本实验的主要目标是使用SpringBoot、Mybatis和CXF框架来实现Restful API和WebService API接口的大实验。下面是实验的详细介绍: 标题...

    RESTful API设计规范.pdf

    RESTful API设计规范.pdf RESTful API设计规范是指在软件架构和设计风格中,遵循一组设计原则和约束条件,以降低开发的复杂性,提高系统的可扩展性。RESTful架构的核心是面向资源,每个网址代表一种资源,因此网址...

    RESTful API设计:API文档编写与Swagger工具.docx

    RESTful API设计:API文档编写与Swagger工具.docx

    k8s restful api 访问

    restful api访问k8s集群,增删改查信息。 需要预先创建访问权限的配置。 官网api文档 https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.9/ 下面罗列部分api curl -u admin:admin ...

    RestFul API 案例

    **RestFul API 知识点详解** ...RESTful API是遵循REST原则设计的Web服务接口,它使得...实践中,我们通常会用到如Spring Boot这样的框架来快速构建RESTful服务,同时结合Swagger等工具生成API文档,方便开发者使用。

    Python Flask高级编程之RESTFul API前后端分离精讲第二章节

    Python Flask高级编程之RESTFul API前后端分离精讲第二章节Python Flask高级编程之RESTFul API前后端分离精讲第二章节Python Flask高级编程之RESTFul API前后端分离精讲第二章节Python Flask高级编程之RESTFul API...

    thinkphp6 RESTful API开发

    thinkphp6 RESTful API开发 开发过程记录笔记 https://blog.csdn.net/weixin_41120504/article/details/115638094

    c c++实现http服务 c c++开发restful api服务

    本文将深入探讨如何使用C和C++来实现HTTP服务,并开发RESTful API服务器。 首先,HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超文本到本地浏览器。它是一个基于请求与...

    RestfulApi服务端.zip

    本项目提供了一个RestfulApi服务端的示例,帮助开发者了解如何构建这样的服务。 在RestfulApi服务端的实现中,通常会用到以下技术栈: 1. **服务器框架**:如Spring Boot或Express.js,它们为快速构建RESTful API...

    swagger-ui-master.zip_Swagger favicon.ico_restful_restful api_sw

    Swagger UI 是一个强大的工具,用于展示和测试RESTful API。这个"swagger-ui-master.zip"文件包含的是Swagger UI的源代码,使得开发者能够自定义和集成到自己的项目中,以提供API文档和交互式测试功能。Swagger是...

    RESTful API设计规范

    ### RESTful API设计规范详解 #### 一、RESTful简介 RESTful是一种广泛应用于Web服务的设计风格,全称为Representational State Transfer(表述性状态转移)。它并非一项具体的技术标准,而是一系列设计原则和约束...

    基于 Go 语言构建企业级的 RESTful API 服务 企业级go gin 开发框架 附带源码

    1. 在 RESTful API 中一切实体都被抽象成资源,每个资源有一个唯一的标识 —— URI,所有的行为都应该是在资源上的 CRUD 操作 2. 使用标准的方法来更改资源的状态,常见的操作有:资源的增删改查操作 3. 无状态:...

    RESTFul API 接口说明

    ### RESTful API 接口说明 #### 一、RESTful API 概述 RESTful(Representational State Transfer)API 是一种构建网络应用和服务的标准方法,它遵循特定的约束条件和原则,利用HTTP协议来实现客户端与服务器之间...

    lighttpd restfulapi cgi

    【标题】"lighttpd RESTful API与CGI的整合" 在Web开发中,轻量级HTTP服务器(如lighttpd)因其高效、低资源占用而受到青睐,尤其适合小型和中型项目。RESTful API设计模式是现代Web服务的重要组成部分,它允许通过...

    Python语言开发RESTful API指南

    在当今信息技术飞速发展的时代,RESTful API已经成为构建互联网应用的基础。RESTful API提供了一种简单、高效、与语言无关的方法来构建Web服务。Python作为一种广泛使用的高级编程语言,以其简洁明了的语法、丰富的...

    OPCDA转restfulAPI,opcDA与mes或其它第三方通讯服务

    OPCDA转restfulAPI,opcDA与mes或其它第三方通讯服务 x86

    Spring boot restful api demo

    在`src/main/java`下创建一个新的包,例如`com.example.restfulapi.controller`,然后在此包中创建一个名为`DemoController`的类。使用`@RestController`注解标记该类为REST控制器,使用`@RequestMapping`定义根路径...

Global site tag (gtag.js) - Google Analytics