国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Cloud Gateway集成聚合型Spring Boot API發(fā)布組件knife4j,增強(qiáng)Swagger

這篇具有很好參考價(jià)值的文章主要介紹了Spring Cloud Gateway集成聚合型Spring Boot API發(fā)布組件knife4j,增強(qiáng)Swagger。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

大家都知道,在前后端分離開(kāi)發(fā)的時(shí)代,前后端接口對(duì)接是一項(xiàng)必不可少的工作。

可是,為后端開(kāi)發(fā),怎么和前端更好的配合,才能讓自己不心累、腦累,直接扔給前端一個(gè)后端開(kāi)放api接口文檔或者頁(yè)面,讓前端不用看著難受,也不用前端老問(wèn)你,來(lái)愉快的合作呢?

原來(lái)可能我們一直用的是Swagger,不得不說(shuō)Swagger是一個(gè)非常好的框架,自從它的出現(xiàn),大大減少了我們對(duì)接的繁重工作。(以前我們開(kāi)發(fā)可是經(jīng)常要寫(xiě)開(kāi)發(fā)接口文檔的)

可是我們?cè)谟肧wagger時(shí),不管是Swagger本身,還是SwaggerUI,用起來(lái)其實(shí)不是那么的便捷,尤其是SwaggerUI,反正我用起來(lái)真的很是難受,也許是因?yàn)樗皇俏覀儑?guó)人開(kāi)發(fā)的,所以操作方面根本沒(méi)有我們國(guó)人的操作習(xí)慣設(shè)計(jì)。

幸好啊,我們國(guó)人也是很厲害的。

Knife4j這個(gè)東東,簡(jiǎn)直是及時(shí)雨,用起來(lái)絲滑的很??纯此慕缑妫遣皇蔷褪菄?guó)人的思維設(shè)計(jì)?

Spring Cloud Gateway集成聚合型Spring Boot API發(fā)布組件knife4j,增強(qiáng)Swagger,spring boot,后端,java

有了這個(gè)東東,那么我們來(lái)研究一下,怎么讓他來(lái)集成我們的Gateway,那么如何實(shí)現(xiàn)Gateway,可以查看我的上一篇文章。

輕量級(jí)的Spring Cloud Gateway實(shí)踐,實(shí)現(xiàn)api和websocket轉(zhuǎn)發(fā)https://blog.csdn.net/t610654893/article/details/137783310?spm=1001.2014.3001.5501

那么,我在這個(gè)項(xiàng)目基礎(chǔ)上,實(shí)現(xiàn)Knife4j的集成實(shí)現(xiàn)。

首先,我來(lái)說(shuō)一下我的整體項(xiàng)目結(jié)構(gòu):

--- 倆個(gè)主要的Spring Boot名
【app-server】前端接口服務(wù)
【manager-server】后端管理平臺(tái)服務(wù)器接口
--- 微服網(wǎng)關(guān)、配置等平臺(tái)服務(wù)
【cloud-server】
---【gateway-starter】路由套件 
---?等等
【common-server】公共starter目錄的服務(wù)
---【boot-starter】公共套件?
---?等等

好,那么我們先從gateway著手來(lái)實(shí)現(xiàn)。首先pom.xml內(nèi)引入:

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

在Gateway項(xiàng)目?jī)?nèi),新增一個(gè)類(lèi)集成SwaggerResourcesProvider來(lái)配置SwaggerProvider,獲取Api-doc!

/**
 * <b>功能:</b>SWAGGER聚合服務(wù)<br>
 */
@Slf4j
@Component
@Primary
@AllArgsConstructor
public class SwaggerResourceConfig implements SwaggerResourcesProvider {

    @Resource
    private Environment env;

    private final RouteLocator routeLocator;
    private final GatewayProperties gatewayProperties;


    @Override
    public List<SwaggerResource> get() {
        List<SwaggerResource> resources = new ArrayList<>();
        List<String> routes = new ArrayList<>();
        routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));
        gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId())).forEach(route -> {
            route.getPredicates().stream()
                    .filter(predicateDefinition ->
                            ("Path").equalsIgnoreCase(predicateDefinition.getName()))
                    .forEach(predicateDefinition ->
                            resources.add(swaggerResource(route.getId(),
                                    predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("**", "v3/api-docs"))));
        });

        return resources;
    }

    private SwaggerResource swaggerResource(String name, String location) {
        log.info("name:{},location:{}", name, location);
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName(env.getProperty(name));
????????swaggerResource.setLocation(location?+?"?group=KN");
        swaggerResource.setSwaggerVersion("3.0.3");
        return swaggerResource;
    }
}

?????為了能更好的實(shí)現(xiàn)界面的客觀(guān)性,我們這里寫(xiě)了一個(gè)swaggerResource的方法,此方法主要是為了能更好的表達(dá)我們的Api接口是屬于誰(shuí)的。比如說(shuō)我們?cè)贕ateway的配置內(nèi)配置了:routes[0].id=lb://app-server, 那么我們?cè)谂渲煤笤偌右粋€(gè)app-server=分組接口,那么在Knife4j內(nèi)就可以更直觀(guān)的選擇屬于app-server的項(xiàng)目API了。

Spring Cloud Gateway集成聚合型Spring Boot API發(fā)布組件knife4j,增強(qiáng)Swagger,spring boot,后端,java

我們這里主要還是你為了集成Swagger的內(nèi)容,來(lái)完成Knife4j的前段實(shí)現(xiàn)。

因?yàn)镚ateway里沒(méi)有配置SwaggerConfig,而運(yùn)行Swagger-ui又需要依賴(lài)一些接口,所以我們還需要自己來(lái)實(shí)現(xiàn)swagger-resource端點(diǎn)。

這里其實(shí)也很簡(jiǎn)單,我們?cè)傩陆ㄒ粋€(gè)類(lèi),來(lái)完成我們對(duì)swagger-resource的實(shí)現(xiàn)。

/**
 * <b>功能:</b>SWAGGER聚合服務(wù)<br>
 */
@RestController
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("/swagger-resources/configuration/security")
    public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {
        return Mono.just(new ResponseEntity<>(
                Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK));
    }

    @GetMapping("/swagger-resources/configuration/ui")
    public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {
        return Mono.just(new ResponseEntity<>(
                Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));
    }

    @GetMapping("/swagger-resources")
    public Mono<ResponseEntity> swaggerResources() {
        return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
    }

    @GetMapping("/api")
    @SentinelResource("api")
    public Set<ApiDefinition> apiRules() {
        return GatewayApiDefinitionManager.getApiDefinitions();
    }

    @GetMapping("/gateway")
    @SentinelResource("gateway")
    public Set<GatewayFlowRule> apiGateway() {
        return GatewayRuleManager.getRules();
    }

    @GetMapping("/flow")
    @SentinelResource("flow")
    public List<FlowRule> apiFlow() {
        return FlowRuleManager.getRules();
    }
}

Gateway端接口已經(jīng)配置完成。接下來(lái)配置實(shí)現(xiàn)客戶(hù)端,由于我的工程倆個(gè)server都引入了boot-server,所以這里我只在boot-server內(nèi)實(shí)現(xiàn)即可。

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-micro-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

客戶(hù)端服務(wù)基本也就是按照Swagger的配置寫(xiě)config即可。這樣更加方便我們以Swagger為基礎(chǔ)更增強(qiáng)我們的api接口發(fā)布。為了更詳盡的使用,我們一一實(shí)現(xiàn)。

增加Swagger 配置類(lèi)

@EnableOpenApi
@Configuration
@EnableConfigurationProperties(value = {SwaggerProperties.class})
public class SwaggerConfiguration {

  @Resource
  private SwaggerProperties swaggerProperties;

  @Bean
  public Docket createRestApi() {
      Boolean enable = swaggerProperties.getEnable();
      String tryHost = swaggerProperties.getTryHost();
      return new Docket(DocumentationType.OAS_30)
              .groupName("KN")
              // 定義是否開(kāi)啟swagger,false為關(guān)閉,可以通過(guò)變量控制
              .enable(enable)
              // 將api的元信息設(shè)置為包含在json ResourceListing響應(yīng)中。
              .apiInfo(apiInfo())
              // 接口調(diào)試地址
              .host(tryHost)
              // 選擇哪些接口作為swagger的doc發(fā)布
              .select()
              .apis(RequestHandlerSelectors.any())
              .paths(PathSelectors.regex("/api/.*"))
              .build();
?}


  /**
   * <b>功能描述:</b>API 頁(yè)面上半部分展示信息<br>
   * <b>修訂記錄:</b><br>
   * <li>20201225&nbsp;&nbsp;|&nbsp;&nbsp;田星亮&nbsp;&nbsp;|&nbsp;&nbsp;創(chuàng)建方法</li><br>
   */
  private ApiInfo apiInfo() {
      return new ApiInfoBuilder()
              .title(swaggerProperties.getApplicationName())
              .description(swaggerProperties.getApplicationDescription())
              .termsOfServiceUrl("https://www.kn.com/")
              .contact(new Contact("KN", null, "admin@kn.com"))
              .version(swaggerProperties.getApplicationVersion())
              .build();
  }
}

???????這里我們?cè)僭鰪?qiáng)一下,使我們的接口更符合api接口規(guī)范,給API頭增加名為T(mén)oken的頭,在createRestApi方法Docket實(shí)現(xiàn)內(nèi)增加倆個(gè)方法后綴,并付上實(shí)現(xiàn):

.build()
// 授權(quán)信息設(shè)置,必要的header token等認(rèn)證信息
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
 /**
   * <b>功能描述:</b>設(shè)置授權(quán)信息<br>
   */
  private List<SecurityScheme> securitySchemes() {
      return Collections.singletonList(new ApiKey("token", "token", In.HEADER.toValue()));
  }


  /**
   * <b>功能描述:</b>授權(quán)信息全局應(yīng)用<br>
   */
  private List<SecurityContext> securityContexts() {
      return Collections.singletonList(
              SecurityContext.builder()
                      .securityReferences(Collections.singletonList(new SecurityReference("token", new AuthorizationScope[]{new AuthorizationScope("global", "")})))
                      .build()
      );
  }

???????上方內(nèi)配置項(xiàng)詳解,完成靈活調(diào)用

@Data
@ConfigurationProperties("swagger")
public class SwaggerProperties {

    /**
     * 是否開(kāi)啟swagger,生產(chǎn)環(huán)境一般關(guān)閉,所以這里定義一個(gè)變量
     */
    private Boolean enable;

    /**
     * 項(xiàng)目應(yīng)用名
     */
    private String applicationName;

    /**
     * 項(xiàng)目版本信息
     */
    private String applicationVersion;

    /**
     * 項(xiàng)目描述信息
     */
    private String applicationDescription;

    /**
     * 接口調(diào)試地址
     */
    private String tryHost;
}

至此,我們配置完成,打開(kāi)Gateway所屬的端口鏈接即可完成Knife4j的訪(fǎng)問(wèn)。Knife4j的配置內(nèi)還有一些高級(jí)項(xiàng)配置,大家按照自己需要增強(qiáng)哦,比如說(shuō)api排序這個(gè)我就很喜歡。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-855402.html

到了這里,關(guān)于Spring Cloud Gateway集成聚合型Spring Boot API發(fā)布組件knife4j,增強(qiáng)Swagger的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring Cloud Gateway實(shí)現(xiàn)灰度發(fā)布功能

    Spring Cloud Gateway實(shí)現(xiàn)灰度發(fā)布功能

    灰度發(fā)布又名金絲雀發(fā)布,在微服務(wù)中的表現(xiàn)為同一服務(wù)同時(shí)上線(xiàn)不同版本,讓一部分用戶(hù)使用新版本來(lái)驗(yàn)證新特性,如果驗(yàn)證沒(méi)有問(wèn)題,則將所有用戶(hù)都遷移到新版本上。 在微服務(wù)架構(gòu)中,網(wǎng)關(guān)負(fù)責(zé)請(qǐng)求的統(tǒng)一入口,主要功能之一是請(qǐng)求路由。而灰度發(fā)布實(shí)質(zhì)就是讓指定用

    2024年02月21日
    瀏覽(26)
  • 第十章 : Spring cloud 網(wǎng)關(guān)中心 Gateway (灰度發(fā)布)

    第十章 : Spring cloud 網(wǎng)關(guān)中心 Gateway (灰度發(fā)布)

    第十章 : Spring cloud 網(wǎng)關(guān)中心 Gateway (灰度發(fā)布) 前言 本章知識(shí)點(diǎn):介紹了常用版本發(fā)布的方式:藍(lán)綠發(fā)布,滾動(dòng)發(fā)布以及金絲雀發(fā)布,并對(duì)比了各個(gè)發(fā)布方式的優(yōu)劣勢(shì),重點(diǎn)闡述了如何通過(guò)Spring cloud 網(wǎng)關(guān)中心 Gateway 基于nacos 注冊(cè)中心與配置中心的前提條件下,實(shí)現(xiàn)網(wǎng)關(guān)灰

    2024年01月17日
    瀏覽(25)
  • Spring Cloud Gateway集成Nacos實(shí)現(xiàn)負(fù)載均衡

    Spring Cloud Gateway集成Nacos實(shí)現(xiàn)負(fù)載均衡

    ??Nacas可以用于實(shí)現(xiàn)Spring Cloud Gateway中網(wǎng)關(guān)動(dòng)態(tài)路由功能,也可以基于Nacos來(lái)實(shí)現(xiàn)對(duì)后端服務(wù)的負(fù)載均衡,前者利用Nacos配置中心功能,后者利用Nacos服務(wù)注冊(cè)功能。 接下來(lái)我們來(lái)看下Gateway集成Nacos實(shí)現(xiàn)負(fù)載均衡的架構(gòu)圖 一. 環(huán)境準(zhǔn)備 1. 版本環(huán)境 Jdk: java.version1.8/java.version Spr

    2024年02月10日
    瀏覽(98)
  • Spring Cloud之API網(wǎng)關(guān)(Gateway)

    Spring Cloud之API網(wǎng)關(guān)(Gateway)

    目錄 API網(wǎng)關(guān) 好處 解決方案 Gateway 簡(jiǎn)介 特征 核心概念 Route(路由) Predicate(斷言) Filter(過(guò)濾器) 工作流程 Route(路由) 路由配置方式 1.yml配置文件路由 2.bean進(jìn)行配置 3.動(dòng)態(tài)路由 動(dòng)態(tài)路由 Predicate(斷言) 特點(diǎn) 常見(jiàn)斷言 示例 Filter(過(guò)濾器) filter分類(lèi) Pre 類(lèi)型 Post 類(lèi)型 網(wǎng)關(guān)過(guò)濾器 格式

    2024年02月08日
    瀏覽(31)
  • Spring Cloud Gateway 網(wǎng)關(guān)整合 Knife4j 4.3 實(shí)現(xiàn)微服務(wù)接口文檔聚合

    Spring Cloud Gateway 網(wǎng)關(guān)整合 Knife4j 4.3 實(shí)現(xiàn)微服務(wù)接口文檔聚合

    ?? 作者主頁(yè): 有來(lái)技術(shù) ?? 開(kāi)源項(xiàng)目: youlai-mall ?? vue3-element-admin ?? youlai-boot ?? 倉(cāng)庫(kù)主頁(yè): Gitee ?? Github ?? GitCode ?? 歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請(qǐng)糾正! youlai-mall 開(kāi)源微服務(wù)商城新版本基于 Spring Boot 3 和 Java 17,同時(shí)采用 Knife4j 4.3。與以前版本不同的是

    2024年02月05日
    瀏覽(23)
  • Spring Cloud Gateway集成sentinel進(jìn)行網(wǎng)關(guān)限流

    本文使用版本如下:

    2024年02月09日
    瀏覽(21)
  • Spring Cloud Gateway集成Nacos作為注冊(cè)中心和配置中心

    本篇文章將介紹Spring Cloud Alibaba體系下Spring Cloud Gateway的搭建,服務(wù)注冊(cè)中心和分布式配置中心使用Nacos,后續(xù)將會(huì)持續(xù)更新,介紹集成Sentinel,如何做日志鏈路追蹤,如何做全鏈路灰度發(fā)布設(shè)計(jì),以及Spring Cloud Gateway的擴(kuò)展等。 ? Spring Boot,Spring Cloud,Discovery,Config等基礎(chǔ)依

    2024年02月11日
    瀏覽(507)
  • Gateway網(wǎng)關(guān)組件(在Spring Cloud整合Gateway(idea19版本))

    Gateway網(wǎng)關(guān)組件(在Spring Cloud整合Gateway(idea19版本))

    ????????Spring Cloud Gateway官網(wǎng):Spring Cloud Gateway ????????局域網(wǎng)中就有網(wǎng)關(guān)這個(gè)概念,局域網(wǎng)接收數(shù)據(jù)或發(fā)送數(shù)據(jù)都要通過(guò)網(wǎng)關(guān),比如使用VMware虛擬機(jī)軟件搭建虛擬機(jī)集群的時(shí)候,往往我們需要選擇IP段中的?個(gè)IP作為網(wǎng)關(guān)地址,網(wǎng)關(guān)可以對(duì)請(qǐng)求進(jìn)行控制,提升我們系統(tǒng)的安

    2024年02月16日
    瀏覽(26)
  • Spring Cloud Gateway - 新一代微服務(wù)API網(wǎng)關(guān)

    Spring Cloud Gateway - 新一代微服務(wù)API網(wǎng)關(guān)

    如果沒(méi)有網(wǎng)關(guān),難道不行嗎?功能上是可以的,我們直接調(diào)用提供的接口就可以了。那為什么還需要網(wǎng)關(guān)? 因?yàn)榫W(wǎng)關(guān)的作用不僅僅是轉(zhuǎn)發(fā)請(qǐng)求而已。我們可以試想一下,如果需要做一個(gè)請(qǐng)求認(rèn)證功能,我們可以接入到 API 服務(wù)中。但是倘若后續(xù)又有服務(wù)需要接入,我們又需要

    2024年02月16日
    瀏覽(28)
  • 微服務(wù)·架構(gòu)組件之網(wǎng)關(guān)- Spring Cloud Gateway

    微服務(wù)·架構(gòu)組件之網(wǎng)關(guān)- Spring Cloud Gateway

    微服務(wù)架構(gòu)已成為構(gòu)建現(xiàn)代化應(yīng)用程序的關(guān)鍵范式之一,它將應(yīng)用程序拆分成多個(gè)小型、可獨(dú)立部署的服務(wù)。Spring Cloud Gateway是Spring Cloud生態(tài)系統(tǒng)中的一個(gè)關(guān)鍵組件,用于構(gòu)建和管理微服務(wù)架構(gòu)中的網(wǎng)關(guān)。本報(bào)告旨在調(diào)查和介紹Spring Cloud Gateway的核心概念、架構(gòu)、功能以及其在

    2024年02月09日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包