[Swagger]
개발자들의 API 문서화를 쉽게 할 수 있도록 도와주며, 파라미터를 넣어서 실제로 어떤 응답이 오는지 테스트도 할 수 있습니다.
또한, 협업하는 클라이언트 개발자들에게도 Swagger 만 전달해주면 API Path 와 Request, Response 값 및 제약 등을 한번에 알려줄 수 있습니다.
의존성 추가(build.gradle)
//Swagger UI
implementation 'io.springfox:springfox-boot-starter:3.0.0'
SwaggerConfig 추가
@Configuration
public class SwaggerConfig {
private static final String API_NAME = "Post, Letter, Category API";
private static final String API_VERSION = "0.0.1";
private static final String API_DESCRIPTION = "Post, Letter, Category API 명세서";
@Bean
public Docket commonApi(){
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.devthink.devthink_server.controllers"))
.paths(PathSelectors.any())
.build();
}
public ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(API_NAME)
.version(API_VERSION)
.description(API_DESCRIPTION)
.build();
}
}
- Docket: Swagger 설정의 핵심이 되는 Bean
- apis: api 스펙이 작성되어 있는 패키지 (Controller) 를 지정 가능하다
- paths: apis 에 있는 API 중 특정 path 를 선택
- apiInfo: Swagger UI 로 노출할 정보
apiInfo에 API_NAME, API_VERSION, API_DESCRIPTION을 보여줄수 있다.
필자는 config/SwaggerConfig.class에 저장했습니다.
[컨트롤러 추가]
@GetMapping("/best")
@ApiOperation(value = "베스트 게시글 가져오기",
notes = "사용자로부터 카테고리 id를 받아, 베스트 게시글을 가져옵니다.")
@ApiImplicitParams({
@ApiImplicitParam(name = "categoryId", dataType = "Long", value = "카테고리 아이디")})
public List<PostResponseData> searchBest(@RequestParam Long categoryId){
Category category = categoryService.getCategory(categoryId);
List<Post> bestPost = postService.getBestPost(categoryId);
return getPostList(bestPost);
}
@ApiOperation(value = "이름 설명", notes = "본문 설명")
@ApiImplicitParams({name = "전달 파라미터 이름", dataType = "리턴 타입", value = "파라미터 설명")})
이런식으로 API에 대한 설명을 추가 가능하다.
이렇게 설정한 후
http://localhost:8080/swagger-ui/index.html# 를 접속하면
Rest API를 Swagger를 통해 자동화 가능하다!
'💻 Backend > 스프링' 카테고리의 다른 글
AssertJ 필수 부분 정리 (0) | 2022.02.20 |
---|---|
Spring boot JPA / ModelMapper, Entity -> DTO 변환 (0) | 2022.02.02 |
Spring JPA - 날짜 사이 데이터 가져오기 (LocalDateTime) (0) | 2022.01.29 |
SpringBoot JPA - @ManyToOne 사용하기 (0) | 2022.01.27 |
타임리프 / SpringEL 변수 표현식, 기본 객체들 - 스프링 MVC 2편 (0) | 2022.01.25 |