29 Implementierung von REST-Client-Anwendungen in Spring Boot

In Spring Boot gibt es zwei Hauptansätze für die Implementierung von REST-Client-Anwendungen: RestTemplate und WebClient. Beide bieten Mechanismen zum Senden von HTTP-Anfragen und zum Empfangen von HTTP-Antworten von RESTful-Webservices.

29.1 RestTemplate

RestTemplate ist eine synchrone, blockierende Client-Abstraktion, die seit der ersten Version von Spring vorhanden ist. Sie bietet zahlreiche Hilfsmethoden zum Senden und Empfangen von HTTP-Anfragen. Trotz seiner Einfachheit und Direktheit wird RestTemplate jedoch nicht mehr aktiv entwickelt und sein Einsatz wird nur in Legacy-Projekten empfohlen.

29.1.1 Beispiel

import org.springframework.web.client.RestTemplate;
import org.springframework.http.ResponseEntity;

public class MeinRestClient {
    private static final String URL = "http://example.com/api/resource";
    private final RestTemplate restTemplate;

    public MeinRestClient() {
        this.restTemplate = new RestTemplate();
    }

    public String getResource() {
        ResponseEntity<String> response = restTemplate.getForEntity(URL, String.class);
        return response.getBody();
    }
}

29.2 WebClient

WebClient ist ein Teil von Spring WebFlux und stellt eine nicht-blockierende, reaktive Alternative zu RestTemplate dar. Es unterstützt sowohl synchrone als auch asynchrone Operationen und eignet sich für reaktive Anwendungen. WebClient wird als zukunftssicherer Ansatz für die Kommunikation mit HTTP-Servern angesehen.

29.2.1 Beispiel

import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

public class MeinWebClient {
    private final WebClient webClient;

    public MeinWebClient() {
        this.webClient = WebClient.create("http://example.com");
    }

    public Mono<String> getResource() {
        return this.webClient.get()
                             .uri("/api/resource")
                             .retrieve()
                             .bodyToMono(String.class);
    }
}

29.3 Wahl zwischen RestTemplate und WebClient

WebClient bietet eine modernere, flexible und mächtigere Alternative zu RestTemplate und wird für neue Entwicklungen empfohlen.