3
respostas

Chave

Boa noite, A chave fica exposta dessa forma? Ou deveria ter feito de outra forma?

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

public class BuscadorDeLivros {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner leitorDeLivros = new Scanner(System.in);
        System.out.println("Digite o nome do Livro : ");
        var nomeDoLivro = leitorDeLivros.nextLine();
        String endereco = "https://www.googleapis.com/books/v1/volumes?q=" + URLEncoder.encode(nomeDoLivro, "UTF-8") + "&apikey=0000000";
        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());
    }
}
3 respostas

Oii André, tudo bem?

É uma ótima pergunta que você levantou sobre a exposição da chave da API no seu código. De fato, manter a chave da API diretamente no código-fonte, não é uma prática recomendada por questões de segurança. Se o código for exposto ou compartilhado, outras pessoas podem ter acesso à sua chave, o que pode levar a usos não autorizados e potencialmente custosos.

Uma abordagem mais segura seria externalizar a chave para um arquivo de configuração ou variáveis de ambiente, que não são incluídas no repositório de código (especialmente se for um repositório público). Aqui está um exemplo de como você poderia modificar seu código para utilizar uma variável de ambiente para a chave da API:

  1. Primeiro, defina a chave da API como uma variável de ambiente no seu sistema. No Windows, isso pode ser feito no Painel de Controle, e no Linux ou macOS, você pode adicionar a seguinte linha ao seu arquivo .bashrc ou .bash_profile:

    export GOOGLE_BOOKS_API_KEY="sua_chave_aqui"
    
  2. Em seguida, modifique seu código para ler esta variável de ambiente:

    import java.io.IOException;
    import java.net.URI;
    import java.net.URLEncoder;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    import java.util.Scanner;
    
    public class BuscadorDeLivros {
        public static void main(String[] args) throws IOException, InterruptedException {
            Scanner leitorDeLivros = new Scanner(System.in);
            System.out.println("Digite o nome do Livro : ");
            var nomeDoLivro = leitorDeLivros.nextLine();
            String apiKey = System.getenv("GOOGLE_BOOKS_API_KEY");
            String endereco = "https://www.googleapis.com/books/v1/volumes?q=" + URLEncoder.encode(nomeDoLivro, "UTF-8") + "&apikey=" + apiKey;
            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());
        }
    }
    

Desta forma, sua chave da API fica protegida e não exposta no código-fonte.

Um abraço e bons estudos.

Bom dia, eu fiz assim: abri o prompt de comando e fui até Variáveis do Sistema", "Novo...". Crie o nome da variável e inseri o valor. Poderia me informar se é isso? novo código :

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 PrincipalComBusca {
    public static void main(String[] args) throws IOException, InterruptedException {

        Scanner buscadorFilmes = new Scanner(System.in);
        System.out.println("Digite o nome do Filme : ");
        var busca = buscadorFilmes.nextLine();

        // Obtenha a chave da API da variável de ambiente
        String apiKey = System.getenv("minhachave1");
        if (apiKey == null) {
            System.err.println("A chave da API OMDB não está definida como uma variável de ambiente.");
            return;
        }

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

        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());

    }
}

Seria isso ou nem cheguei perto? Obrigado e bom dia

Oii!

É isso mesmo, parabéns por encontrar uma solução! É uma ótima maneira de praticar.

Continue firme nos estudos.

Um abraço.