日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

sentinel 官方文档_SpringCloud网关聚合Swagger接口文档实践

發布時間:2025/4/5 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sentinel 官方文档_SpringCloud网关聚合Swagger接口文档实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目前大多數項目都是以微服務架構設計,以前后端分離技術解耦前端開發工程師和后端開發工程師的工作量,這樣一來前后端的對接將是一項重要的溝通工作量,如果后端沒有一個合適的API文檔,那么這樣的前后端對接將是一項繁瑣的工作。

大多數情況下,開發人員可能會使用在線文檔工具或者離線文檔來描述接口的一些信息。離線文檔存在最大的缺點就是當接口發生變化后,需要對接口文檔進行更新,無形中增加了開發人員的工作量。如果接口文檔更新不及時,那么在前后端對接的過程中將會產生誤差,這樣將會大大增加前后端對接的溝通成本。

目前后端開發中應用到最多的可能是在線文檔生成工具,例如:swagger。當我們的后端接口源代碼發生變更或者重構后能夠及時的生成接口文檔。方便前端開發人員進行對接,減少了后端開發人員編寫接口文檔的工作量,同時也節省了前后端對接過程中溝通成本。

Swagger在線文檔生成工具整合到后端框架中也是比較簡單的,本文將以SpringCloud的微服務架構演示如何將swagger整合到網關服務中。下面詳細介紹下整合的詳細過程:

swagger官方文檔:

https://swagger.io/docs/

分別新建三個微服務其中具體功能如下:

  • 網關服務sentinel-cloud-gateway;
  • 模擬用戶服務nacos-microservice-user;
  • 模擬訂單服務nacos-microservice-order;
  • 一,在pom.xml中引入swagger的依賴:

    io.springfoxspringfox-swagger22.9.2io.springfoxspringfox-swagger-ui2.9.2

    二,分別在兩個微服務nacos-microservice-user和nacos-microservice-order配置swagger:

    @Configuration@EnableSwagger2public class Swagger2Config { @Value("${swagger.enable:true}") private boolean enableSwagger; @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).enable(enableSwagger).select() .apis(RequestHandlerSelectors.basePackage("com.spring.cloud.alibaba.controller")).paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder().title("SprintBoot Swagger2 build API docs") .description("Spring Boot Swagger2 Restful API").contact(new Contact("xiaobaoqiang", "https://github.com/bq-xiao", "xiaobaoqiang@163.com")) .version("1.0").build(); }}

    三,在網關服務中新建SwaggerProvider類實現SwaggerResourcesProvider接口:

    @Primary@Component@Slf4j@AllArgsConstructorpublic class SwaggerProvider implements SwaggerResourcesProvider { public static final String API_URI = "/v2/api-docs"; private final RouteLocator routeLocator; private final GatewayProperties gatewayProperties; @Override public List get() { List resources = new ArrayList<>(); List routes = new ArrayList<>(); //取出gateway的route routeLocator.getRoutes().subscribe(route -> routes.add(route.getId())); //結合配置的route-路徑(Path),和route過濾,只獲取有效的route節點 gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId())) .forEach(routeDefinition -> routeDefinition.getPredicates().stream() .filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName())) .forEach(predicateDefinition -> resources.add(swaggerResource(routeDefinition.getId(), predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0") .replace("/**", API_URI))))); return resources; } private SwaggerResource swaggerResource(String name, String location) { SwaggerResource swaggerResource = new SwaggerResource(); swaggerResource.setName(name); swaggerResource.setLocation(location); swaggerResource.setSwaggerVersion("2.0"); return swaggerResource; }}

    四,在網關服務中新建SwaggerHandler類:

    @RestController@RequestMapping("/swagger-resources")public class SwaggerHandler { @Autowired(required = false) private SecurityConfiguration securityConfiguration; @Autowired(required = false) private UiConfiguration uiConfiguration; private final SwaggerResourcesProvider swaggerResources; @Autowired public SwaggerHandler(SwaggerResourcesProvider swaggerResources) { this.swaggerResources = swaggerResources; } @GetMapping("/configuration/security") public Mono> securityConfiguration() { return Mono.just(new ResponseEntity<>( Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK)); } @GetMapping("/configuration/ui") public Mono> uiConfiguration() { return Mono.just(new ResponseEntity<>( Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK)); } @GetMapping("") public Mono swaggerResources() { return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK))); }}

    五,SpringCloud后端微服務路由application.yml配置如下:

    spring: application: name: sentinel-cloud-gateway cloud: sentinel: transport: dashboard: localhost:8090 eager: true enabled: true nacos: discovery: server-addr: localhost:8848 gateway: enabled: true discovery: locator: lower-case-service-id: true routes: - id: nacos-microservice-order uri: lb://nacos-microservice-order predicates: - Path=/order/** filters: - StripPrefix=1 #從前面截取一個,實際上就是截取url - id: nacos-microservice-user uri: lb://nacos-microservice-user predicates: - Path=/user/** filters: - StripPrefix=1 #從前面截取一個,實際上就是截取url

    StripPrefix:從前面截取一個,實際上就是截取url,不然從網關訪問聚合swagger會報404錯誤信息。


    六,驗證

    分別啟動SpringCloud后端的兩個微服務nacos-microservice-order和nacos-microservice-user,分別訪問單個微服務的swagger接口文檔

    驗證結果

    然后啟動sentinel-cloud-gateway網關服務:

    驗證結果

    可以看到,在微服務的網關服務中聚合了swagger接口文檔,當后端某個微服務代碼發生變更或者代碼重構后,swagger接口文檔就會實時更新,而且方便測試后端的微服務接口。

    不積跬步,無以至千里;不積小流,無以成江海!

    總結

    以上是生活随笔為你收集整理的sentinel 官方文档_SpringCloud网关聚合Swagger接口文档实践的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。