1
resposta

[Projeto] Faça como eu fiz: consumindo a API do OMDb

public class PrincipalComBusca {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner leitura = new Scanner(System.in);
        System.out.println("Digite um filme para busca: ");
        var busca = leitura.nextLine();

        String endereco = "https://www.omdbapi.com/?t=" + busca + "&apikey=chave";

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(endereco))
                .build();
        HttpResponse<String> response = client
                .send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}

https://github.com/plasta4/2944-java-screenmatch-consumindo-webservice#

1 resposta

Olá, Pedro. Como vai?

Parabéns pela excelente implementação! Consumir uma API externa é um marco muito importante na jornada de qualquer pessoa desenvolvedora. Seu código seguiu perfeitamente o padrão moderno do Java (disponível a partir do Java 11) utilizando as classes HttpClient, HttpRequest e HttpResponse de forma limpa e direta.

Você estruturou muito bem o fluxo básico de uma requisição HTTP. No entanto, para que o seu projeto fique pronto para rodar no mundo real e não apresente falhas inesperadas, existem dois pontos críticos que precisamos tratar: o espaço em branco na busca e a segurança da sua chave de API.

Vamos analisar como melhorar esses pontos:

1. O problema dos espaços em branco na URL

Se você tentar buscar um filme com nome simples, como "Matrix", seu código funcionará perfeitamente. Mas se você buscar "Interstellar" ou "The Matrix", o programa poderá estourar uma exceção de URL inválida (IllegalArgumentException). Isso acontece porque URLs não podem conter espaços em branco ou caracteres especiais diretamente.

Para resolver isso de forma robusta no Java, precisamos codificar o texto digitado pelo usuário usando a classe URLEncoder. Veja como alterar a linha do endereço:

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

// ... dentro do seu main ...
var busca = leitura.nextLine();

// Codifica os espaços transformando-os em %20 ou + para a URL
String buscaCodificada = URLEncoder.encode(busca, StandardCharsets.UTF_8);
String endereco = "https://www.omdbapi.com/?t=" + buscaCodificada + "&apikey=chave";

2. Tratamento de Erros (Boas Práticas)

No momento, a sua assinatura do método main está usando o throws IOException, InterruptedException. Isso joga a responsabilidade do erro para a JVM, fazendo o programa "crachar" se a internet cair ou a API do OMDb estiver fora do ar.

Uma boa prática de mercado é capturar esses erros com um bloco try/catch para dar um retorno amigável ao usuário:

try {
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(endereco))
            .build();
            
    HttpResponse<String> response = client
            .send(request, HttpResponse.BodyHandlers.ofString());
            
    System.out.println(response.body());
} catch (IOException | InterruptedException e) {
    System.out.println("Houve um erro de conexão ao tentar buscar o filme.");
    System.out.println(e.getMessage());
}

3. Dica de Ouro: Esconda sua API Key antes do Push!

Como notei que você deixou o link do seu repositório do GitHub no post, deixo um alerta amigável: nunca faça commit do seu código contendo a sua chave real do OMDb no código-fonte. Robôs varrem o GitHub o tempo todo atrás de chaves expostas. Mantenha sempre a palavra "chave" ou use variáveis de ambiente para carregar o seu token de autenticação.

O seu projeto do ScreenMatch está ficando excelente. O próximo passo divertido será usar uma biblioteca como o Gson ou Jackson para transformar esse texto puro (JSON) que a API devolve em um objeto Java real!

Espero que possa ter lhe ajudado!