Вопрос проверяет знание инструментов Spring для HTTP-взаимодействия между микросервисами, что важно для построения распределенных систем.
Spring Framework предлагает два основных инструмента для выполнения HTTP-запросов между сервисами: RestTemplate и WebClient. RestTemplate — это классический синхронный HTTP-клиент, который был основным в Spring до версии 5.0. WebClient — более современный реактивный клиент, появившийся в Spring WebFlux, поддерживающий асинхронную и неблокирующую обработку.
RestTemplate работает в синхронном режиме: каждый запрос блокирует поток до получения ответа. Он прост в использовании и подходит для большинства стандартных сценариев, где не требуется высокая производительность при большом количестве одновременных запросов. Пример использования:
RestTemplate restTemplate = new RestTemplate();
String url = "http://example.com/api/data";
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
System.out.println(response.getBody());RestTemplate поддерживает различные HTTP-методы (GET, POST, PUT, DELETE), автоматическое преобразование JSON/XML в объекты Java через HttpMessageConverter, а также обработку ошибок через ResponseErrorHandler.
WebClient — часть Spring WebFlux, работает в реактивном стиле на основе Project Reactor. Он не блокирует поток, что позволяет эффективно обрабатывать множество запросов с меньшим потреблением ресурсов. Пример асинхронного запроса:
WebClient webClient = WebClient.create("http://example.com");
webClient.get()
.uri("/api/data")
.retrieve()
.bodyToMono(String.class)
.subscribe(response -> System.out.println(response));WebClient поддерживает как синхронные (через block()), так и асинхронные вызовы, а также потоковую обработку данных. Он более гибкий и масштабируемый, особенно в микросервисной архитектуре с высокими нагрузками.
Для простых синхронных сценариев используйте RestTemplate, но для современных реактивных систем с высокой производительностью выбирайте WebClient. Оба инструмента интегрируются с Spring и упрощают HTTP-взаимодействие между сервисами.