Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] Exercício 3

Desenvolva um programa em Java que permite aos usuários consultar informações sobre um usuário do GitHub (utilize a API pública do GitHub para obter os dados). Crie uma classe de exceção personalizada, ErroConsultaGitHubException, que estende RuntimeException. Lance essa exceção quando o nome de usuário não for encontrado. No bloco catch, trate de forma específica essa exceção, exibindo uma mensagem amigável.
Essa foi minha resolução:


public class ErroConsultaGitHubException extends RuntimeException {    
    public ErroConsultaGitHubException(String message) {
        super(message);
    }
}

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;

public class Principal {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Digite o username do usuario: ");
        String username = input.nextLine();

        String endereco = "https://api.github.com/users/" + username;

        try{
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(endereco))
                    .build();

            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());

            if (response.statusCode() == 404) {
                throw new ErroConsultaGitHubException("Usuario " + username + " não foi encontrado!");
            }

            System.out.println(response.body());


        }catch (IOException | InterruptedException e){
            System.out.println("Houve um problema de conexão com a API: \n" + e.getMessage());

        } catch (ErroConsultaGitHubException e){
            System.out.println(e.getMessage());
        }
    }
}
1 resposta

Bom dia, Gustavo! Tranquilo?

Gostei demais da sua solução, continue assim!

Mandou muito bem explorando o HttpClient para consumir dados da API do GitHub com Java, aplicou de maneira eficiente a exceção personalizada para tratar erros de consulta e entendeu como usar o try-catch para diferenciar falhas de conexão e validação de usuário.

E um detalhe curioso para aprimorar seria separar a lógica de consulta em uma classe de serviço, deixando o main mais limpo e organizado. Exemplo:

public class GitHubService {
    private final HttpClient client = HttpClient.newHttpClient();

    public String consultarUsuario(String username) {
        String endereco = "https://api.github.com/users/" + username;
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(endereco))
                .build();

        try {
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            if (response.statusCode() == 404) {
                throw new ErroConsultaGitHubException("Usuário " + username + " não foi encontrado!");
            }
            return response.body();
        } catch (IOException | InterruptedException e) {
            throw new RuntimeException("Problema de conexão com a API: " + e.getMessage());
        }
    }
}

Isso faz com que o código fique mais modular e fácil de manter.

Para aprimorar suas soluções, algumas boas práticas são:

  • Validação: tratar status diferentes além do 404, como 500 ou 403.
  • Feedback claro: exibir mensagens mais detalhadas para o usuário.
  • Encapsulamento: mover a lógica de requisição para uma classe de serviço.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: o que você gostaria de praticar mais agora, refatorar o código para deixá-lo mais modular ou implementar testes automatizados para validar diferentes cenários de consulta?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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