[MSA Prepare] Spring Cloud Gateway를 이용한 Swagger API 통합 문서 적용하기

·2024년 6월 22일
0

MSA Prepare

목록 보기
19/21
post-thumbnail

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 방식이기 때문에 위와 같이 추가해야한다.

설정하기

  • application.properties
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 설정

  • ApiGateWayConfig.java
@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

  • SwaggerConfig.java
@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");
    }
}
profile
백엔드 개발자가 꿈인 컴공과

0개의 댓글

관련 채용 정보