API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway) · Oppitunti

Esikäsittely ja jälkikäsittely suodattimilla

Soveltakaa suodattimia toimintoihin, jotka suoritetaan ennen pyynnön saapumista palveluun (pre) ja palvelun vastaamisen jälkeen (post).

Oppitunti 3/411 vaihetta

Esikäsittely ja jälkikäsittely suodattimilla on ilmainen API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-kurssilla on yhteensä 4 oppituntia.

Johdatus ennen- ja jälkeen-suodattimiin

Tervetuloa! Tässä oppitunnissa tutustumme siihen, miten Spring Cloud Gateway -suodattimet voivat käsitellä pyyntöjä ennen niiden saapumista taustapalveluun (esikäsittely) ja sen jälkeen, kun palvelu on vastannut (jälkikäsittely).

Tämä tarkka hallinta on ratkaisevan tärkeää monimutkaisten API-yhdyskäytävätehtävien käsittelyssä.

Suodatinketju uudelleen tarkasteltuna

Muistattehan, että suodattimet toimivat ketjuna. Jokainen GatewayFilter tai GlobalFilter voi suorittaa toimintoja:

  • Ennen chain.filter(exchange)-kutsua: kyseessä on esikäsittely.
  • Sen jälkeen, kun chain.filter(exchange) palauttaa arvon Mono<Void>: kyseessä on jälkikäsittely.

Spring Cloud Gatewayn reaktiivinen luonne ja Mono-tyypin käyttö tekevät tästä peräkkäisestä suorituksesta tehokasta.

Esikäsittely: ennen palvelua

Esikäsittelysuodattimet suoritetaan ennen kuin yhdyskäytävä välittää pyynnön varsinaiselle taustapalvelulle. Niitä voi ajatella saapuvien pyyntöjen sieppaajina.

Yleisiä esikäsittelytehtäviä ovat:

  • Pyyntöjen todentaminen ja valtuuttaminen
  • Pyyntöotsakkeiden lisääminen tai muokkaaminen
  • URL-polun tai kyselyparametrien uudelleenkirjoittaminen
  • Nopeusrajoitusten toteuttaminen

Esisuodattimen esimerkki: otsakkeen lisääminen

Tarkastellaan yksinkertaista esikäsittelyesimerkkiä: mukautetun otsakkeen lisäämistä pyyntöön ennen sen saapumista palveluun. Spring Cloud Gateway tarjoaa tähän valmiita suodattimia, kuten AddRequestHeader-suodattimen.

Tämä määritys lisää otsakkeen X-Request-Source arvolla gateway kaikkiin pyyntöihin, jotka vastaavat polkua /api/pre/**.

spring:
  cloud:
    gateway:
      routes:
        - id: pre_header_route
          uri: http://localhost:8080/service/echo
          predicates:
            - Path=/api/pre/**
          filters:
            - AddRequestHeader=X-Request-Source, gateway

Suoritettava esisuodattimen koodi

Kokeilkaa tämän täydellisen Spring Boot -sovelluksen suorittamista. Se määrittää yhdyskäytävän, joka lisää pyyntöotsakkeen ja reitittää pyynnön saman sovelluksen yksinkertaiseen kaikupalvelun päätepisteeseen. Tarkistakaa taustajärjestelmän konsoli tai vastaus nähdäksenne lisätyn otsakkeen!

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class GatewayApp {

  public static void main(String[] args) {
    SpringApplication.run(GatewayApp.class, args);
  }

  // Dummy backend service to echo headers
  @GetMapping("/service/echo")
  public String echoHeaders(@RequestHeader(required = false) java.util.Map<String, String> headers) {
    return "Backend received headers: " + headers.get("x-request-source");
  }

  @Bean
  public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
      .route("pre_header_route", r -> r.path("/api/pre/**")
        .filters(f -> f.addRequestHeader("X-Request-Source", "gateway"))
        .uri("http://localhost:8080/service/echo")) // Route to its own dummy backend
      .build();
  }
}

Jälkikäsittely: palvelun jälkeen

Jälkikäsittelysuodattimet suoritetaan sen jälkeen, kun taustapalvelu on vastannut, mutta ennen kuin yhdyskäytävä lähettää vastauksen takaisin asiakkaalle.

Näin voitte tarkastella taustapalvelun vastausta tai muokata sitä.

Tyypillisiä jälkikäsittelytehtäviä ovat:

  • Vastausotsakkeiden tai rungon muokkaaminen
  • Vastauksen tietojen kirjaaminen (tila ja viive)
  • Vastausten käsittelyn mittareiden lisääminen
  • Vastausten välimuistin toteuttaminen

Mukautettu jälkikäsittelysuodatin

Jälkikäsittelyä varten on usein luotava mukautettuja suodattimia. Nämä suodattimet käyttävät chain.filter(exchange)-kutsun palauttamaa Mono-arvoa sellaisen logiikan lisäämiseen, joka suoritetaan onnistuneen valmistumisen yhteydessä.

Jälkikäsittelytoiminnoissa käytetään yleisesti rakennetta .then(Mono.fromRunnable(() -> { ... })).

Suoritettava jälkisuodattimen koodi

Tässä on täydellinen Spring Boot -sovellus, jossa mukautettu GlobalFilter lisää X-Post-Processed-otsakkeen jokaiseen vastaukseen. Huomatkaa, miten suodatinlogiikka ketjutetaan rakenteella .then(Mono.fromRunnable(...)).

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@SpringBootApplication
@RestController
public class GatewayApp {

  public static void main(String[] args) {
    SpringApplication.run(GatewayApp.class, args);
  }

  // Dummy backend service
  @GetMapping("/service/data")
  public String getData() {
    return "Backend response data!";
  }

  @Bean
  public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
      .route("post_filter_route", r -> r.path("/api/post/**")
        .uri("http://localhost:8080/service/data")) // Route to itself
      .build();
  }
}

@Component
class CustomPostFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
            // This code runs AFTER the downstream service responds
            exchange.getResponse().getHeaders().add("X-Post-Processed", "true");
            System.out.println("Post-processing: Added X-Post-Processed header.");
        }));
    }

    @Override
    public int getOrder() {
        return -1; // Execute relatively late in the filter chain
    }
}

Ennen vai jälkeen: keskeiset erot

Esikäsittelyn ja jälkikäsittelyn käyttötarkoitusten ymmärtäminen on tärkeää:

  • Esisuodattimet: Käsittelevät pyyntöä ennen kuin se poistuu yhdyskäytävästä. Ne sopivat esimerkiksi tietoturvaan, reitityslogiikkaan ja pyyntöjen muuntamiseen.
  • Jälkisuodattimet: Käsittelevät vastausta sen palattua taustapalvelusta. Ne sopivat esimerkiksi vastauksen muuntamiseen, vastaustietojen kirjaamiseen ja mittareiden keräämiseen.

Valitkaa oikea vaihe API-liikenteen tehokasta hallintaa varten.

Suodattimien ajoituksen haaste

Ajatellaan Spring Cloud Gateway -kokoonpanoa. Mitkä seuraavista tehtävistä suodattimet tyypillisesti suorittavat ennen pyynnön välittämistä taustapalvelulle?

Kertaus: esikäsittely ja jälkikäsittely

Hienoa työtä! Olette oppineet Spring Cloud Gateway -suodattimien tehokkaasta esikäsittelyn ja jälkikäsittelyn käsitteestä.

  • Esisuodattimet muokkaavat pyyntöjä ennen niiden saapumista taustajärjestelmään.
  • Jälkisuodattimet muokkaavat vastauksia taustajärjestelmän vastattua.
  • Reaktiivinen Mono-ketju mahdollistaa suodattimien suoritusajankohdan tarkan hallinnan.

Tämä ymmärrys on välttämätön vankkojen ja monipuolisten API-yhdyskäytävien rakentamisessa!

Aloita maksutta

Opi API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway) tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Esikäsittely ja jälkikäsittely suodattimilla” ilmainen?

Kyllä – oppitunnin ”Esikäsittely ja jälkikäsittely suodattimilla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-kurssin, päivitä CoddyKit PROhon. API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Esikäsittely ja jälkikäsittely suodattimilla”?

Soveltakaa suodattimia toimintoihin, jotka suoritetaan ennen pyynnön saapumista palveluun (pre) ja palvelun vastaamisen jälkeen (post). Harjoittelet API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Esikäsittely ja jälkikäsittely suodattimilla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppitunnilla?

Kyllä. Jokainen API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Yleiset suodattimet ja GatewayFilterFactory
  2. Mukautetut pyyntö- ja vastaussuodattimet
  3. Esikäsittely ja jälkikäsittely suodattimilla
  4. Hyödylliset sisäänrakennetut GatewayFilterit
← Takaisin: API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)