Swagger

qkrrnjswo·2023년 5월 11일
0

공부 정리

목록 보기
3/24

1. Swagger?

  • Swagger 는 REST API를 설계, 빌드, 문서화 및 사용하는 데 도움이되는 OpenAPI 사양을 중심으로 구축 된 오픈 소스 도구 세트.
  • postMan + API명세서 같은 느낌이다.

2. 사용 버젼

  • spring boot 3.0.6

  • springdoc-openapi v2.1.0

  • springfox는 최신화를 안하고 있기 때문에 spring boot 3.0.6에서 사용이 안됨

dependencies

implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0'

3. SwaggerConfig

@Configuration
public class SwaggerConfig {

    @Bean
    public GroupedOpenApi publicApi() { //경로 설정, 여러개 만들 수 있음
        return GroupedOpenApi.builder()
                .group("myApp")
                .pathsToMatch("/**")
                .build();
    }

    @Bean
    public OpenAPI MyOpenApi() {
        return new OpenAPI()
                .info(new Info().title("SongGPT")
                        .description("미니프로젝트 API 명세서입니다.")
                        .version("v2.1.0")
                        .license(new License().name("Apache 2.0").url("http://springdoc.org")));
    }


}

4. 상세 설정 적용

https://jeonyoungho.github.io/posts/Open-API-3.0-Swagger-v3-%EC%83%81%EC%84%B8%EC%84%A4%EC%A0%95/


5. Spring Security (jwt) 적용

  • config

public OpenAPI springShopOpenAPI() {
    return new OpenAPI()
            .info(new Info().title("SongGPT")
                    .description("미니프로젝트 API 명세서입니다.")
                    .version("v2.1.0")
                    .license(new License().name("Apache 2.0").url("http://springdoc.org")))
            .components(new Components()
                    .addSecuritySchemes("Access_Token",new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT"))
                    .addSecuritySchemes("Refresh_Token",new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT")));
}
  • SecurityFilterChain 설정

//swagger 부분 열어두기
.requestMatchers("/swagger*/**", "/v3/api-docs/**").permitAll()
  • 메서드에 적용

@RequiredArgsConstructor
@RequestMapping("/member")
public class MemberController {
    private final MemberService memberService;

    @Operation(summary = "get member", description = "회원 정보 조회",
            security = { @SecurityRequirement(name = "Access_Token"),  @SecurityRequirement(name = "Refresh_Token")})
    @GetMapping
    public ResponseDto<MemberResponseDto> getMember(HttpServletRequest request) {
        return memberService.getMember(request);
    }
}

7. 기타 정보

https://springdoc.org/v2/

0개의 댓글