Consumindo uma API de maneira simples com Java
Olá, hoje vou mostrar pra você como consumir uma API de maneira bem simples utilizando o Java, a ideia é construir um software onde o usuário informe seu CEP e mostramos na tela os dados de endereço, para isto vamos usar o webservice viacep.
É interessante saber que, se você colocar na barra de pesquisa do seu navegador “ https://viacep.com.br/ws/SEU-CEP/json/” e substituir o “SEU-CEP” na URL pelo CEP da sua casa, vai aparecer na tela um JSON, com propriedades e valores, mostrando seus dados de endereço, como o exemplo abaixo:
Sabendo disso, nossa missão é, através do Java, enviar uma requisição para essa URL do viacep e pegar essa resposta, então vamos começar.
Primeiramente precisamos de uma classe que represente os dados que queremos como resposta, o viacep trás no JSON diversas propriedades, mas nós queremos mostrar apenas logradouro, bairro e localidade, então criei uma classe Endereco com estes atributos conforme imagem abaixo.
Agora precisamos criar um main, pra poder pegar o CEP do usuário
Resumidamente:
- Na linha 10 pedimos para o usuário informar o CEP
- Linha 11 nós armazenamos o que foi digitado pelo usuário em uma variável
- Na linha 12 eu criei um objeto do tipo Endereco, esse objeto vai receber o retorno do método “buscaEnderecoPelo(cep)”, para isso precisamos passar o cep que o usuário informou como parâmetro.
- Nas próximas linhas eu apenas exibo na tela a resposta.
Acompanhe abaixo a classe chamada ServicoDeCep
Explicação:
A URL do webservice sempre será a mesma “http://viacep.com.br/ws/”, então decidi armazenar isso em uma String estática na linha 13.
Para cada requisição que fazemos, o HTTP nos retorna um código de resposta, se a requisição foi feita com sucesso, ele nos retorna o código 200, se ouve falha na requisição, por exemplo: Informamos um CEP inválido, o HTTP nos retorna o código 404 (NOT FOUND), que com certeza você já deve ter ouvido falar, bom, sabendo disto, eu criei uma variável estática códigoSucesso e atribui o valor 200 para ela, na linha 14.
Agora vamos implementar o método buscaEnderecoPelo(String cep), na linha 17 eu criei uma String urlParaChamada que recebe o valor de webservice + o cep que recebemos como parâmetro + “/json”, como vimos lá em cima, precisamos enviar esta URL para receber o JSON de resposta.
Na linha 20 criei um objeto url do tipo URL e passei a String urlParaChamada que montamos.
Na linha 21 eu criei um objeto conexao do tipo HttpURLConnection e fiz a requisição pro webservice passando a url.
Uma vez que a requisição foi feita, precisamos conferir se foi feita com sucesso, isso é verificado na linha 23, se o código de resposta por diferente de 200, eu já disparo um erro e finalizo o programa.
Caso contrário, na linha 26 eu crio um objeto resposta do tipo BufferedReader, esse objeto recebe conexao.getInputStream().
O método getInputStream() nos retorna aquele JSON de resposta que contem os dados de endereço.
Perfeito, já temos o JSON de resposta, agora precisamos converter esse JSON em uma String, isso é feito na linha 27, eu passo o JSON como parâmetro no método “converteJsonEmString()” e esse método me retorna uma String, abaixo vou deixar a implementação da Classe.
Agora que já temos o jsonEmString, precisamos pegar os dados de endereço que vieram no JSON e atribuir em um objeto do tipo Endereço, mas para isso vamos utilizar uma biblioteca do Google chamada Gson, você vai precisar fazer download desse .jar e importar para o seu projeto, clique neste link para realizar o download.
Voltando a classe ServicoDeCep, o método “gson.fromJson()” que estamos utilizando na linha 30 funciona da seguinte maneira
Ele pega as propriedades do JSON e atribui automaticamente para os atributos da classe Endereco (mas para isso os atributos precisam estar escritos da mesma forma), por isso esse método espera como parâmetro o próprio JSON em String e a classe Endereco.
Aí na linha 30 nós criamos um objeto do tipo Endereco, esse objeto recebe o retorno do método gson.fromJson(), que vai fazer toda amarração que vimos na imagem acimae nos devolver o endereco com todos atributos preenchidos com logradouro, bairro e localidade, depois isso apenas retornamos o objeto endereco para o main, que irá exibir os atributos na tela.
Até a próxima :D
Baixe o projeto completo neste link: https://drive.google.com/file/d/1-Rk8ounu4V495i8VSxgkk4VJ5_Zm760L/view