Python 05 - API REST con FastAPI
Objetivo
Construir una API REST sencilla con validacion de datos, creacion y consulta de registros, manejo de errores
y documentacion automatica.
Requisitos
Python 3.10+; fastapi; pydantic; uvicorn.
Concepto
FastAPI permite exponer logica Python mediante endpoints HTTP. Pydantic valida automaticamente los
datos recibidos y genera esquemas que FastAPI utiliza para construir documentacion OpenAPI interactiva.
Codigo completo
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
# ------------------------------------------------------------
# 1. CREAR APLICACION
# ------------------------------------------------------------
app = FastAPI(
title="API de Clientes",
version="1.0.0",
)
# ------------------------------------------------------------
# 2. MODELOS DE DATOS
# ------------------------------------------------------------
class ClienteEntrada(BaseModel):
nombre: str = Field(min_length=2)
edad: int = Field(ge=0, le=120)
ciudad: str
class ClienteSalida(ClienteEntrada):
id_cliente: int
# Base de datos simulada en memoria.
clientes = {}
secuencia_id = 1
# ------------------------------------------------------------
# 3. ENDPOINT DE SALUD
# ------------------------------------------------------------
@[Link]("/health")
def health():
return {"status": "ok"}
# ------------------------------------------------------------
# 4. CREAR CLIENTE
# ------------------------------------------------------------
@[Link](
"/clientes",
response_model=ClienteSalida
)
def crear_cliente(cliente: ClienteEntrada):
global secuencia_id
nuevo = {
"id_cliente": secuencia_id,
**cliente.model_dump(),
}
clientes[secuencia_id] = nuevo
secuencia_id += 1
return nuevo
Pagina 1
# ------------------------------------------------------------
# 5. CONSULTAR CLIENTE
# ------------------------------------------------------------
@[Link](
"/clientes/{id_cliente}",
response_model=ClienteSalida
)
def consultar_cliente(id_cliente: int):
if id_cliente not in clientes:
raise HTTPException(
status_code=404,
detail="Cliente no encontrado"
)
return clientes[id_cliente]
# ------------------------------------------------------------
# 6. LISTAR CLIENTES
# ------------------------------------------------------------
@[Link]("/clientes")
def listar_clientes():
return list([Link]())
# ------------------------------------------------------------
# 7. EJECUCION
# ------------------------------------------------------------
# Guardar como [Link] y ejecutar:
#
# uvicorn main:app --reload
#
# Documentacion interactiva:
# [Link]
Puntos clave
La estructura utiliza almacenamiento en memoria solo con fines didacticos. En un sistema productivo, la
capa de persistencia deberia reemplazarse por una base de datos y deberian agregarse autenticacion,
logging, pruebas y configuracion por ambiente.
Pagina 2