SpringBoot WebFlux WebClient: использование Mono и Flux - PullRequest
0 голосов
/ 01 июля 2019

Итак, я только вхожу в WebClient, поскольку RestTemplate получил устаревшую заметку.

Дело в том, что я немного растерялся, когда дело доходит до запроса и потребления ответов.

НаСейчас я играю с API Riot Games для League of Legends.Если вы проверяете их документацию, вам нужно отправить ключ API в виде параметра или заголовка, чтобы использовать их сервисы.

Поскольку я пытаюсь использовать WebClient, сейчас я не беспокоюсь об абстракции, поэтому текущийУ меня есть следующий тест:

Класс Builder, сейчас я устанавливаю только baseUrl и ключ API:

@Service
public class WebClientService {

    @Autowired
    private Environment env;

    public WebClient get(String url) {

        return WebClient.builder()
        .baseUrl(url)
        .defaultHeader("X-Riot-Token", env.getProperty("app.riot.api.key"))
        .build();
    }
}

Чтобы проверить, я звоню в конечную точку / summoners, используякод ниже:

@Service
public class SummonerServices {
    @Autowired
    private WebClientService web;

    private String riotEndPoint = "https://br1.api.riotgames.com/lol/summoner/v4/summoners/by-name/";

    public Flux<Summoners> getSummoner(String summonerName) {

        return web.get(riotEndPoint + summonerName).get()
                .exchange().flatMapMany(e -> e.bodyToMono(Summoners.class));
    }

}

У меня есть контроллер (опущен, потому что он не актуален), я его называю, и он получает ожидаемый результат.

Но я заметил, что вместо Flux, я могу использовать Mono, например, так:

public Mono<Summoners> getSummoner(String summonerName) {

    return web.get(riotEndPoint + summonerName).get()
            .exchange().flatMap(e -> e.bodyToMono(Summoners.class));
}

Что я не могу понять, читая документы и просматривая примеры в Интернете, это когда или почему следует выбирать одно из другого?

Похоже, что для обоих я могу иметь доступ к ответу заголовка, у меня есть доступ к тому же doOnSucess / doOnError и другим методам для обработки ответов и ошибок.

Они кажутся в значительной степенито же самое, но яВы бы не создали два точных способа сделать одно и то же с разными именами, верно?Поэтому, если бы кто-нибудь мог указать мне на документ, объясняющий Фукса и Моно, я был бы очень рад.Google вернул мне почти те же учебники, и они не объясняют, они просто используют их.

...