简介:

Swagger:

Swagger(Swagger 2)是用于描述和记录REST API的规范。它指定了REST Web服务的格式,包括URL,资源,方法等。Swagger将从应用程序代码生成文档并处理渲染部分。

Springfox提供了两个依赖关系来生成API Doc和Swagger UI。如果不希望将Swagger UI集成到您的API级别中,则无需添加Swagger UI依赖项。

Restful:

Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

Restful使用HTTP,URI,XML,JSON,HTML等广泛流行的标准和协议;轻量级,跨平台,跨语言的架构设计;

URI: /资源名称/资源标识 HTTP请求方式区分对资源CRUD操作

普通CRUD(uri来区分操作) RestfulCRUD
查询 getEmp emp—GET
添加 addEmp?xxx emp—POST
修改 updateEmp?id=xxx&xxx=xx emp/{id}—PUT
删除 deleteEmp?id=1 emp/{id}—DELETE

配置:

Swagger2:

要在项目中使用Swagger2,则需要添加以下依赖:

 <!--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>

还需要在SpringBoot的启动类上添加注解:

@EnableSwagger2
@SpringBootApplication
public class SpringbootRestApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootRestApplication.class, args);
	}
}

开发:

pom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.jayway.jsonpath</groupId>
        <artifactId>json-path</artifactId>
        <scope>test</scope>
    </dependency>
    <!--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>
</dependencies>

greeting:

@Data
public class Greeting {
	private final long id;
	private final String content;
}

GreetingController:

@Api(value = "GreetingController",tags = "Controller")
@RestController
public class GreetingController {

	private static final String template = "Hello, %s!";
	private final AtomicLong counter = new AtomicLong();


	@ApiOperation(value = "测试Rest",notes = "Rest")
	@ApiImplicitParams({
			@ApiImplicitParam(paramType ="query",name ="name",dataType = "String",required = true,value = "Rest",defaultValue = "Rest")
	})
	@ApiResponses({
			@ApiResponse(code = 400,message = "请求参数填写错误"),
			@ApiResponse(code = 404,message = "请求路径错误")
	})
	@RequestMapping("/greeting")
	public Greeting greeting(@RequestParam(value="name", defaultValue="Rest") String name) {
		return new Greeting(counter.incrementAndGet(),
				String.format(template, name));
	}
}

Swagger注解的使用:

- **@Api()**用于类;  表示标识这个类是swagger的资源 
- **@ApiOperation()**用于方法;  表示一个http请求的操作
- **@ApiParam()**用于方法,参数,字段说明;  表示对参数的添加元数据(说明或是否必填等) 
- **@ApiModel()**用于类  表示对类进行说明,用于参数用实体类接收
- **@ApiModelProperty()**用于方法,字段  表示对model属性的说明或者数据操作更改
- **@ApiIgnore()**用于类,方法,方法参数  表示这个方法或者类被忽略 
@ApiImplicitParam() 用于方法  表示单独的请求参数 
@ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam