Хорошо, в этой статье мы поговорим о веб-клиенте Spring Boot. Если вы используете Spring WebFlux, вы можете использовать WebClient для вызова внешних сервисов отдыха. Он был представлен в Spring 5 как часть реактивной веб-инфраструктуры, которая помогает создавать реактивные и неблокирующие веб-приложения. WebClient — это просто интерфейс, который предлагает некоторые методы для вызовов остальных служб, такие как GET, POST, PUT, PATCH, DELETE и OPTIONS. Вы можете использовать любой из этих методов для асинхронного вызова внешней службы. Основное преимущество использования WebClient заключается в том, что он реактивен, поскольку использует webflux, а также по умолчанию неблокирует по своей природе, и ответ всегда будет возвращаться либо в Mono, либо в Flux. Итак, убедитесь, что вы уже используете Spring WebFlux, если планируете использовать WebClient для вызовов API.

Как использовать Spring WebClient?

Примечание. Я бы использовал инструмент сборки maven, чтобы показать демонстрацию. Если вы используете какой-либо другой инструмент сборки, пожалуйста, найдите зависимость в Интернете, они легко доступны.

Шаг 1. Добавьте зависимость Spring WebFlux к вам POM.XML
https://gist.github.com/deepakmehra10/a0df105a32e53f1efbce6e42936971da

Шаг 2. Создайте интерфейс с методом, который будет возвращать ответ от вызова rest.

Шаг 3. Создайте класс ServiceImpl, который будет иметь реализацию интерфейса службы, созданную на шаге 2.

https://gist.github.com/deepakmehra10/9a053a744f32a4a1e0c2b27bf5615b69
На шаге 3 мы создали экземпляр WebClient и инициализировали его с помощью компоновщика WebClient. Он создаст объект WebClient, а также позволит вам настроить вызов с несколькими методами, которые он предлагает. Пожалуйста, обратитесь ко всем методам во время его использования.

Вы можете выбрать HTTP-методы в зависимости от характера HTTP-вызова и сделать к нему запрос. В приведенном выше сценарии мы используем метод GET и возвращаем ответ от вызова API.

Метод getPost — это метод, который будет выполнять запрос с помощью экземпляра веб-клиента и получать ответ от внешнего вызова API. Если вам нужно сделать вызов POST, вы можете использовать метод post, и в этом случае вам нужно будет передать тело телу метода, есть много методов, с которыми можно поиграться, как только вы начнете его использовать, у вас будут различные методы, которые можно использовать наверняка.

Как обрабатывать ошибки?

Для обработки ошибок в WebClient вы можете использовать метод расширения извлечения. Метод извлечения в WebClient генерирует исключение WebClientResponseException, когда будет получено исключение серий 4xx и 5xx. Вы можете дополнительно настроить его, используя метод onStatus(), как показано ниже.

В отличие от этого, метод обмена методом извлечения не будет генерировать исключения в случае исключения серий 4xx и 6xx с другого конца. Таким образом, всегда рекомендуется использовать метод извлечения, чтобы вы могли найти реальную причину исключения и передать его дальше клиенту после его упаковки в пользовательское исключение, и если вы хотите отключить исключение и двигаться дальше, вы можете использовать способ обмена(не рекомендую).

Написание тестовых примеров для WebClient

Написание сценариев модульного тестирования для WebClient было немного сложным, поскольку оно включало использование библиотеки под названием MockWebServer.

Ниже приведена зависимость maven для этой библиотеки.

Как только вы добавите зависимость от библиотеки, вы можете начать писать тестовые примеры для WebClient.

Как писать тестовые случаи?

Шаг 1. Сначала создайте объект MockWebServer, как показано ниже
https://gist.github.com/deepakmehra10/94e436b14425290b3fd46595a96d4cba

Шаг 2. После создания объекта вы можете заглушить фиктивный ответ, как показано ниже.

https://gist.github.com/deepakmehra10/0f41afa6fd1916c734cb44902a41d9a1
Теперь вы можете просто подтвердить фактический ответ ожидаемым ответом.

Вот так, ты молодец. Что вы узнали из этой статьи?
1. Как выполнять HTTP-вызовы с помощью WebClient.
2. Как написать модульные тестовые примеры для проверки функциональности.

Пожалуйста, обратитесь к ссылке github для полного доступа к коду. Если вам понравилась эта статья, пожалуйста, помогите мне распространить ее. Кроме того, дайте мне знать в комментариях, если у вас есть какие-либо вопросы, связанные со статьей.