Search
Duplicate
📝

[Spring Study] xx-1. Swagger - API문서 자동화

상태
수정중
수업
Spring Study
주제
기본개념
4 more properties
참고

Swagger란 무엇인가?

NOTE
Swagger ⇒ 서버로 요청되는 URL 리스트를 HTML화면으로 문서화 및 테스트 할 수 있는 라이브러리이다.
간단하게 이야기하자면 Swagger는 API Spec 문서이다.
API를 엑셀이나, 가이드 문서를 통해 관리하는건 주기적인 업데이트가 필요하기 떄문에 관리가 쉽지 않고 시간이 오래걸린다.

build.gradle 추가

NOTE
// 스프링 3.x 이상 implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' // 스프링 3.x 미만 implementation 'io.springfox:springfox-boot-starter:3.0.0' implementation 'io.springfox:springfox-swagger-ui:3.0.0'
Groovy
복사
스프링 부트 3 이상부터는 springdoc-openapi-ut를 사용해야 한다!
스프링 부트가 2.x버전이라도 왠만하면 springdoc-openapi-ui를 사용하는걸 권장한다.
springfox는 2020년 7월기준으로 업데이트를 멈추었기 때문
@Configuration을 하지 않아도 자동으로 생성된다!

SwaggerConfig - Annotaion

NOTE
@OpenAPIDefinition( servers = @Server(url = "https://wantedonboarding.duckdns.org/"), info = @Info(title = "Couple App", description = "couple app api명세", version = "v1"), security = @SecurityRequirement(name = "Bearer")) @SecurityScheme( name = "Bearer", type = SecuritySchemeType.HTTP, scheme = "bearer", bearerFormat = "JWT", in = SecuritySchemeIn.HEADER, paramName = "Authorization" ) @RequiredArgsConstructor @Configuration public class SwaggerConfig { @Bean public GroupedOpenApi chatOpenApi() { String[] paths = {"/**"}; return GroupedOpenApi.builder() .group("COUPLE API v1") // 스웨거 그룹이름 .pathsToMatch(paths) // 스웨거 적용 API 경로 .build(); } }
Java
복사
배포서버 https의 경로를 테스트하기 위한 설정
구버전 코드
실제 사용가능한 Annotation 종류
@OpenAPiDefinition
server
API 서버의 URL 설정
info
API의 기본 정보를 설명한다.
security
API의 보안 요구 사항을 정의한다.
@SecurityScheme
name
보안 체계의 이름
type
보안 체계의 유형(ex HTTP, OAuth2, API Key ..)
scheme
보안 체계의 구조 (ex bearer)
in
보안 파라미터가 어디에 위치하는가?
paramName
보안 파라미터의 이름

Controller - Annotations

NOTE
@Tag(name = "회원가입/로그인 API") @RestController @RequestMapping("/auth") // ... public class AuthController { private final AuthService authService; @Operation(summary = "회원가입") @PostMapping("/signup") public ResponseEntity<?> authSignUp(@Valid @RequestBody SignUpRequest signUpRequest) {}
Java
복사
컨트롤러에서 정보를 추가할 수도 있음!