Skip to content

🧠 Conceptos — Python para Backend ​

Ideas y teoría del curso, explicadas con mis propias palabras. Cada concepto enlaza a la clase donde se vio.

ConceptoQué esClase
BackendLa lógica invisible de una app: recibe, valida, procesa, almacena y respondeClase 1
Entorno virtual (venv)Aísla las dependencias de cada proyecto PythonClase 1
Tipos de datos básicosint, str, float, bool, None — determinan qué operaciones se pueden hacer con un datoClase 1
Lista vs. diccionarioLista: colección ordenada por índice. Diccionario: pares clave-valorClase 1
Type hints (-> int, param: str)Pistas de tipo en una función; ayudan a leer el código, no se validan en ejecuciónClase 1
MóduloArchivo .py separado con funciones reutilizables, se importa con from archivo import funcionClase 1
try / except / raiseManejo de errores: capturar excepciones esperadas y lanzar las propias sin detener el programaClase 1
Mutabilidad / aliasingListas y dicts se pasan "por referencia": modificarlos dentro de una función afecta al objeto originalClase 1 §9
dataclassDefine la forma de una entidad con tipos (antesala de los BaseModel de Pydantic)Clase 1 §11
Excepciones propias (jerarquía)Clases de error del dominio (class MiError(Exception)) para distinguir tipos de fallo y mapearlos a códigos HTTPClase 1 §12
loggingRegistro de eventos con nivel de severidad (INFO/WARNING/ERROR), reemplaza a print en servicios realesClase 1 §13
Variables de entornoConfiguración sensible (host de BD, API keys) fuera del código, vía os.environ / .envClase 1 §14
ComprehensionsForma compacta de filtrar/transformar listas y diccionarios en una líneaClase 1 §15
Import de librería vs. nombre de tu archivoUna clase importada de una librería (ej. Session de sqlalchemy.orm) sale siempre de esa librería, sin importar cómo nombres tus propios archivos (db/database.py o db/session.py, da igual). Solo tus propios imports (from db.database import Base) tienen que coincidir con el nombre real de tu archivoClase 4
Microservicio ≠ routerUn microservicio es un proceso independiente completo (carpeta, venv, puerto, main.py propios). Un APIRouter solo agrupa endpoints dentro de un microservicio — uno puede tener varios routers sin dejar de ser un solo microservicioClase 6
pydantic-settings por servicioCada microservicio trae su propia clase Settings(BaseSettings) — mismo patrón repetido en cada carpeta (no un archivo de config compartido), cada uno leyendo su propio .envClase 6
Query param opcional (= None)Un parámetro de función que no aparece entre {} en la ruta se vuelve query param automático; dándole = None de default queda opcional (?minimum_stock=10 o nada)Clase 6
Namespace packages (sin __init__.py)Desde Python 3.3 (PEP 420), una carpeta se puede importar como paquete sin __init__.py — ya no es obligatorio, aunque sigue sirviendo para reexportar símbolos o correr código al importarClase 6
Acoplamiento entre microserviciosUn servicio no debería conocer el modelo interno de otro — solo su contrato público (API). Pedir un dato ajeno se hace por HTTP (httpx), nunca leyendo su base de datos o sus estructuras internas directoClase 5 · aplicado en Clase 6
Orden para agregar un endpoint nuevo (schema → repository → service → router)En una arquitectura en capas, cada capa depende de la de abajo — armarlas en ese orden hace que cada paso ya tenga lo que necesita, sin ir y volver. Ver el detalle completo abajoClase 7
ServerlessAWS administra el cómputo: no hay un servidor propio corriendo 24/7, el código (Lambda) se ejecuta solo cuando algo lo dispara y se paga por invocación realClase 8
DynamoDB — ConditionExpression vs. UpdateExpressionSolo UpdateExpression admite aritmética (x = x + :delta); ConditionExpression solo compara un atributo o valor contra otro — mezclar una suma dentro de una condición es un error de sintaxis real, no solo de estiloClase 8
Infrastructure as Code (AWS SAM)La infraestructura (API Gateway, Lambda, DynamoDB, permisos IAM) declarada en un archivo versionado (template.yaml) en vez de configurada a mano en la consola — mismo principio que Alembic para migraciones o .env.example para configuraciónClase 8
Arquitectura orientada a eventos (EDA)Los servicios se comunican publicando y consumiendo eventos en vez de llamarse directamente — desacopla al emisor de quién (y cuántos) reaccionanClase 9
Evento vs. ComandoComando = orden en imperativo ("Haz esto ahora", puede rechazarse). Evento = hecho inmutable en pasado ("Esto ya ocurrió", no se rechaza)Clase 9
Amazon SNS — fan-outUn mensaje publicado en un Topic se distribuye automáticamente a todos sus suscriptores, sin que el publisher los conozca ni sepa cuántos sonClase 9
Amazon SQS — buffer persistenteCola que retiene un mensaje hasta que el consumidor lo procesa — si el consumidor está caído, el mensaje espera en vez de perderseClase 9
Patrón SNS + SQSUna cola SQS se suscribe a un Topic SNS: combina el fan-out de SNS (avisar a todos) con el buffer de SQS (no perder nada) — arquitectura real de OrderFlowClase 9
De características a descripción comercial (con IA, sin alucinar)Generar el texto de venta de un producto a partir de sus datos ya verificados (no del "conocimiento propio" de la IA) — así el modelo redacta pero no inventa características, precios ni tallasClase 12
Provider Interface (adapter sobre un proveedor de IA)Mismo principio que el Repository Pattern (Clase 4) aplicado a un proveedor externo: el código de negocio habla contra una interfaz propia, no contra el SDK de Gemini/OpenAI directo — cambiar de proveedor es cambiar una variable de entorno (AI_PROVIDER), no reescribir códigoClase 12