1
resposta

[Projeto] Desafio API ViaCep | Concluido

Ola, queria poder saber se meu código esta bom, se eu poderia melhorar ou algo do tipo?

Classe de conexao com a API:

package programa.endereco.modelos;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;

import java.io.FileReader;
import java.io.FileWriter;
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.ArrayList;
import java.util.List;

public class ConexaoApiCEP {
    private static final String ARQUIVO_JSON = "Localizacoes.json";
    public void fazerBusca (String cep) throws IOException, InterruptedException {
        try {
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create("https://viacep.com.br/ws/" + cep + "/json/"))
                    .build();
            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());
            String json = response.body();
            Gson gson = new GsonBuilder()
                    .setPrettyPrinting()
                    .create();
            ViaCEPRecord tradutor = gson.fromJson(json, ViaCEPRecord.class);
            Localizacao local = new Localizacao(tradutor);
            List<Localizacao> listaDeLocal = carregarListaDoArquivo();
            listaDeLocal.add(local);

            System.out.println(local);
            try (FileWriter escreverArquivo = new FileWriter(ARQUIVO_JSON)) {
                escreverArquivo.write(gson.toJson(listaDeLocal));
            }
        }catch (IllegalArgumentException e){
            System.out.println("URL nao conseguiu ser criado!" + e.getMessage());
        }catch (JsonSyntaxException | IllegalStateException e){
            System.out.println("Numero a mais na consulta do cep.");
        }
    }
    private List<Localizacao> carregarListaDoArquivo() {
        try (FileReader leitor = new FileReader(ARQUIVO_JSON)) {
            return new Gson().fromJson(leitor, ArrayList.class);
        } catch (IOException | JsonSyntaxException e) {
            return new ArrayList<>();
        }
        }
}

Classe Main:

package programa.endereco;

import programa.endereco.modelos.ConexaoApiCEP;

import java.io.IOException;
import java.util.Scanner;

public class Principal {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner busca = new Scanner(System.in);
        String fecharPrograma = "";

        while (!fecharPrograma.equalsIgnoreCase("sair")) {
            System.out.println("Insira um cep para busca: ");
            String cep = busca.nextLine();
            ConexaoApiCEP conexao = new ConexaoApiCEP();
            conexao.fazerBusca(cep);
            System.out.println("\nDeseja buscar mais CEP? ");
            fecharPrograma = busca.nextLine();
        }
        System.out.println("Sistema encerrado.");
    }
}
1 resposta

Olá Kevin! Tudo certo?

Parabéns por ter concluído o desafio! Analisar e melhorar o código é uma parte importante do aprendizado e do desenvolvimento como programador. Vamos dar uma olhada no seu código e ver onde podemos fazer algumas melhorias.

  1. Separação de Responsabilidades: Você já fez um ótimo trabalho separando a lógica de conexão com a API na classe ConexaoApiCEP. No entanto, considere criar uma classe separada para lidar com a leitura e escrita de arquivos JSON. Isso segue o princípio de responsabilidade única, tornando o código mais modular e fácil de manter. Mas se não me engano isso deve acontecer ao decorrer do curso.

  2. Uso de Recursos Try-With: Você já está usando try-with-resources para o FileWriter, o que é ótimo! Isso garante que os recursos sejam fechados corretamente. Certifique-se de fazer o mesmo para qualquer outro recurso que precise ser fechado, como FileReader.

  3. Feedback ao Usuário: Na classe Principal, você poderia melhorar a interação com o usuário, talvez fornecendo uma mensagem mais clara sobre o que está acontecendo, especialmente em caso de erro.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.