1
resposta

Qual a maneira mais eficiente de consumir uma API externa paginada?

Estou tentando consumir através de um serviço uma API externa que fornece o seguinte retorno:

{
"page": 1,
"results": [],
"total_pages": 2,
"total_results": 22
}

Tenho um model para receber esse retorno:

public class ResultTMDB {

    private Filme[] results;
    private Integer page;
    private Integer total_pages;
    private Integer total_results;
}

E o meu serviço com WebClient é o seguinte:

public ResultTMDB getFilmes(String nomeFilme) {


        ResultTMDB rTmdb = webClient
                .get()
                .uri(uriBuilder -> uriBuilder
                        .path("/search/movie")
                        .queryParam("page","1")
                        .queryParam("query",nomeFilme)
                        .queryParam("api_key", APIKEY)
                        .queryParam("include_adult","false")
                        .queryParam("language","pt-BR")
                        .build()
                )
                .retrieve()
                .bodyToMono(ResultTMDB.class).block();    


        return rTmdb;
    }

Mas como eu posso processar o total de páginas (neste exemplo são 2) sem chamar esse método várias vezes? É possível fazer isso de forma assíncrona?

1 resposta

Oi Allef,

O jeito mais adequado seria fazendo paginação também. Nesse exemplo sua API é cliente de outra API que utiliza paginação, então bastaria você também utilizar paginação, pois assim quando o cliente da sua api precisar dos registros da página 2, ela vai disparar uma nova consulta para essa API externa.

A não ser que você queira carregar todos os registros dessa API externa de uma única vez, pois dessa forma terá que fazer um loop pela quantidade de páginas.