Apariencia
🧠 Conceptos — Python para Backend
Ideas y teoría del curso, explicadas con mis propias palabras. Cada concepto enlaza a la clase donde se vio.
| Concepto | Qué es | Clase |
|---|---|---|
| Backend | La lógica invisible de una app: recibe, valida, procesa, almacena y responde | Clase 1 |
Entorno virtual (venv) | Aísla las dependencias de cada proyecto Python | Clase 1 |
| Tipos de datos básicos | int, str, float, bool, None — determinan qué operaciones se pueden hacer con un dato | Clase 1 |
| Lista vs. diccionario | Lista: colección ordenada por índice. Diccionario: pares clave-valor | Clase 1 |
Type hints (-> int, param: str) | Pistas de tipo en una función; ayudan a leer el código, no se validan en ejecución | Clase 1 |
| Módulo | Archivo .py separado con funciones reutilizables, se importa con from archivo import funcion | Clase 1 |
try / except / raise | Manejo de errores: capturar excepciones esperadas y lanzar las propias sin detener el programa | Clase 1 |
| Mutabilidad / aliasing | Listas y dicts se pasan "por referencia": modificarlos dentro de una función afecta al objeto original | Clase 1 §9 |
dataclass | Define 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 HTTP | Clase 1 §12 |
logging | Registro de eventos con nivel de severidad (INFO/WARNING/ERROR), reemplaza a print en servicios reales | Clase 1 §13 |
| Variables de entorno | Configuración sensible (host de BD, API keys) fuera del código, vía os.environ / .env | Clase 1 §14 |
| Comprehensions | Forma compacta de filtrar/transformar listas y diccionarios en una línea | Clase 1 §15 |
| Import de librería vs. nombre de tu archivo | Una 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 archivo | Clase 4 |
| Microservicio ≠ router | Un 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 microservicio | Clase 6 |
pydantic-settings por servicio | Cada 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 .env | Clase 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 importar | Clase 6 |
| Acoplamiento entre microservicios | Un 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 directo | Clase 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 abajo | Clase 7 |
| Serverless | AWS 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 real | Clase 8 |
DynamoDB — ConditionExpression vs. UpdateExpression | Solo 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 estilo | Clase 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ón | Clase 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) reaccionan | Clase 9 |
| Evento vs. Comando | Comando = orden en imperativo ("Haz esto ahora", puede rechazarse). Evento = hecho inmutable en pasado ("Esto ya ocurrió", no se rechaza) | Clase 9 |
| Amazon SNS — fan-out | Un mensaje publicado en un Topic se distribuye automáticamente a todos sus suscriptores, sin que el publisher los conozca ni sepa cuántos son | Clase 9 |
| Amazon SQS — buffer persistente | Cola que retiene un mensaje hasta que el consumidor lo procesa — si el consumidor está caído, el mensaje espera en vez de perderse | Clase 9 |
| Patrón SNS + SQS | Una 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 OrderFlow | Clase 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 tallas | Clase 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ódigo | Clase 12 |