Swagger: Rest API를 자동으로 문서화하여 API 호출 및 테스트 과정을 편리하게 해준다
implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'
implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
Docket
: Swagger 프레임워크의 핵심 인터페이스로 쓰이는 Java 객체이자 builder
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.useDefaultResponseMessages(false)
.groupName(API_VERSION)
.select()
.apis(RequestHandlerSelectors.basePackage("패키지명"))
.paths(PathSelectors.ant("/**/"))
.build()
.apiInfo(metaData())
.securityContexts(Arrays.asList(securityContext()))
.securitySchemes(Arrays.asList(apiKey()));
}
useDefaultResponseMessages(boolean)
- Swagger에서 제공하는 응답코드(200, 401, 403, 404)에 대한 기분 메시지 사용 여부groupName(API_VERSION)
- 여러 Docket Bean 생성시 충돌을 막기 위해 버전 명시select()
- ApiSelectorBuilder 생성apis(RequestHandlerSelectors.basePackage("패키지명"))
- api 스펙이 작성된 패키지 명시paths(PathSelectors.ant("/**/"))
- path 조건에 해당하는 api를 찾아 문서화apiInfo(api_info_custom_method())
- 제목, 설명 등 문서 정보 호출securityContexts(Arrays.asList(securityContext()))
- api 작업에 사용할 기본 인증 방식 목록securitySchemes(Arrays.asList(apiKey()))
- Swagger에서 사용할 api 인증 방식 목록private SecurityContext securityContext() {
return SecurityContext
.builder()
.securityReferences(defaultAuth())
.build();
}
private List<SecurityReferences> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Arrays.asList(new SecurityReference("JWT", authorizationScopes));
}
전역 authorization scope을 사용한다
ApiKey
- Swagger 내 인증방식으로 JWT, Bearer, Authorization이 존재한다
private ApiKey apiKey() {
return new ApiKey("JWT", "Authorization", "header");
}
@Configuration
@EnableSwagger2 //Swagger2 버전 활성화
public class SwaggerConfig {
private static final String API_NAME = "api name";
private static final String API_VERSION = "0.0.1";
private static final String API_DESCRIPTION = "api description";
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.useDefaultResponseMessages(false)
.groupName(API_VERSION)
.select()
.apis(RequestHandlerSelectors.basePackage("패키지명"))
.paths(PathSelectors.ant("/**/"))
.build()
.apiInfo(metaData())
.securityContexts(Arrays.asList(securityContext()))
.securitySchemes(Arrays.asList(apiKey()));
}
private ApiInfo metaData() {
return new ApiInfoBuilder
.title("제목")
.description("설명")
.version("0.0.1")
.termsOfServiceUrl("Terms of service")
.license("Apache License Version 2.0")
.licenseUrl("https://www.apache.org/licenses/LICENSE-2.0")
.build();
}
}
Authorization 페이지에서 토큰 입력 후 Authorize > HTTP 헤더에 토큰이 자동 포함됨
토큰 입력은 Bearer + 로그인 api 실행 결과로 받는 토큰 값
을 입력
참고:
https://velog.io/@minwest/Spring-Swagger-%EC%82%AC%EC%9A%A9%EB%B2%95
https://velog.io/@u-nij/Spring-Boot-Swagger-3.0-%EC%84%A4%EC%A0%95-JWT-%EC%9D%B8%EC%A6%9D-%EC%84%A4%EC%A0%95-Profile%EB%A1%9C-%ED%99%98%EA%B2%BD%EB%B3%84-%EC%84%A4%EC%A0%95