Heim >Java >javaLernprogramm >Erstellen eines einfachen API-Gateways mit Spring Cloud Gateway

Erstellen eines einfachen API-Gateways mit Spring Cloud Gateway

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 12:14:02555Durchsuche

In modernen Microservices-Architekturen ist ein API-Gateway unerlässlich. Es bietet einen einzigen Einstiegspunkt für mehrere Dienste und ermöglicht uns die Verwaltung von Routing, Sicherheit, Ratenbegrenzung, Lastausgleich und mehr. In diesem Artikel erfahren Sie, wie Sie mit Spring Cloud Gateway ein einfaches API-Gateway einrichten und Anfragen basierend auf Pfaden an verschiedene Endpunkte weiterleiten. Wir zeigen auch, wie Sie Filter verwenden, um Pfade dynamisch zu manipulieren.

Lassen Sie uns in den Code eintauchen!

Building a Simple API Gateway with Spring Cloud Gateway

Oh nein!!

Voraussetzungen

Um mitzumachen, benötigen Sie:

  • Java 11 oder höher
  • Spring Boot (3.0 oder höher empfohlen)
  • Reaktives Spring Cloud Gateway

Projekt-Setup

Erstellen Sie ein neues Spring Boot-Projekt und beziehen Sie die Abhängigkeit Spring Cloud Gateway ein. Sie können dies ganz einfach tun, indem Sie ein neues Projekt auf Spring Initializr einrichten und unter Abhängigkeiten Spring Boot und Reactive Spring Cloud Gateway auswählen.

Hier ist das pom.xml-Snippet:

<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>

Erstellen des API-Gateways

Lassen Sie uns unser Gateway so konfigurieren, dass es Anfragen für drei verschiedene Pfade verarbeitet:

  1. /get/country/{name} – Um Details über ein Land abzurufen.
  2. /get/sprache/{name} – Um Informationen basierend auf der Sprache zu erhalten.
  3. /get/subregion/{name} – Zum Abrufen von Daten für bestimmte Unterregionen.

„Wir werden die REST-Länder-API verwenden, um die anderen Microservices zu simulieren, die wir in unserer Architektur haben.“


Einrichten der Routen

Ich habe einen Ordner namens „router“ in der Nähe der Hauptdatei der Anwendung erstellt. Darin erstellen wir eine Datei namens Routes.java, in der wir unsere Routen definieren, jeden Pfad konfigurieren und Filter auf dynamisch direkte Anfragen anwenden.

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

Erläuterung des Kodex

  • Routendefinitionen: Wir definieren jede Route mithilfe der Routenmethode, die eine Kennung (z. B. Country_Route) und ein Lambda benötigt, das den Pfad definiert.

  • Pfadabgleich: .path("/get/country/{name}") wird verwendet, um das eingehende URL-Muster abzugleichen. {name} ist eine Variable, die dynamisch durch einen beliebigen Wert ersetzt werden kann, beispielsweise einen Ländernamen wie „Brasilien“.

  • Filter: Wir verwenden SetPath, um den ausgehenden Anforderungspfad zu ändern. Beispielsweise schreibt .setPath("/v3.1/name/{name}") /get/country/{name} in /v3.1/name/{name} um, den von der REST Countries API benötigten Endpunkt.

  • URI: Wir setzen die URI auf https://restcountries.com, die als Basis-URL dient. Spring Cloud Gateway sendet den geänderten Pfad an diesen URI.


Ausführen des Gateways

Starten Sie Ihre Spring Boot-Anwendung. Jetzt können Sie Anfragen an das Gateway stellen und es leitet sie an den richtigen Endpunkt weiter.

Probieren Sie die folgenden Befehle in Ihrem Terminal aus, um die Routen zu testen:

<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>

Jede Anfrage wird vom Gateway basierend auf dem Pfad und den Parametern an den jeweiligen REST-Länder-API-Endpunkt weitergeleitet.


Überprüfen der Antwort

Wenn alles richtig konfiguriert ist, sollten Sie Antworten sehen, die denen entsprechen, die Sie erhalten würden, wenn Sie die REST-Länder-API direkt aufrufen.

Zum Beispiel:

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

Vorteile der Verwendung von Spring Cloud Gateway

  1. Einzelner Einstiegspunkt: Alle Anfragen passieren das Gateway, was Client-Interaktionen und API-Verwaltung vereinfacht.
  2. Flexibles Routing: Routen können einfach mit Pfadparametern und Filtern angepasst werden.
  3. Dynamic Path Rewriting: Das Gateway ermöglicht es uns, Anforderungspfade dynamisch anzupassen, was die Integration mit externen APIs erleichtert, ohne den clientseitigen Code zu ändern.

Nächste Schritte

Dieses Setup deckt die Grundlagen des Routings mit Spring Cloud Gateway ab. In den nächsten Beiträgen werden wir zusätzliche Funktionen erkunden, wie zum Beispiel:

  • Authentifizierung und Autorisierung – sichere Routen durch Integration mit OAuth oder JWT.
  • Strombegrenzung und Leistungsschalter – erhöhen Sie die Widerstandsfähigkeit mit integrierten Filtern.
  • Lastausgleich – Verteilen Sie Anfragen für eine bessere Leistung auf mehrere Instanzen.
  • Protokollierung und Beobachtbarkeit – Gewinnen Sie Einblicke in das Anwendungsverhalten und die Leistung und überwachen Sie Verkehrsmuster durch verteilte Ablaufverfolgung und zentralisierte Protokollierung.

? Referenz

  • Spring Cloud Gateway
  • Ein Gateway bauen

? Sprechen Sie mit mir

  • LinkedIn
  • Github
  • Portfolio

Das obige ist der detaillierte Inhalt vonErstellen eines einfachen API-Gateways mit Spring Cloud Gateway. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn