20. Haciendo peticiones a la API
Tutorial 20: Haciendo peticiones a la API
馃殌 Transformando nuestra funci贸n para consumir la API
Vamos a modificar nuestra funci贸n reqApi para que realmente haga la petici贸n a la API de Rick & Morty y obtenga los datos que necesitamos.
Paso 1: Hacer la funci贸n as铆ncrona
Primero, actualizamos nuestra funci贸n para que sea async:
javascript
// En tu App.js, reemplaza la funci贸n reqApi actual por:
const reqApi = async () => {
// Quitamos el console.log anterior
console.log("Haciendo petici贸n a la API...");
};
¿Por qu茅 async?
Nos permite usar await dentro de la funci贸n
Facilita el manejo de promesas
Hace el c贸digo m谩s limpio y legible
Paso 2: Hacer la petici贸n con fetch
Vamos a usar la API de fetch que viene incluida en los navegadores modernos:
javascript
const reqApi = async () => {
// Hacemos la petici贸n a la API
const api = await fetch("https://rickandmortyapi.com/api/character");
console.log("Respuesta de la API:", api);
};
URL de la API: https://rickandmortyapi.com/api/character
Paso 3: Probar la petici贸n
Guarda los cambios (Ctrl + S)
Abre la consola del navegador (F12 → pesta帽a "Console")
Haz clic en "Buscar personajes"
Deber铆as ver algo como:
text
Respuesta de la API: Response {type: "cors", url: "...", redirected: false, status: 200, ok: true, …}
Paso 4: Convertir la respuesta a JSON
La respuesta de fetch es un objeto Response. Necesitamos convertirlo a JSON para poder trabajar con los datos:
javascript
const reqApi = async () => {
// Hacemos la petici贸n
const api = await fetch("https://rickandmortyapi.com/api/character");
// Convertimos la respuesta a JSON
const characterApi = await api.json();
console.log("Datos en formato JSON:", characterApi);
};
Paso 5: Examinar la respuesta completa
Haz clic en el bot贸n nuevamente y examina lo que aparece en consola:
javascript
// La estructura completa que ver谩s es:
{
"info": {
"count": 826, // Total de personajes
"pages": 42, // Total de p谩ginas
"next": "https://...?page=2", // URL siguiente p谩gina
"prev": null // URL p谩gina anterior (null si es la primera)
},
"results": [ // Array con los personajes
{ /* primer personaje */ },
{ /* segundo personaje */ },
// ... 20 personajes en total
]
}
Paso 6: Ver los datos espec铆ficos
Vamos a hacer console.log m谩s espec铆ficos para entender mejor los datos:
javascript
const reqApi = async () => {
const api = await fetch("https://rickandmortyapi.com/api/character");
const characterApi = await api.json();
// Informaci贸n general
console.log("Total personajes en la API:", characterApi.info.count);
console.log("Total p谩ginas:", characterApi.info.pages);
console.log("Personajes en esta p谩gina:", characterApi.results.length);
// Primer personaje para examinar
console.log("Primer personaje:", characterApi.results[0]);
// Todos los nombres
console.log("Nombres de todos los personajes:");
characterApi.results.forEach((personaje, index) => {
console.log(`${index + 1}. ${personaje.name}`);
});
};
Paso 7: Analizar la estructura de un personaje
Cuando examines characterApi.results[0], ver谩s:
javascript
{
"id": 1,
"name": "Rick Sanchez",
"status": "Alive",
"species": "Human",
"type": "",
"gender": "Male",
"origin": {
"name": "Earth (C-137)",
"url": "https://rickandmortyapi.com/api/location/1"
},
"location": {
"name": "Citadel of Ricks",
"url": "https://rickandmortyapi.com/api/location/3"
},
"image": "https://rickandmortyapi.com/api/character/avatar/1.jpeg",
"episode": [
"https://rickandmortyapi.com/api/episode/1",
"https://rickandmortyapi.com/api/episode/2",
// ... m谩s episodios
],
"url": "https://rickandmortyapi.com/api/character/1",
"created": "2017-11-04T18:48:46.250Z"
}
馃攳 Validando que la petici贸n sea exitosa
Es buena pr谩ctica verificar que la petici贸n fue exitosa:
javascript
const reqApi = async () => {
try {
const api = await fetch("https://rickandmortyapi.com/api/character");
// Verificar que la respuesta sea OK
if (!api.ok) {
throw new Error(`Error HTTP: ${api.status}`);
}
const characterApi = await api.json();
console.log("¡Petici贸n exitosa!");
console.log("Status:", api.status); // Deber铆a ser 200
console.log("Primer personaje:", characterApi.results[0].name);
} catch (error) {
console.error("Error al hacer la petici贸n:", error);
}
};
馃搳 C贸digo completo de la funci贸n hasta ahora:
javascript
const reqApi = async () => {
console.log("Iniciando petici贸n a la API...");
try {
// 1. Hacer la petici贸n
const api = await fetch("https://rickandmortyapi.com/api/character");
// 2. Verificar que fue exitosa
if (!api.ok) {
throw new Error(`Error: ${api.status} - ${api.statusText}`);
}
// 3. Convertir a JSON
const characterApi = await api.json();
// 4. Mostrar informaci贸n 煤til
console.log("✅ Petici贸n exitosa!");
console.log("馃搳 Total personajes disponibles:", characterApi.info.count);
console.log("馃搫 Personajes obtenidos:", characterApi.results.length);
console.log("馃懁 Ejemplo - Primer personaje:", {
nombre: characterApi.results[0].name,
estado: characterApi.results[0].status,
especie: characterApi.results[0].species,
episodios: characterApi.results[0].episode.length,
imagen: characterApi.results[0].image
});
// 5. Mostrar todos los nombres
console.log("馃搵 Lista completa de nombres:");
characterApi.results.forEach((p, i) => {
console.log(`${i + 1}. ${p.name} - ${p.status} - ${p.species}`);
});
} catch (error) {
console.error("❌ Error en la petici贸n:", error);
alert("Hubo un error al cargar los personajes. Verifica tu conexi贸n.");
}
};
馃И Prueba de funcionamiento
Lo que deber铆as ver en consola al hacer clic:
text
Iniciando petici贸n a la API...
✅ Petici贸n exitosa!
馃搳 Total personajes disponibles: 826
馃搫 Personajes obtenidos: 20
馃懁 Ejemplo - Primer personaje: {nombre: "Rick Sanchez", estado: "Alive", especie: "Human", episodios: 51, imagen: "https://..."}
馃搵 Lista completa de nombres:
1. Rick Sanchez - Alive - Human
2. Morty Smith - Alive - Human
3. Summer Smith - Alive - Human
4. Beth Smith - Alive - Human
5. Jerry Smith - Alive - Human
... y as铆 sucesivamente
⚠️ Errores comunes y soluciones
Error 1: "Failed to fetch"
javascript
// Posibles causas:
// 1. Sin conexi贸n a internet
// 2. URL mal escrita
// 3. Problemas de CORS (aunque esta API lo permite)
// Soluci贸n: Verifica la URL
const api = await fetch("https://rickandmortyapi.com/api/character");
// NOTA: Aseg煤rate de que sea HTTPS y no HTTP
Error 2: "Unexpected token < in JSON"
javascript
// Causa: El servidor devuelve HTML en lugar de JSON
// Soluci贸n: Verifica que la API est茅 funcionando
// Puedes probar la URL directamente en el navegador
Error 3: La consola no muestra nada
javascript
// Causas posibles:
// 1. No guardaste los cambios (Ctrl + S)
// 2. La consola est谩 filtrada (aseg煤rate de ver "All" o "Default")
// 3. Hay un error silencioso
馃敆 Verificaci贸n manual de la API
Si tienes dudas sobre si la API funciona, puedes:
Abrir directamente en el navegador: https://rickandmortyapi.com/api/character
Usar curl en terminal: curl https://rickandmortyapi.com/api/character
Usar herramientas como Postman
馃幆 ¿Qu茅 hemos logrado?
✅ Creamos una funci贸n as铆ncrona
✅ Hicimos peticiones a una API real
✅ Convertimos la respuesta a JSON
✅ Validamos que la petici贸n sea exitosa
✅ Exploramos la estructura de los datos
✅ Implementamos manejo de errores b谩sico
馃摑 Actividad pr谩ctica
Modifica tu c贸digo para que:
Muestre solo personajes que est茅n vivos (status === "Alive")
Cuente cu谩ntos personajes son humanos (species === "Human")
Encuentre el personaje con m谩s episodios
javascript
// Ejemplo de soluci贸n parcial
const vivos = characterApi.results.filter(p => p.status === "Alive");
console.log(`Personajes vivos: ${vivos.length}`);
const humanos = characterApi.results.filter(p => p.species === "Human");
console.log(`Personajes humanos: ${humanos.length}`);
const masEpisodios = characterApi.results.reduce((prev, current) => {
return prev.episode.length > current.episode.length ? prev : current;
});
console.log(`Personaje con m谩s episodios: ${masEpisodios.name} (${masEpisodios.episode.length})`);
馃殌 Pr贸ximo paso
¡Excelente! Ya estamos obteniendo los datos de la API. En el siguiente tutorial vamos a:
Almacenar estos datos en el estado de React
Actualizar la interfaz para mostrar los personajes
Crear un componente espec铆fico para mostrar cada personaje
¿Lograste ver la lista completa de personajes en tu consola? ¡Comparte cu谩l es tu personaje favorito que apareci贸 en la lista! 馃専
¿Tuviste alg煤n problema con la petici贸n? ¡Describe el error en los comentarios para ayudarte
Comentarios
Publicar un comentario