Вопрос с собеседования · Spring
Как вызывать внешние HTTP-сервисы из Spring — RestClient и WebClient?
MiddleReactive и WebFlux
Ещё спрашивают так:
- Чем WebClient отличается от RestTemplate?
- Как задать таймауты HTTP-клиенту в Spring?
Коротко
RestClient (Spring 6.1) — современный синхронный клиент с fluent API, замена RestTemplate для блокирующих приложений. WebClient — неблокирующий клиент на Reactor, возвращает Mono и Flux; нужен в WebFlux и для параллельных вызовов. Обязательны таймауты (соединение и ответ), обработка статусов (onStatus), повторы только идемпотентных запросов с паузой, общий настроенный бин клиента вместо создания на каждый вызов.
- retrieve().bodyToMono(...) — тело ответа; ошибки 4xx/5xx становятся исключениями
- Параллельные вызовы в WebClient — Mono.zip
- В блокирующем коде WebClient с block() — допустимо, но RestClient проще
А ещё Без таймаута медленный внешний сервис исчерпывает потоки или соединения вашего
Подробно
var client = WebClient.builder()
.baseUrl("https://api.partner.ru")
.clientConnector(new ReactorClientHttpConnector(
HttpClient.create().responseTimeout(Duration.ofSeconds(3))))
.build();
Mono<Price> price = client.get().uri("/prices/{id}", id)
.retrieve()
.onStatus(HttpStatusCode::is4xxClientError,
r -> Mono.error(new PriceNotFound(id)))
.bodyToMono(Price.class)
.retryWhen(Retry.backoff(2, Duration.ofMillis(200)));
Mono.zip(price, stockMono).map(t -> combine(t.getT1(), t.getT2()));Что хотят услышать
- RestClient для синхронного, WebClient для реактивного.
- Таймауты и обработка статусов.
- Повторы и параллельные вызовы.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓RestClient — синхронный, WebClient — неблокирующий на Mono/Flux; обоим нужны таймауты
- ✗WebClient — синхронный клиент, RestClient — реактивный, поэтому таймауты задают только первому
- ✗Новый клиент создают на каждый запрос, чтобы не делить пул соединений между потоками
- ✗Таймауты HTTP-клиенту задавать не нужно — сервер всегда отвечает
Связанные вопросы
Партнёр платформы
Разбор собеседования
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.