- Published on
Gestión de constantes en FastAPI
- Authors
- Name
- Hidetoshi Yanagisawa
¡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?
- Empatía: Yo también pasé por ese lío
- Propuesta: Tres patrones para gestionar constantes
- Resumen
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:
app/config.py
1. Para el ámbito de la aplicación: agrupa en 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.
constants.py
en la raíz
2. Para todo el proyecto: usa 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.
.env
+ Pydantic
3. Para configuraciones dependientes del entorno: 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
- Constantes de ámbito local →
app/config.py
- Constantes globales →
constants.py
en la raíz - 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! 🚀