Hoy vamos a aprender a crear una aplicación Flull Stack con Next y Fast API.

1. Configuración del Proyecto
- Pre-requisitos:
- Node.js instalado.
- Python instalado (se recomienda 3.9 o superior).
- Familiaridad con REST APIs y React.
- Estructura del Proyecto: Crea un directorio para tu proyecto:
my-fullstack-app/ ├── backend/ └── frontend/
2. Configuración del Backend con FastAPI
Instalar FastAPI y Uvicorn: Navega al directorio backend/ y ejecuta:
pip install fastapi uvicorn
Crea tu servidor FastAPI: En backend/, crea un archivo main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Welcome to FastAPI Backend!"}
@app.get("/api/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
Ejecutar el servidor: uvicorn main:app --reload El backend estará disponible en http://127.0.0.1:8000.
3. Configuración del Frontend con Next.js
- Crear una app Next.js: Navega al directorio
frontend/y ejecuta:
npx create-next-app@latest .
Configurar Axios para llamadas al backend: Instala Axios:
npm install axios
Crea un archivo lib/api.js para manejar las peticiones:
import axios from "axios";
const api = axios.create({
baseURL: "http://127.0.0.1:8000", // Backend URL
});
export default api;
Crear una página que consuma la API: Edita pages/index.js:
import { useState, useEffect } from "react";
import api from "../lib/api";
export default function Home() {
const [data, setData] = useState(null);
useEffect(() => {
api.get("/api/items/1?q=test").then((response) => {
setData(response.data);
});
}, []);
return (
<div>
<h1>Next.js + FastAPI App</h1>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}
Ejecuta el servidor Next.js:
npm run dev
El frontend estará disponible en http://localhost:3000.
4. Configuración del Proxy para el Desarrollo
Para evitar problemas de CORS, configura un proxy en Next.js.
Edita next.config.js:
module.exports = {
async rewrites() {
return [
{
source: "/api/:path*",
destination: "http://127.0.0.1:8000/api/:path*",
},
];
},
};
Reinicia el servidor de desarrollo para aplicar los cambios.
5. Extensiones y Mejoras
Añadir un Modelo en FastAPI: Define un modelo con Pydantic en main.py:
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
description: str | None = None
Endpoint para crear items:
@app.post("/api/items/")
def create_item(item: Item):
return {"item": item}
Llamar a la API desde Next.js: En una página como pages/create.js:
import { useState } from "react";
import api from "../lib/api";
export default function CreateItem() {
const [item, setItem] = useState({ name: "", price: 0, description: "" });
const handleSubmit = async (e) => {
e.preventDefault();
const response = await api.post("/api/items/", item);
console.log(response.data);
};
return (
<form onSubmit={handleSubmit}>
<input
type="text"
placeholder="Name"
value={item.name}
onChange={(e) => setItem({ ...item, name: e.target.value })}
/>
<input
type="number"
placeholder="Price"
value={item.price}
onChange={(e) => setItem({ ...item, price: parseFloat(e.target.value) })}
/>
<textarea
placeholder="Description"
value={item.description}
onChange={(e) => setItem({ ...item, description: e.target.value })}
/>
<button type="submit">Create Item</button>
</form>
);
}
6. Despliegue
- Backend:
- Utiliza Docker o servicios como AWS/GCP para desplegar tu API de FastAPI.
- Frontend:
- Despliega la app Next.js con Vercel o similar.

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.