Rest Api 애플리케이션 개발에 있어 API 스펙에 대한 문서작업은 적지 않은 시간을 요구합니다.
또한 운영을 하게 되면서 지속적으로 문서를 업데이트하는 것 또한 많은 리소스가 필요합니다.
이러한 시간을 단축시키기 위해 문서 자동화 프레임 워크를 이용하는 방법이 있습니다.
대표적으로 Swagger, Spring REST Docs가 있는데 그중 Swagger 적용 방법에 대해 알아보겠습니다.
1. Dependency 설정
Maven
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
Gradle
// https://mvnrepository.com/artifact/io.springfox/springfox-swagger2
compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
// https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui
compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'
2. SwaggerConfig
@EnableSwagger2 어노테이션을 추가하여 Swagger 관련된 설정을 추가합니다.
package kr.co.sample.sampleapi.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
private ApiInfo commonInfo() {
return new ApiInfoBuilder()
.title("USER API")
//.description("")
//.license("leeys")
//.licenseUrl("http://leeys.tistory.com")
.version("1.0")
.build();
}
@Bean
public Docket allApi() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("USER")
.useDefaultResponseMessages(false)
.select()
//.apis(RequestHandlerSelectors.any())
.apis(RequestHandlerSelectors.basePackage("kr.co.sample.sampleapi.controller"))
.paths(PathSelectors.any())
.build()
.apiInfo(commonInfo());
}
}
3. Swagger 어노테이션 적용
이제 Swagger 사용을 위한 설정은 완료되었고 Controller에 해당 API에 대한 내용을 Swagger 어노테이션을 사용하여 작성해주면 자동으로 추가됩니다.
추가 어노테이션 정보는 Swagger GitHub 에서 확인 가능합니다.
어노테이션 | 설명 |
@Api | 클래스를 Swagger 리소스 대상으로 표시 |
@ApiOperation | 요청 URL 에 매핑된 API 에 대한 설명 |
@ApiParam | 요청 Parameter에 대한 설명 및 필수여부, 예제값 설정 |
@ApiResponse | 응답에 대한 설명 |
Controller
package kr.co.sample.sampleapi.controller;
import io.swagger.annotations.ApiOperation;
import kr.co.sample.sampleapi.entity.User;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
@RestController
public class TestController {
@ApiOperation(value = "사용자 정보 조회", notes = "UserId를 이용하여 사용자 정보를 조회합니다.")
@GetMapping(value = "/users/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public Object findUser(
@ApiParam(value = "user id", required = true, example = "1")
@PathVariable(value = "id", required = true) String id,
@ApiParam(value = "User Agent Type ", required = true, example = "Mozila")
@RequestHeader(value = "User-Agent") String userAgent,
@ApiParam(value = "parameter1 ", required = false)
@RequestParam(value = "param1", required = false) String param1,
@ApiParam(value = "parameter2 ", required = false)
@RequestParam(value = "param2", required = false) String param2){
return true;
}
@ApiOperation(value = "사용자 리스트 조회", notes = "특정 조건에 맞는 사용자 리스트를 조회합니다.")
@GetMapping(value = "/users", produces = MediaType.APPLICATION_JSON_VALUE)
public Object findUsers(
@RequestHeader(value = "User-Agent") String userAgent,
@ModelAttribute User user){
return true;
}
@ApiOperation(value = "사용자 생성", notes = "신규 사용자를 생성합니다.")
@PostMapping(value = "/users", produces = MediaType.APPLICATION_JSON_VALUE)
public Object CreateUser(
@RequestHeader(value = "User-Agent") String userAgent,
@RequestBody(required = true) User user){
return true;
}
}
User Model
package kr.co.sample.sampleapi.entity;
import io.swagger.annotations.ApiParam;
import lombok.Data;
@Data
public class User {
@ApiParam(value = "사용자 이름", required = false, example = "홍길동")
private String userName;
@ApiParam(value = "휴대폰 번호", required = false, example = "010-0000-0000")
private String phoneNumber;
}
http://localhost:8080/swagger-ui.html 로 접속하여 추가된 API를 확인합니다.
'Spring' 카테고리의 다른 글
[Spring Boot] Rest API 만들기(5) 비동기 예외 처리 (0) | 2021.01.26 |
---|---|
[Spring Boot] Rest API 만들기(4) 예외 처리 @RestControllerAdvice (2) | 2021.01.23 |
[Spring Boot] Rest API 만들기(2) Controller 구현 (0) | 2021.01.12 |
[Spring Boot] Rest API 만들기(1)- 프로젝트 생성 intellij(Community) + JPA (0) | 2019.11.19 |