Published on

Gestión de constantes en FastAPI

Authors

¡Hola! Hoy quiero compartir contigo algunos consejos para gestionar de forma clara y ordenada las constantes en un proyecto FastAPI.

Planteamiento del problema: ¿Dónde ubicas tus constantes?

Cuando desarrollas una aplicación con FastAPI, es habitual que proliferen las constantes como URLs de endpoints, claves de autenticación, tiempos de espera, etc. Pero si las dejas dispersas…

  • Te cuesta encontrar dónde modificar un valor
  • Dificulta los tests porque no puedes simular o sustituir fácilmente
  • En equipos, nadie sabe exactamente “¿dónde va esto?” y las revisiones de código se vuelven un caos

¿Te suena familiar?


Empatía: Yo también pasé por ese lío

Al principio yo también definía las constantes donde me acordara y… luego era un desorden.
“¿Otra vez esta URL está en otro archivo?” y saltaba de un módulo a otro… 😅


Propuesta: Tres patrones para gestionar constantes

Según el tamaño del proyecto y el equipo, te recomiendo elegir uno (o combinar varios) de estos patrones:

1. Para el ámbito de la aplicación: agrupa en app/config.py

Si las constantes solo se usan dentro de la propia aplicación, crea un archivo como app/config.py o app/constants.py:

# app/config.py
API_URL = "https://example.com/api/v1"
TIMEOUT_SECONDS = 5

Y en tu código:

from app.config import API_URL, TIMEOUT_SECONDS
import requests

def fetch_data():
    resp = requests.get(API_URL, timeout=TIMEOUT_SECONDS)
    return resp.json()
  • Ventaja: Mantiene el alcance limitado, sin crear muchos archivos.
  • Inconveniente: Si lo necesitas en todo el proyecto, puede ser difícil de encontrar.

2. Para todo el proyecto: usa constants.py en la raíz

Cuando esas constantes se repiten en varios módulos, coloca un constants.py en la raíz:

# constants.py
API_URL = "https://example.com/api/v1"
DB_NAME = "manga_world"

Y luego:

from constants import API_URL, DB_NAME
  • Ventaja: Un único punto de verdad para todas las constantes.
  • Inconveniente: El archivo puede crecer demasiado.

3. Para configuraciones dependientes del entorno: .env + Pydantic

Cuando necesitas cambiar valores según desarrollo, staging o producción, usar variables de entorno es más seguro y flexible. Con Pydantic:

# app/settings.py
from pydantic import BaseSettings

class Settings(BaseSettings):
    API_URL: str = "https://example.com/api/v1"
    SECRET_KEY: str

    class Config:
        env_file = ".env"

settings = Settings()

Ejemplo de .env:

API_URL="https://prod.example.com/api/v1"
SECRET_KEY="tu-clave-secreta"

Y al usarlo:

from app.settings import settings

def fetch_data():
    resp = requests.get(settings.API_URL)
    return resp.json()
  • Ventaja: Permite aislar configuraciones por entorno y mejora la seguridad.
  • Inconveniente: Requiere gestionar .env (añadir a .gitignore, documentar, etc.).

Resumen

  1. Constantes de ámbito localapp/config.py
  2. Constantes globalesconstants.py en la raíz
  3. Configuraciones por entorno.env + Pydantic

Adapta según tu proyecto y equipo, ¡y verás cómo tu código gana en claridad y mantenibilidad!

¡Feliz desarrollo con FastAPI! 🚀