Cómo crear una API interna con Route Handlers en Next.js

Cuando desarrollamos una aplicación con Next.js, no siempre necesitamos crear un backend independiente para manejar peticiones, usuarios o datos. Gracias a los Route Handlers, podemos construir una API interna directamente dentro de nuestro proyecto Next.js utilizando el App Router.

Los Route Handlers permiten crear endpoints que responden a métodos HTTP como GET, POST, PUT, PATCH y DELETE, facilitando la comunicación entre el frontend y servicios externos o bases de datos.

Crear nuestro primer endpoint

En un proyecto de Next.js con App Router, los endpoints se crean mediante un archivo llamado route.js o route.ts dentro de la carpeta app.

Por ejemplo:

app/
 └── api/
     └── usuarios/
         └── route.js

Dentro de route.js podemos crear una función para responder a solicitudes GET:

export async function GET() {
  return Response.json({
    mensaje: "API funcionando correctamente"
  });
}

Ahora podemos acceder al endpoint mediante:

/api/usuarios

Si visitamos esa dirección desde el navegador o realizamos una petición desde JavaScript, recibiremos la respuesta en formato JSON.

Recibir información con POST

Los Route Handlers también permiten recibir datos enviados desde el cliente. Para hacerlo, podemos utilizar request.json():

export async function POST(request) {
  const datos = await request.json();

  return Response.json({
    mensaje: "Usuario recibido",
    usuario: datos
  });
}

Desde el frontend podríamos realizar una petición:

const respuesta = await fetch("/api/usuarios", {
  method: "POST",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    nombre: "Johan",
    email: "correo@ejemplo.com"
  })
});

Esto permite enviar información al servidor sin necesidad de crear una API externa.

Conectar con una base de datos

Una de las principales ventajas es que el Route Handler puede comunicarse directamente con servicios del servidor, como Prisma, PostgreSQL, MongoDB o Supabase.

Por ejemplo, podríamos consultar usuarios desde una base de datos y devolverlos:

export async function GET() {
  const usuarios = await obtenerUsuarios();

  return Response.json(usuarios);
}

También podemos manejar errores:

export async function GET() {
  try {
    const usuarios = await obtenerUsuarios();

    return Response.json(usuarios);
  } catch (error) {
    return Response.json(
      { error: "No se pudieron obtener los usuarios" },
      { status: 500 }
    );
  }
}

¿Cuándo utilizar Route Handlers?

Son especialmente útiles cuando necesitamos crear una API sencilla para nuestra propia aplicación: formularios, autenticación, operaciones CRUD, integración con bases de datos, procesamiento de archivos o comunicación con servicios externos.

La gran ventaja es que frontend y backend pueden convivir dentro del mismo proyecto. Esto reduce la cantidad de infraestructura necesaria y permite desarrollar aplicaciones completas utilizando Next.js.

En proyectos pequeños y medianos, los Route Handlers son una alternativa práctica para construir una API interna de forma rápida, organizada y escalable.

Te puede interesar...

Deja un comentario