Unidad 3: Trabajo con APIs y Datos Externos
Objetivo: Aprender a consumir APIs externas y manejar datos en el frontend, utilizando fetch(), JSON y promesas para realizar operaciones asíncronas.
3.1 Introducción a fetch() y Consumo de APIs REST
¿Qué vamos a aprender?
En esta sección aprenderemos a realizar peticiones HTTP a una API utilizando fetch(). Veremos cómo obtener datos (GET), enviar información (POST) y manejar respuestas de manera asíncrona con async/await.
Peticiones GET y POST con fetch
A continuación, se muestra un ejemplo de cómo realizar una petición GET a una API pública y cómo enviar datos con POST:
Ejemplo de una petición GET a una API pública
GET para obtener datos de una API pública y los mostramos en la consola.
Importante la propiedad headers en la petición POST para especificar el tipo de contenido, y body para enviar los datos. La propiedad headers usualmete utiliza:
Content-Type: application/jsonpara enviar datos en formato JSON.Content-Type: text/plainpara enviar datos en texto plano.Content-Type: application/xmlpara enviar datos en formato XML.
Ejemplo de una petición POST enviando datos
POST y mostramos la respuesta.
Para eliminar datos, se utiliza el método DELETE en la petición. La propiedad method en la petición fetch() se utiliza para especificar el tipo de petición HTTP. Un ejemlo de petición DELETE sería:
Ejemplo de una petición DELETE
Uso de async/await en llamadas a APIs
async/await es una forma más moderna y legible de trabajar con operaciones asíncronas en JavaScript. A continuación, se muestra un ejemplo de cómo obtener datos de una API utilizando async/await:
Ejemplo con async/await
async/await nos permite escribir código más limpio y fácil de entender cuando trabajamos con operaciones asíncronas.
Podemos utilizar async/await en peticiones POST y DELETE de la misma manera que en el ejemplo anterior.
Ejemplo con async/await en una petición POST
async/await y manejamos la respuesta.
Ejercicios
Practica con fetch()
- Realiza una petición
GETahttps://jsonplaceholder.typicode.com/usersy muestra los usuarios en consola. - Envía un
POSTcon tu propio usuario a la misma API y muestra la respuesta.
Solución
3.2 Uso de JSON y Promesas en el Frontend
¿Qué vamos a aprender?
En esta sección aprenderemos a convertir datos entre JSON y objetos de JavaScript, y a manejar operaciones asíncronas con promesas.
Conversión entre JSON y objetos JavaScript
Conversión entre JSON y JavaScript
JSON.stringify() convierte un objeto en JSON y JSON.parse() hace lo contrario.
Promesas (.then(), .catch()) y su importancia en operaciones asíncronas
Las promesas son una forma de trabajar con operaciones asíncronas en JavaScript. Nos permiten manejar el éxito o error de una operación y encadenar múltiples operaciones asíncronas.
Ejemplo de una Promesa
Ejercicios
Practica con JSON y Promesas
- Crea una función que convierta un objeto a JSON y lo muestre en consola.
- Escribe una promesa que simule una petición a una API y resuelva con datos después de 3 segundos.
Solución
3.3 Manejo de Errores y Respuestas de APIs
¿Qué vamos a aprender?
Aprenderemos a manejar errores al trabajar con APIs y a validar respuestas HTTP.
Uso de try...catch
Ejemplo de try...catch en fetch()
catch manejará el error.
Manejo de errores HTTP (.ok, status)
Verificación del estado de respuesta
Ejercicios
Práctica con Manejo de Errores
- Modifica una petición
fetch()para que valide el estado HTTP antes de procesar los datos. Utiliza la URLhttps://jsonplaceholder.typicode.com/users. - Captura el error si
fetch()no puede conectarse a la API y muestra un mensaje en consola. Utiliza la URLhttps://jsonplaceholder.typicode.com/invalid-url.
Solución
``javascript linenums="1"
// Solución Ejercicio 1
async function obtenerUsuarios() {
try {
let response = await fetch("https://jsonplaceholder.typicode.com/users");
if (!response.ok) throw new Error(HTTP error! Status: ${response.status}`);
let data = await response.json();
console.log(data);
} catch (error) {
console.error("Error en la petición", error);
}
}
obtenerUsuarios();
// Solución Ejercicio 2
async function peticionInvalida() {
try {
let response = await fetch("https://jsonplaceholder.typicode.com/invalid-url");
if (!response.ok) throw new Error(HTTP error! Status: ${response.status});
let data = await response.json();
console.log(data);
} catch (error) {
console.error("No se pudo conectar a la API", error);
}
}
peticionInvalida();
Unidad 3: Trabajo con APIs y Datos Externos
📌 Objetivo: Aprender a consumir APIs externas y manejar datos en el frontend, utilizando fetch(), JSON y promesas para realizar operaciones asíncronas.
3.4 Proyecto Final: Aplicación de Gestión de Posts
Objetivo
Construir una aplicación web que permita gestionar posts obtenidos desde una API. La aplicación mostrará los posts en una tabla interactiva, permitirá visualizar el contenido en una ventana modal, eliminar posts, y añadir nuevos posts desde un formulario.
Requisitos
✅ Cargar los posts desde una API (https://jsonplaceholder.typicode.com/posts) y mostrarlos en una tabla.
✅ Cada post debe tener: un ID, título y un botón para visualizar el contenido en una modal.
✅ Cada post tendrá un botón de eliminar que lo eliminará de la tabla.
✅ Formulario en la parte superior para agregar nuevos posts.
✅ Los nuevos posts deben aparecer en la tabla sin necesidad de recargar la página.
Estructura base del HTML
Estructura base del HTML
- Formulario para añadir posts.
- Tabla donde se mostrarán los posts.
- Modal para visualizar el contenido de un post.
Estructura del app.js
El archivo app.js contendrá las funciones necesarias para manejar los posts. Se proporcionará el código con funciones vacías para que los alumnos las completen.
Estructura base del app.js con funciones a completar
cargarPosts(): Obtiene los posts de la API y los muestra en la tabla.agregarPost(event): Captura los datos del formulario y agrega un nuevo post a la tabla.eliminarPost(id): Elimina el post correspondiente de la tabla.mostrarPost(id): Muestra el contenido de un post en la ventana modal.
Pasos para la Implementación
1️⃣ Cargar los posts desde la API y listarlos en la tabla.
2️⃣ Completar la función agregarPost() para permitir añadir nuevos posts.
3️⃣ Implementar eliminarPost() para borrar posts de la tabla.
4️⃣ Desarrollar mostrarPost() para mostrar el contenido en una modal.
5️⃣ Estilizar la aplicación con CSS para mejorar la apariencia.
Solución al proyecto
Presentamos una posible solución al proyecto final.
Código completo de app.js
Explicación de la solución:
cargarPosts(): Obtiene los posts de la API y muestra los primeros 10.mostrarPosts(posts): Llena la tabla con los posts obtenidos.agregarPost(event): Captura los datos del formulario y agrega un nuevo post.eliminarPost(button): Elimina la fila de la tabla.mostrarPost(id, title, body): Muestra el contenido de un post en la ventana modal.