馃摤 Peticiones HTTP con fetch y Axios

Next.js Peticiones HTTP

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
馃挕 fetch() devuelve una promesa. Siempre debes usar 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.
  • Axios ofrece 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.
馃殌 Saber manejar peticiones HTTP es clave para conectar tu app con datos reales.

Publicar un comentario

0 Comentarios