13 - 馃摤 Peticiones HTTP con fetch y Axios
Aprende a realizar peticiones HTTP para obtener o enviar datos a una API, usando las funciones fetch nativas de JavaScript y la popular librer铆a Axios dentro de tus proyectos con Next.js.
馃實 ¿Qu茅 es una petici贸n HTTP?
Una petici贸n HTTP es la forma en la que el navegador o el servidor se comunica con una API o servicio externo.
En Next.js, podemos hacer estas peticiones tanto en el cliente (con "use client") como en el servidor.
Existen diferentes tipos de peticiones:
GET→ Obtener datos.POST→ Enviar nuevos datos.PUT / PATCH→ Actualizar datos existentes.DELETE→ Eliminar datos.
⚙️ Uso de fetch() — Nativo en JavaScript
El m茅todo fetch() est谩 integrado en el navegador y tambi茅n disponible en el entorno de servidor de Next.js.
Permite hacer solicitudes HTTP f谩cilmente.
馃摝 Ejemplo: obtener datos de una API p煤blica
// app/usuarios/page.js
"use client";
import { useEffect, useState } from "react";
export default function UsuariosPage() {
const [usuarios, setUsuarios] = useState([]);
useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/users")
.then(res => res.json())
.then(data => setUsuarios(data));
}, []);
return (
<main className="p-6">
<h1 className="text-2xl font-bold">馃懃 Lista de Usuarios</h1>
<ul className="mt-3">
{usuarios.map(u => (
<li key={u.id} className="border-b py-2">{u.name} — {u.email}</li>
))}
</ul>
</main>
);
}
馃З Resultado visual:
- 馃懁 Leanne Graham — leanne@example.com
- 馃懁 Ervin Howell — ervin@example.com
- 馃懁 Clementine Bauch — clementine@example.com
await o .then() para manejar la respuesta.
馃摛 Enviar datos con fetch()
Tambi茅n puedes enviar informaci贸n al servidor usando el m茅todo POST junto con fetch().
// app/formulario/page.js
"use client";
import { useState } from "react";
export default function Formulario() {
const [nombre, setNombre] = useState("");
async function manejarEnvio(e) {
e.preventDefault();
const res = await fetch("/api/usuarios", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ nombre }),
});
const data = await res.json();
alert(data.mensaje);
}
return (
<form onSubmit={manejarEnvio} className="p-4 bg-light rounded">
<input
type="text"
value={nombre}
onChange={(e) => setNombre(e.target.value)}
placeholder="Tu nombre"
className="border p-2 rounded w-full mb-3"
/>
<button type="submit" className="bg-blue-600 text-white px-4 py-2 rounded">
Enviar
</button>
</form>
);
}
Y en tu API Route podr铆as tener algo as铆:
// app/api/usuarios/route.js
export async function POST(request) {
const { nombre } = await request.json();
return Response.json({ mensaje: `✅ Usuario ${nombre} creado con 茅xito` });
}
⚡ Uso de Axios — Librer铆a m谩s potente
Axios es una alternativa popular a fetch(), con una sintaxis m谩s limpia, manejo autom谩tico de errores y soporte integrado para JSON.
Primero instala la librer铆a:
npm install axios
Luego puedes importarla en tus componentes:
// app/posts/page.js
"use client";
import axios from "axios";
import { useEffect, useState } from "react";
export default function PostsPage() {
const [posts, setPosts] = useState([]);
useEffect(() => {
axios.get("https://jsonplaceholder.typicode.com/posts?_limit=5")
.then(res => setPosts(res.data))
.catch(err => console.error(err));
}, []);
return (
<main className="p-6">
<h1 className="text-2xl font-bold">馃摪 脷ltimos Posts</h1>
{posts.map(p => (
<div key={p.id} className="border p-3 rounded mb-2">
<h4 className="font-bold">{p.title}</h4>
<p>{p.body}</p>
</div>
))}
</main>
);
}
馃З Resultado visual:
馃摪 脷ltimos Posts
T铆tulo del Post
Contenido del art铆culo...
馃摌 Diferencias entre fetch y Axios
| Caracter铆stica | fetch() | Axios |
|---|---|---|
| Soporte nativo | ✅ S铆 | ❌ Requiere instalaci贸n |
| Transformaci贸n JSON autom谩tica | ❌ No | ✅ S铆 |
| Manejo de errores | Manual | Autom谩tico |
| Intercepci贸n de peticiones | ❌ No | ✅ S铆 |
✅ Resumen
- 馃摗
fetch()es nativo, ideal para tareas simples. - ⚡
Axiosofrece una sintaxis m谩s potente y legible. - 馃З Ambas se pueden usar en el cliente o servidor dentro de Next.js.
- 馃攧 脷salas para conectar tu frontend con APIs externas o tus propias rutas API.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias