Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
4
respuestas

Duda API Gutendex

Hola, tengo un problema intente hacer un llamado a los datos que proporciona la API pero en consola me aparece lo siguiente:

<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.18.0 (Ubuntu)</center>
</body>
</html>

Ya no esta disponible para consumir la API o que significa? Gracias.

4 respuestas

¡Hola Kevin, espero que estés bien!

Duda: ¿Podría mostrarme tu código por favor?

Por lo que describes, el mensaje de error que estás recibiendo al intentar hacer un llamado a la API Gutendex es un código de estado HTTP 301, que indica que la URL a la que estás intentando acceder ha sido movida permanentemente a otra dirección. Esto puede deberse a que la API ha cambiado su ubicación o que la URL que estás utilizando ya no es la correcta.

Para solucionar este problema, te recomendaría que verifiques la documentación de la API Gutendex para asegurarte de que estás utilizando la URL correcta y de que estás realizando la solicitud de la manera adecuada. Es posible que la API haya cambiado su estructura o sus endpoints, por lo que es importante estar al tanto de cualquier actualización.

Además, te sugiero que revises si la API requiere algún tipo de autenticación o si hay algún parámetro adicional que debas incluir en tu solicitud. Asegúrate de seguir las indicaciones proporcionadas en la documentación para poder acceder correctamente a los datos que necesitas.

Espero que esta información te sea de ayuda para resolver tu inconveniente con la API Gutendex. Si necesitas más asistencia, no dudes en preguntar.

¡Espero haber ayudado y buenos estudios!

Hola Brenda, gracias y si te comparto mi codigo.

en mi clase ConsumoAPI tengo lo siguiente:

package com.alura.desafio1.libros.servicios;

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

public class ConsumoAPI {
    public String obtenerDatos(String url){
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("http://foo.com/"))
                .build();

        HttpResponse<String> response = null;
        try {
            response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        String json = response.body();
        return json;
    }
}

En mi Clase convierteDatos:

package com.alura.desafio1.libros.servicios;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ConviereDatos implements IConvierteDatos{
    private ObjectMapper mapper = new ObjectMapper();

    @Override
    public <T> T obtenerDatos(String json, Class<T> clase) {
        try {
            return mapper.readValue(json.toString(), clase);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }
}

Mi interfaz ConvierteDatos:

package com.alura.desafio1.libros.servicios;

public interface IConvierteDatos {
    <T> T obtenerDatos(String json, Class<T> clase);
}

Mi clase principal:

package com.alura.desafio1.libros.principal;

import com.alura.desafio1.libros.servicios.ConsumoAPI;
import com.alura.desafio1.libros.servicios.ConviereDatos;

public class Principal {

    private static final String URL = "http://gutendex.com/books";
    private ConsumoAPI consumoAPI = new ConsumoAPI();
    private ConviereDatos conversor = new ConviereDatos();

    public void ejecutable(){
        var json = consumoAPI.obtenerDatos(URL);
        System.out.println(json);

    }
}

Y por ultimo mi clase LibrosApplication donde ejecuto el programa:

package com.alura.desafio1.libros;

import com.alura.desafio1.libros.principal.Principal;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LibrosApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(LibrosApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        Principal principal = new Principal();
        principal.ejecutable();
    }
}

Le di una leida a la documentacion de GitHub que menciona la API e intente otra forma de llamar datos por ID, por pagina, por autor, por lenguaje pero me aparece lo mismo.

Tengo el mismo error

Hola chicos,

El error está en la clase ConsumoAPI donde un parámetro llamado url del tipo String es recibido pero no es utilizado en la parte de la variable request, por lo que no es posible hacer la solicitud correcta.

Lo correcto sería así:

HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .build();

Porque en el código proporcionado la solicitud se hace a una dirección "http://foo.com/", siendo que la URL de la API del desafío es otra.

Creo que la dirección fija del código es solo un ejemplo y debe ser reemplazada por la URL de la solicitud de Gutendex :)

Saludos y buenos estudios