首頁  >  文章  >  Java  >  使用 Spring Cloud Gateway 建立簡單的 API 網關

使用 Spring Cloud Gateway 建立簡單的 API 網關

Patricia Arquette
Patricia Arquette原創
2024-11-03 12:14:02484瀏覽

在現代微服務架構中,API 閘道至關重要。它為多個服務提供單一入口點,使我們能夠管理路由、安全、速率限制、負載平衡等等。在本文中,我們將探索如何使用 Spring Cloud Gateway 設定基本的 API 網關,並根據路徑將請求定向到不同的端點。我們還將示範如何使用篩選器動態操作路徑。

讓我們深入研究程式碼!

Building a Simple API Gateway with Spring Cloud Gateway

喔不! !

先決條件

要跟隨,您需要:

  • Java 11 或更高版本
  • Spring Boot(建議3.0或更高版本)
  • 響應式 Spring Cloud Gateway

項目設定

建立一個新的 Spring Boot 專案並包含 Spring Cloud Gateway 依賴項。您可以透過在 Spring Initializr 上設定一個新項目,在依賴項下選擇 Spring BootReactive Spring Cloud Gateway 來輕鬆完成此操作。

這是 pom.xml 片段:

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-contract-stub-runner</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

建置 API 網關

讓我們設定網關來處理三個不同路徑的請求:

  1. /get/country/{name} – 取得有關國家/地區的詳細資訊。
  2. /get/language/{name} – 根據語言取得資訊。
  3. /get/subregion/{name} – 檢索特定子區域的資料。

「我們將使用 REST Country API 來模擬我們架構中的其他微服務。」


設定路線

我在應用程式的主檔案附近建立了一個名為 router 的資料夾。在其中,我們將建立一個名為 Routes.java 的文件,在其中定義路由、配置每個路徑並將篩選器應用於動態直接請求。

package dev.mspilari.api_gateway.router;

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Routes {

    @Bean
    public RouteLocator routeLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("country_route", p -> p
                        .path("/get/country/{name}")
                        .filters(f -> f.setPath("/v3.1/name/{name}"))
                        .uri("https://restcountries.com"))

                .route("language_route", p -> p
                        .path("/get/language/{name}")
                        .filters(f -> f.setPath("/v3.1/lang/{name}"))
                        .uri("https://restcountries.com"))

                .route("subregion_route", p -> p
                        .path("/get/subregion/{name}")
                        .filters(f -> f.setPath("/v3.1/subregion/{name}"))
                        .uri("https://restcountries.com"))
                .build();
    }
}

守則解釋

  • 路線定義:我們使用route方法定義每條路線,該方法採用標識符(例如country_route)和定義路徑的lambda。

  • 路徑匹配:.path("/get/country/{name}") 用於匹配傳入的 URL 模式。 {name} 是一個變量,可以動態替換為任何值,例如“巴西”等國家名稱。

  • 過濾器:我們使用 SetPath 來修改傳出請求路徑。例如, .setPath("/v3.1/name/{name}") 將 /get/country/{name} 改寫為 /v3.1/name/{name},即 REST Country API 所需的端點。

  • URI:我們將 uri 設定為 https://restcountries.com,作為基本 URL。 Spring Cloud Gateway 會將修改後的路徑傳送至此 URI。


運行網關

啟動您的 Spring Boot 應用程式。現在,您可以向網關發出請求,它會將它們轉送到正確的端點。

在終端機中嘗試以下指令來測試路由:

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-contract-stub-runner</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

網關將根據路徑和參數將每個請求路由到對應的 REST 國家/地區 API 端點。


驗證回應

如果一切配置正確,您應該會看到與直接呼叫 REST 國家/地區 API 所獲得的回應相符的回應。

例如:

package dev.mspilari.api_gateway.router;

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Routes {

    @Bean
    public RouteLocator routeLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("country_route", p -> p
                        .path("/get/country/{name}")
                        .filters(f -> f.setPath("/v3.1/name/{name}"))
                        .uri("https://restcountries.com"))

                .route("language_route", p -> p
                        .path("/get/language/{name}")
                        .filters(f -> f.setPath("/v3.1/lang/{name}"))
                        .uri("https://restcountries.com"))

                .route("subregion_route", p -> p
                        .path("/get/subregion/{name}")
                        .filters(f -> f.setPath("/v3.1/subregion/{name}"))
                        .uri("https://restcountries.com"))
                .build();
    }
}

使用 Spring Cloud Gateway 的好處

  1. 單一入口點:所有請求都通過網關,簡化客戶端互動和 API 管理。
  2. 靈活路由:可以使用路徑參數和過濾器輕鬆自訂路由。
  3. 動態路徑重寫:網關允許我們動態調整請求路徑,無需更改客戶端程式碼即可輕鬆與外部 API 整合。

下一步

此設定涵蓋了 Spring Cloud Gateway 路由的基礎知識。在接下來的文章中,我們將探索其他功能,例如:

  • 身份驗證和授權 – 透過與 OAuth 或 JWT 整合來保護路由。
  • 速率限制和斷路器 – 使用內建過濾器增加彈性。
  • 負載平衡 – 在多個實例之間分配請求以獲得更好的效能。
  • 日誌記錄和可觀察性 – 深入了解應用程式行為和效能,並透過分散式追蹤和集中式日誌記錄監控流量模式。

?參考

  • Spring 雲端閘道
  • 建置網關

?跟我說話

  • 領英
  • Github
  • 投資組合

以上是使用 Spring Cloud Gateway 建立簡單的 API 網關的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn