Crea un MVP de API de inventario con FastAPI en 1 hora
Aprende a construir una API REST para gestionar stock de productos usando FastAPI, ideal para emprendimientos que necesitan controlar inventario sin dependencias complejas.
Si estás construyendo un emprendimiento de retail, e-commerce o logística, necesitas una forma simple de gestionar el inventario de tus productos. FastAPI te permite crear una API robusta y documentada automáticamente en muy poco tiempo.
¿Qué vamos a construir?
Una API REST con FastAPI que permita:
- Listar todos los productos del inventario
- Obtener el detalle de un producto por ID
- Registrar nuevos productos
- Actualizar el stock de un producto existente
Prerrequisitos
- Instalar Python 3.8 o superior
- Instalar FastAPI y un ASGI server (Uvicorn):
pip install fastapi uvicorn
Paso 1: Crear el proyecto
Crea una carpeta para tu proyecto y un archivo main.py:
mkdir inventory-api
cd inventory-api
touch main.py
Paso 2: Definir los modelos de datos
Usaremos pydantic (incluido en FastAPI) para validar los datos de entrada y salida. En main.py, escribe:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime
class ProductBase(BaseModel):
name: str
description: Optional[str] = None
price: float
stock: int
class ProductCreate(ProductBase):
pass
class Product(ProductBase):
id: int
created_at: datetime
class Config:
orm_mode = True
Paso 3: Configurar la base de datos en memoria
Para este MVP usaremos una lista en Python como «base de datos» temporal:
# Simulación de base de datos
fake_db: List[Product] = []
next_id = 1
Paso 4: Crear endpoints
Agrega las rutas de la API:
app = FastAPI(title="API de Inventario")
@app.post("/products/", response_model=Product)
def create_product(product: ProductCreate):
global next_id
new_product = Product(
id=next_id,
name=product.name,
description=product.description,
price=product.price,
stock=product.stock,
created_at=datetime.now()
)
fake_db.append(new_product)
next_id += 1
return new_product
@app.get("/products/", response_model=List[Product])
def read_products():
return fake_db
@app.get("/products/{product_id}", response_model=Product)
def read_product(product_id: int):
for product in fake_db:
if product.id == product_id:
return product
raise HTTPException(status_code=404, detail="Producto no encontrado")
@app.put("/products/{product_id}", response_model=Product)
def update_product(product_id: int, product: ProductCreate):
for index, existing in enumerate(fake_db):
if existing.id == product_id:
updated = Product(
id=product_id,
name=product.name,
description=product.description,
price=product.price,
stock=product.stock,
created_at=existing.created_at
)
fake_db[index] = updated
return updated
raise HTTPException(status_code=404, detail="Producto no encontrado")
Paso 5: Ejecutar la API
Guarda el archivo y ejecuta el server:
uvicorn main:app --reload
Abre tu navegador en http://localhost:8000/docs. Verás la documentación automática de Swagger UI.
Ejemplo de uso
Usa curl para probar la creación de un producto:
curl -X POST "http://localhost:8000/products/"
-H "Content-Type: application/json"
-d '{"name":"Laptop","description":"Laptop de 15 pulgadas","price":899.99,"stock":10}'
Deberías recibir una respuesta JSON con los datos del producto incluyendo su ID y fecha de creación.
Errores frecuentes
- ImportError: No module named ‘fastapi’: Asegúrate de haber ejecutado
pip install fastapien el entorno correcto. - 422 Unprocessable Entity: Los datos enviados no cumplen con el esquema (por ejemplo, missing field o tipo incorrecto). Revisa el cuerpo de la respuesta para ver qué campo falló.
- 404 Not Found: El ID del producto no existe. Verifica que el ID sea correcto.
Advertencia práctica
Esta API usa una lista en memoria. Cuando el server se reinicia, se pierden todos los datos. Para uso real, conecta una base de datos real como SQLite (con SQLAlchemy) o PostgreSQL.
Siguiente paso
Conecta esta API a una base de datos real usando SQLAlchemy y sqlite, o implementa autenticación con JWT para limitar el acceso.
Para profundizar, visita la documentación oficial de FastAPI: fastapi.tiangolo.com
