ホームページ >Java >&#&チュートリアル >Spring Cloud Gateway を使用したシンプルな API ゲートウェイの構築

Spring Cloud Gateway を使用したシンプルな API ゲートウェイの構築

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 12:14:02541ブラウズ

最新のマイクロサービス アーキテクチャでは、API ゲートウェイが不可欠です。複数のサービスに単一のエントリ ポイントを提供し、ルーティング、セキュリティ、レート制限、負荷分散などを管理できるようにします。この記事では、Spring Cloud Gateway を使用して基本的な API ゲートウェイを設定し、パスに基づいてリクエストをさまざまなエンドポイントに送信する方法を説明します。また、フィルターを使用してパスを動的に操作する方法も示します。

コードを詳しく見てみましょう!

Building a Simple API Gateway with Spring Cloud Gateway

とんでもない!!

前提条件

この手順を進めるには、次のものが必要です:

  • Java 11 以降
  • Spring Boot (3.0 以降を推奨)
  • リアクティブ Spring クラウド ゲートウェイ

プロジェクトのセットアップ

新しい 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ゲートウェイの構築

3 つの異なるパスのリクエストを処理するようにゲートウェイを構成しましょう:

  1. /get/country/{name} – 国に関する詳細を取得します。
  2. /get/ language/{name} – 言語に基づいて情報を取得します。
  3. /get/subregion/{name} – 特定のサブリージョンのデータを取得します。

REST Countries 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();
    }
}

コードの説明

  • ルート定義: 識別子 (country_route など) とパスを定義するラムダを受け取る、route メソッドを使用して各ルートを定義します。

  • パス マッチング: .path("/get/country/{name}") は、受信 URL パターンと一致するために使用されます。 {name} は、「ブラジル」のような国名など、任意の値に動的に置き換えられる変数です。

  • フィルター: SetPath を使用して送信リクエストのパスを変更します。たとえば、 .setPath("/v3.1/name/{name}") は、/get/country/{name} を REST Countries API で必要なエンドポイントである /v3.1/name/{name} に書き換えます。

  • 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 Countries 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 Cloud ゲートウェイ
  • ゲートウェイの構築

?私に話して

  • リンクトイン
  • Github
  • ポートフォリオ

以上がSpring Cloud Gateway を使用したシンプルな API ゲートウェイの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。