What is?
- API들은 REST 방식을 이용하여 호출한다.
- 각 서비스별로 Swagger를 적용하여서 문서화 하였다.
- Gateway를 활용해서 통합 문서를 사용하자
In Gateway
dependencies
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.springdoc:springdoc-openapi-starter-webflux-ui:2.4.0'
}
- Gateway는 webflux 방식이기 때문에 위와 같이 추가해야한다.
설정하기
springdoc.swagger-ui.use-root-path=true
springdoc.swagger-ui.urls[0].name=securities-service
springdoc.swagger-ui.urls[0].url=http://localhost:8765/api/securities-service/v3/api-docs
- springdoc.swagger-ui.use-root-path: 루트 접근 시 swagger 페이지로 이동한다.
- springdoc.swagger-ui.urls[0].name: 서비스 이름 지정
- springdoc.swagger-ui.urls[0].url: 서비스의 정보 URL
Gateway 설정
@Configuration
public class ApiGateWayConfig {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeBuilder) {
return routeBuilder.routes()
.route("securities-service-openapi", r -> {
return r.path("/api/securities-service/v3/api-docs/**")
.filters(f -> f.rewritePath(
"/api/securities-service/(?<path>.*)", "/${path}"))
.uri("lb://SECURITIES-SERVICE");
})
.route("securities-service", r -> {
return r.path("/stockprice/**", "/stockinfo/**")
.uri("lb://SECURITIES-SERVICE");
})
.build();
}
}
- 위의 라우터는 사용자의 요청을 문서에 접근하게 하기 위해서
- 밑의 라우터는 사용자의 API 호출을 처리하기 위해서
Client
Swagger config
@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI openAPI() {
return new OpenAPI()
.components(new Components())
.addServersItem(new Server().url("/"))
.info(apiInfo());
}
private Info apiInfo() {
return new Info()
.title("Securities service")
.description("Stock information service")
.version("1.0.0");
}
}