Tutoriais aulas Help

Tutorial: Consumo de API's usando HttpCliente e OkHttp

Introdução

Consumir APIs é uma tarefa comum no desenvolvimento de aplicações modernas. Em Java, existem várias bibliotecas que facilitam essa tarefa, como o HttpClient, introduzido no Java 11, e a biblioteca de terceiros OkHttp. Este guia irá demonstrar como utilizar ambas as bibliotecas para consumir:

  • Uma API aberta: Scryfall API, que fornece dados sobre cartas de Magic: The Gathering.

  • Uma API que requer chave de acesso (API Key): OpenWeather API, que fornece dados meteorológicos.

1. Configurando o Ambiente

Requisitos

  • Java 11 ou superior: O HttpClient foi introduzido no Java 11.

  • Maven ou Gradle: Para gerenciar dependências, especialmente ao usar o OkHttp.

Adicionando Dependências

Para usar o OkHttp, adicione a dependência ao seu arquivo pom.xml (Maven):

<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.10.0</version> </dependency>

Ou no build.gradle (Gradle):

implementation 'com.squareup.okhttp3:okhttp:4.10.0'

2. Usando HttpClient

O HttpClient é uma API moderna para realizar requisições HTTP de forma assíncrona ou síncrona.

2.1. Consumindo a API Scryfall

A Scryfall API é uma API RESTful que não requer autenticação. Vamos buscar informações sobre uma carta específica.

Exemplo: Buscar a carta “Black Lotus”

import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class ScryfallExample { public static void main(String[] args) throws Exception { String cardName = "Black Lotus"; String url = "https://api.scryfall.com/cards/named?fuzzy=" + cardName.replace(" ", "+"); HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(url)) .GET() .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println("Status Code: " + response.statusCode()); System.out.println("Response Body:\n" + response.body()); } }

Explicação:

• Criamos um HttpClient usando o método newHttpClient(). • Construímos uma HttpRequest com a URL da API. • Enviamos a requisição e recebemos uma HttpResponse. • Imprimimos o status e o corpo da resposta.

2.2. Consumindo a API OpenWeather

A OpenWeather API requer uma chave de API para autenticação. Você precisa se registrar em OpenWeather e obter uma chave.

Exemplo: Obter o clima atual de uma cidade

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 OpenWeatherExample { public static void main(String[] args) throws Exception { String apiKey = "SUA_API_KEY_AQUI"; // Substitua pela sua chave de API String city = "São Paulo"; String url = "https://api.openweathermap.org/data/2.5/weather?q=" + city.replace(" ", "%20") + "&appid=" + apiKey + "&lang=pt&units=metric"; HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(url)) .GET() .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); if(response.statusCode() == 200) { System.out.println("Dados do clima em " + city + ":\n" + response.body()); } else { System.out.println("Erro: " + response.statusCode()); } } }

Explicação:

• Substitua "SUA_API_KEY_AQUI" pela sua chave de API. • Construímos a URL incluindo a cidade, chave de API, idioma (lang) e unidades (units). • Verificamos o código de status para lidar com erros.

3. Usando OkHttp

O OkHttp é uma biblioteca de cliente HTTP eficiente para Java e Android.

3.1. Consumindo a API Scryfall

Exemplo: Buscar a carta “Black Lotus”

import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class ScryfallOkHttpExample { public static void main(String[] args) throws Exception { String cardName = "Black Lotus"; String url = "https://api.scryfall.com/cards/named?fuzzy=" + cardName.replace(" ", "+"); OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); try (Response response = client.newCall(request).execute()) { if(response.isSuccessful()) { String responseBody = response.body().string(); System.out.println("Resposta:\n" + responseBody); } else { System.out.println("Erro: " + response.code()); } } } }

Explicação:

• Criamos um OkHttpClient. • Construímos um Request com a URL desejada. • Executamos a chamada e obtemos um Response. • Utilizamos um bloco try-with-resources para fechar automaticamente a resposta.

3.2. Consumindo a API OpenWeather

Exemplo: Obter o clima atual de uma cidade

import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class OpenWeatherOkHttpExample { public static void main(String[] args) throws Exception { String apiKey = "SUA_API_KEY_AQUI"; // Substitua pela sua chave de API String city = "São Paulo"; String url = "https://api.openweathermap.org/data/2.5/weather?q=" + city.replace(" ", "%20") + "&appid=" + apiKey + "&lang=pt&units=metric"; OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); try (Response response = client.newCall(request).execute()) { if(response.isSuccessful()) { String responseBody = response.body().string(); System.out.println("Dados do clima em " + city + ":\n" + responseBody); } else { System.out.println("Erro: " + response.code()); } } } }

Explicação:

• Similar ao exemplo anterior, substitua "SUA_API_KEY_AQUI" pela sua chave de API. • Usamos o OkHttpClient para realizar a requisição GET. • Tratamos a resposta verificando se a requisição foi bem-sucedida.

4. Boas Práticas

• Gerenciamento de Exceções: Sempre trate possíveis exceções, especialmente em operações de rede. • Chaves de API: Nunca exponha suas chaves de API em repositórios públicos. Utilize variáveis de ambiente ou arquivos de configuração seguros. • Parsing de JSON: Utilize bibliotecas como Jackson ou Gson para converter o JSON de resposta em objetos Java. • Timeouts: Configure timeouts para evitar que a aplicação fique aguardando indefinidamente. • Pooling de Conexões: Reutilize instâncias de HttpClient ou OkHttpClient para melhorar a performance.

Observação: Certifique-se de substituir "SUA_API_KEY_AQUI" pela sua chave de API real ao testar os exemplos com o OpenWeather.

Last modified: 01 March 2025