最新のマイクロサービス アーキテクチャでは、API ゲートウェイが不可欠です。複数のサービスに単一のエントリ ポイントを提供し、ルーティング、セキュリティ、レート制限、負荷分散などを管理できるようにします。この記事では、Spring Cloud Gateway を使用して基本的な API ゲートウェイを設定し、パスに基づいてリクエストをさまざまなエンドポイントに送信する方法を説明します。また、フィルターを使用してパスを動的に操作する方法も示します。
コードを詳しく見てみましょう!
この手順を進めるには、次のものが必要です:
新しい Spring Boot プロジェクトを作成し、Spring Cloud Gateway 依存関係を含めます。これを簡単に行うには、Spring Initializr で新しいプロジェクトをセットアップし、依存関係で Spring Boot と Reactive 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>
3 つの異なるパスのリクエストを処理するようにゲートウェイを構成しましょう:
「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 を使用したルーティングの基本について説明します。次の投稿では、次のような追加機能について説明します。
以上がSpring Cloud Gateway を使用したシンプルな API ゲートウェイの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。