Ejecución de Código al Iniciar o finalizar mediante el evento Lifespan en FastAPI

Video thumbnail

El lifespan es un mecanismo basado en un ContextManager que nos permite ejecutar código justo antes de que la aplicación inicie o después de que termine.

Anteriormente vimos como declarar datos de ejemplo del Request en FastAPI, veamos un aspecto más avanzado.

Implementación del Context Manager

Su uso es sencillo y emplea el decorador @asynccontextmanager. Al igual que hicimos con la base de datos, utilizaremos la palabra clave yield.

Todo lo que esté antes del yield se ejecutará al arrancar el servidor.

Todo lo que esté después del yield se ejecutará al apagar el servidor (por ejemplo, para cerrar conexiones o limpiar archivos).

Creación Automática de Datos (Seed): Preparación de las Habitaciones (Rooms) para WebSockets

He creado una función que se encarga de "poblar" las habitaciones. El flujo es el siguiente:

  • Al iniciar la app, verificamos si las habitaciones ya existen en la base de datos.
  • Si no están creadas, iteramos una lista predefinida e insertamos los registros.
  • Ejecutamos el commit para guardar los cambios y cerramos la sesión.

Configuración en la aplicación

Para activar este comportamiento, debemos pasar el parámetro lifespan al momento de instanciar FastAPI quedando el código como:

api_multiple.py

from contextlib import asynccontextmanager
***
def create_rooms():
    db = SessionLocal()
    try:
        for name in ["room 1", "room 2"]:
            if not db.query(models.Room).filter(models.Room.name == name).first():
                db.add(models.Room(name=name))
        db.commit()
    finally:
        db.close()

@asynccontextmanager
async def lifespan(app: FastAPI):
    print('****START')
    create_rooms()
    yield
    print('****END')

app = FastAPI(lifespan=lifespan)
router = APIRouter()

Métodos del ciclo de vida obsoletos (Deprecated)

Si revisas documentación antigua, es posible que encuentres los decoradores @app.on_event("startup") y @app.on_event("shutdown"). Es importante que sepas que estos eventos están obsoletos (deprecated).

Aunque todavía funcionan, la comunidad y los desarrolladores de FastAPI recomiendan usar exclusivamente lifespan, ya que es más flexible y permite manejar el ciclo de vida de forma más integrada en un solo bloque de código.

Conclusión

Este mecanismo de inicialización de datos es ideal para proyectos reales donde ciertos valores estáticos (como roles, categorías o habitaciones) deben estar disponibles desde el primer segundo sin necesidad de crear interfaces de usuario adicionales para cargarlos.

Ya con las habitaciones generadas automáticamente, estamos listos para pasar a la siguiente fase.

El siguiente paso, es aprender a implementar los principios del Clean Code en una app en FastAPI.

Optimiza tu API: Descubre por qué usar Lifespan en FastAPI en lugar de los eventos on_event. Guía práctica para gestionar el estado y los recursos de tu aplicación.

Acepto recibir anuncios de interes sobre este Blog.

Andrés Cruz

EN In english