Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

Duda Challenger Literalura Consumo API

Tengo el siguiente inconveniente, al cargar cualquier API me muestra los resultados correctamente pero al cargar la de Gutendex, no me arroja ningún resultado según POSTMAN se demora la consulta entre 11 a 13 seg. no se si por esa razón la descarte la consulta, aunque se supone que el código de la clase API es asíncrono. mi código solo para probar que traiga el string de la API es el siguiente: Clase Principal:

package com.alura.literalura.principal;

import com.alura.literalura.models.DatosLibro;
import com.alura.literalura.services.ConsumoAPI;
import com.alura.literalura.services.ConvierteDatos;

import java.util.Scanner;

public class Principal {
    private Scanner teclado = new Scanner(System.in);
    private ConsumoAPI consumoApi = new ConsumoAPI();
    private ConvierteDatos conversor = new ConvierteDatos();
//    private static final String URL_BASE ="https://swapi.dev/api/films/1/";
//    private static final String URL_BASE = "https://gutendex.com/books/?search=Great%20Expectations";
    private static final String URL_BASE = "https://stephen-king-api.onrender.com/api/books";

    public void muestraElMenu(){
        var opcion = -1;
        while (opcion != 0){
            var menu= """
                 1 - Buscar Libro por titulo
                 2 - Listar libros registrados
                 3 - Listar autores registrados
                 4 - Listar autores vivos en un determinado año
                 5 - Listar libros por idioma  
                 0 - Salir
            """;
            System.out.println(menu);
            opcion = teclado.nextInt();

            switch (opcion){
                case 1:
                    buscarLibroPorTitulo();
                    break;
                case 0:
                    System.out.println("Saliendo del programa");
                    break;
                default:
                    System.out.println("Opción inválida");
            }
        }
    }

    private void getDatosLibro() {
        //System.out.println("Escribe el nombre del libro que deseas buscar");
        //var nombreLibro = teclado.nextLine();
        var json = consumoApi.obtenerDatos(URL_BASE);
        System.out.println(json + "resultados devueltos");
        //return conversor.obtenerDatos(json, DatosLibro.class);
    }

      private void buscarLibroPorTitulo() {
          getDatosLibro();

      }

}

Clase ConsumoApi

package com.alura.literalura.services;

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(url))
                .build();
        try {
            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());
            String json = response.body();
            return json;
        } catch (IOException | InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}

Clase LiteraluraApplication

package com.alura.literalura;

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

@SpringBootApplication()
public class LiteraluraApplication implements CommandLineRunner {

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

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

Ya probe con otras API y los resultados los traer normal, pero con Gutendex no, y veo que esa API demora mucho en devolver las respuestas. como puedo solucionar ese problema.

Detalles de la solicitud en POSTMAN

1 respuesta
solución!

Ya el error era del API, ya me funciona normalmente aunque se demora un poco en enviar las respuestas.