我在项目中有上述架构。产品,订单,支付微服务是一个Rest API,目前有swagger集成,但现在流程发生了变化,我不能暴露微服务Rest API,现在所有的REST API调用都是从API网关进行的。
是否有任何方法可以通过API网关以swagger形式记录API,或者对于这种情况,最佳做法是什么?
这是API网关Sping Boot 中的路由配置
@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.path("/order/**")
.filters(f -> f.hystrix(option -> option.setName("order-service").
setFallbackUri("forward:/orderFallBack")))
.uri("lb://ORDER-SERVICE")
.id("order-service"))
.route(r -> r.path("/payment/**")
.filters(f -> f.hystrix(option -> option.setName("payment-service")
.setFallbackUri("forward:/paymentFallBack")))
.uri("lb://PAYMENT-SERVICE")
.id("payment-service"))
.route(r -> r.path("/product/**")
.filters(f -> f.hystrix(option -> option.setName("product-service")
.setFallbackUri("forward:/productFallBack")))
.uri("lb://PRODUCT-SERVICE")
.id("product-service"))
.build();
}
订单微服务项目中的Swagger配置
@Configuration
public class SwaggerConfiguration {
@Bean
public Docket orderApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.paths(PathSelectors.any())
.build()
.apiInfo(getApiInfo());
}
//create api metadata that goes at the top of the generated page
private ApiInfo getApiInfo() {
return new ApiInfoBuilder()
.title("Fete Bird Order Microservice")
.version("1.0")
.description("API for managing Fete Bird Order Microservice.")
.license("Fete Bird License Version 1.0")
.build();
}
}
2条答案
按热度按时间wgx48brx1#
有一种常见的做法是从网关本身提供单独的swagger端点。我在许多生产级项目中看到过这样做。
例如,对于订单服务,文档将位于:
http://gateway-url/order-service/swagger-ui.html
其他微服务也可以采用类似的方法。
busg9geu2#
请确保在您的服务中具有以下依赖项:产品、支付、订单和API网关:
在您的所有服务中添加
@EnableSwagger2
注解。在你的API网关项目中添加zuul代理依赖项。这将把流量从api-gateway swagger路由到你的其他服务。
在api-gateway中添加
@EnableZuulProxy
注解。然后,将此配置放入api-gateway中,一切都将正常工作。
}
当你登陆你的API网关页面时,在右上方你会看到一个产品、支付和订单服务的选择选项。选择其中任何一个,然后尝试使用API。