1
resposta

[Sugestão] [Sugestão] [Outra forma de realizar a paginação de forma dinâmica]

Olá, pessoal, tudo bem? Estou passando aqui para mostrar como eu fiz o desafio de otimizar a paginação dos repositórios.

A minha ideia foi utilizar um loop infinito, onde o critério de parada seria quando o JSON da resposta estivesse vazio, indicando que ali não havia mais informações. Dessa forma, não é preciso enviar requisição inicial para obter o total de repositórios e realizar a conta para achar quantidade de páginas.

    # Função para extrair a lista de repositórios do github daquele usuário (owner)
    def list_repos(self):
        url = f'{self.api_base_url}/users/{self.owner}/repos'
        # Altera o total de informações por página, que por padrão é 30, para 100
        params = { "per_page" : 100 }
        page_num = 1
        repos_list = []
        while True:
            try:
                url_page = f'{url}?page={page_num}'
                response = requests.get(url_page, headers=self.headers, params=params)
                # Condição de parada
                # Aqui poderia ser if len(response.json()) == 0
                # ou if response.json() = []
                if not len(response.json()):
                    break
                # Se a condição de parada não foi atingida, continua a execução do código
                repos_list.extend(response.json())
                print(url_page)
                # Altera o número da página
                page_num += 1
            except:
                repos_list.append(None)
        return repos_list
1 resposta

Ei, Nilson! Tudo bem?

Achei interessante como você usou o while True com o critério de parada baseado no retorno vazio da API. Essa abordagem evita uma requisição a mais só para contar os repositórios. É uma solução direta e funcional para o desafio, parabéns!

Continue praticando e aplicando além do que é estudado, sempre tendo apoio do fórum e da documentação oficial.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!