Этот вопрос проверяет знание популярных HTTP-клиентов в экосистеме Java для межсервисного взаимодействия в микросервисной архитектуре.
В микросервисной архитектуре на Java сервисы часто общаются друг с другом по протоколу HTTP, поэтому выбор правильного клиента критически важен для производительности и удобства разработки. Основные критерии выбора включают поддержку синхронных или асинхронных вызовов, интеграцию с используемым фреймворком (например, Spring) и возможности по настройке таймаутов, логирования и обработки ошибок.
Вот как можно выполнить GET-запрос к другому микросервису с использованием Spring WebClient:
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
public class ServiceClient {
private final WebClient webClient;
public ServiceClient(String baseUrl) {
this.webClient = WebClient.builder()
.baseUrl(baseUrl)
.defaultHeader(HttpHeaders.CONTENT_TYPE, "application/json")
.build();
}
public Mono<User> getUserById(String id) {
return webClient.get()
.uri("/users/{id}", id)
.retrieve()
.bodyToMono(User.class)
.onErrorResume(e -> Mono.error(new ServiceException("Failed to fetch user", e)));
}
}Этот код создает клиент с базовым URL и выполняет неблокирующий запрос, возвращая реактивный тип Mono. Обработка ошибок здесь упрощена — в реальном проекте её стоит сделать более детальной.
Вывод: Для современных реактивных микросервисов на Spring предпочтительнее использовать WebClient. В традиционных синхронных приложениях можно выбрать RestTemplate или стандартный HttpClient. Сторонние библиотеки вроде OkHttp стоит рассматривать, когда нужен тонкий контроль над сетевым слоем вне Spring-контекста.