El backend es el corazón de las aplicaciones modernas. Procesa la lógica empresarial, almacena datos, gestiona la autenticación y expone las API para que las consuma el front-end. Esta guía presenta conceptos fundamentales, tecnologías populares y mejores prácticas para crear backends sólidos.
¿Qué es el backend?
El backend es la capa del sistema que el usuario no ve directamente. Se ejecuta en el servidor, procesa solicitudes, accede a base de datos y devuelve respuestas. La aplicación móvil o web (frontend) se comunica con el backend a través de API.
Responsabilidades del backend
- Lógica empresarial.
- Persistencia de datos.
- Autenticación y autorización.
- Integraciones con terceros.
- Procesamiento asincrónico.
- Seguridad.
Arquitecturas de backend
Monolito
Aplicación única que contiene toda la lógica. Sencillo para empezar. Puede resultar complicado a gran escala.
Microservicios
Sistema dividido en servicios pequeños e independientes. Cada uno con una responsabilidad específica. Escalable, pero de mayor complejidad operativa.
Sin servidor
Funciones realizadas bajo demanda. No gestiona servidores. Escala automáticamente. Bueno para cargas variables.
Backend como servicio (BaaS)
Servicios listos para usar que eliminan la necesidad de código backend. Base de fuego, Supabase. Acelera el desarrollo, limita la flexibilidad.
API: la interfaz de backend
DESCANSO
Patrón más común. Recursos identificados por URL, operaciones mediante métodos HTTP (GET, POST, PUT, DELETE).
###GráficoQL
Lenguaje de consulta flexible. El cliente solicita exactamente los datos que necesita. Reduce la recuperación excesiva y insuficiente.
gRPC
Búfers de protocolo sobre HTTP/2. Eficiente y mecanografiado. Bueno para la comunicación entre servicios.
###WebSocket
Conexión persistente bidireccional. En tiempo real: chat, notificaciones, juegos.
Diseño de API REST
Recursos y puntos finales
Organizar por recursos: /usuarios, /publicaciones, /pedidos. Utilice sustantivos, no verbos.
Métodos HTTP
- OBTENER: leer datos.
- PUBLICAR: crear.
- PUT/PATCH: actualizar.
- BORRAR: eliminar.
Códigos de estado
- 200: éxito.
- 201: creado.
- 400: error del cliente.
- 401: no autenticado.
- 403: no autorizado.
- 404: no encontrado.
- 500: error del servidor.
Control de versiones
Ruta: /api/v1/. Encabezado: Aceptar-Versión. Permite evolucionar sin romper con los antiguos clientes.
Paginación
Cursor o desplazamiento para listas grandes. Evite devolver miles de registros.
Tecnologías de back-end
Nodo.js
JavaScript en el servidor. Asincrónico, impulsado por eventos. Gran ecosistema. Popular para API.
Pitón
Django y FastAPI. Legible, productivo. Fuerte en ciencia de datos y ML.
Ir
Compilado, performativo. Competencia nativa. Creciendo en la nube y los microservicios.
Java/Kotlin
Empresa tradicional. Bota de primavera. Escritura robusta y fuerte.
rubí
Rieles. Alta productividad, convención sobre configuración. Fácil de iniciar.
.NET
C# con ASP.NET Core. Empresa, alto rendimiento. Ecosistema de Microsoft.
Base de datos
SQL (relacional)
PostgreSQL, MySQL, SQL Server. Consultas estructuradas, ácidas y potentes. Bueno para datos relacionales.
NoSQL (Documento)
MongoDB, CouchDB. Flexible, sin esquemas rígidos. Bueno para datos semiestructurados.
NoSQL (clave-valor)
Redis, DynamoDB. Ultrarrápido. Bueno para almacenamiento en caché y sesiones.
NoSQL (columna ancha)
Casandra, ScyllaDB. Escala horizontalmente. Bueno para grandes datos.
NuevoSQL
CucarachaDB, TiDB. Escala horizontal con garantías SQL.
ORM y creadores de consultas
###ORM
Asigna objetos a tablas. Prisma, Sequelize, TypeORM, SQLAlchemy. Productivo, pero puede ocultar consultas ineficientes.
Generador de consultas
Construcción programática de SQL. Knex, diésel. Más control que ORM.
SQL sin formato
Máximo control. Requerido para consultas complejas u optimizaciones.
Autenticación y autorización
JWT
Tokens sin estado para autenticación. Portabilidad, escalabilidad.
OAuth 2.0
Delegación de acceso. Permite iniciar sesión a través de Google, Apple.
RBAC/ABAC
Modelos para el control de permisos. Ver artículo específico.
caché
¿Por qué rizar?
Reduce la carga en el banco, mejora la latencia. Los resultados repetidos se entregaron al instante.
Redis
Caché en memoria más popular. También para sesiones, colas, pub/sub.
CDN
Almacenamiento en caché de contenido estático en el borde. Cloudflare, CloudFront.
Invalidación de caché
El problema difícil. TTL, invalidación explícita, estrategias de actualización.
Procesamiento asincrónico
Colas de mensajes
RabbitMQ, SQS, cola de Redis. Desacopla productor y consumidor.
###Trabajadores
Procesos que consumen colas en segundo plano. Apio, Sidekiq, Toro.
Transmisión de eventos
Kafka, Kinesis. Procesamiento de eventos en tiempo real y a escala.
Seguridad
Validación de entrada
Valide todas las entradas. Nunca confíes en el cliente.
Inyección SQL
Utilice consultas parametrizadas. Nunca concatene entradas en SQL.
###XSS
Salida de escape. Política de seguridad de contenidos.
HTTPS
Siempre. Sin excepciones. TLS en todas las comunicaciones.
Limitación de velocidad
Limitar solicitudes por usuario/IP. Previene el abuso.
Gestión de secretos
Nunca codifique. Utilice variables de entorno, AWS Secrets Manager, Vault.
Observabilidad
Registro
Registros estructurados. Niveles (depuración, información, advertencia, error). Agregación centralizada.
Métricas
Prometeo, perro de datos. Supervise la latencia, el rendimiento y los errores.
Seguimiento
Realice un seguimiento de las solicitudes entre servicios. Jaeger, rayos X.
Implementación e infraestructura
Contenedores
Docker encapsula la aplicación. Kubernetes orquesta a escala.
Proveedores de nube
AWS, GCP, Azure. Los servicios gestionados reducen las operaciones.
CI/CD
Canalización automatizada: probar, construir, implementar. Acciones de GitHub, GitLab CI.
Infraestructura como código
Terraform, Pulumi. Infraestructura versionada y reproducible.
Pruebas
Pruebas unitarias
Funciones de prueba de forma aislada. Rápido, muchos de ellos.
Pruebas de integración
Probar la interacción entre componentes. Banco, API.
Pruebas E2E
Pruebe el flujo total. Más lentos, menos.
Documentación
API abierta/Swagger
Especificación API. Genera documentación interactiva.
LÉAME
Instrucciones de configuración, arquitectura, decisiones.
ADR
Registros de decisiones de arquitectura. Documente las razones de las elecciones.
Conclusión
El backend para aplicaciones es una disciplina amplia que combina arquitectura, seguridad, rendimiento y operación. Elija tecnologías apropiadas para el contexto, diseñe API coherentes, aborde la seguridad desde el principio y cree observabilidad. Un backend bien diseñado es la base de productos confiables y escalables.
##Preguntas frecuentes
1) ¿Qué idioma elegir para el backend? Depende del equipo y del contexto. Node.js y Python son populares para las empresas emergentes. Go y Java para sistemas críticos.
2) DESCANSO o GraphQL? REST es más simple y suficiente para la mayoría. GraphQL cuando la flexibilidad de las consultas es crucial.
3) ¿Necesito microservicios? Probablemente no al principio. Comience con un monolito bien estructurado. Migrar cuando sea necesario.
4) ¿Firebase reemplaza su propio backend? Para MVP y aplicaciones simples, sí. Para una lógica compleja, necesitará su propio código.
5) ¿Cómo escalar el backend? Horizontal (más instancias), caché, optimización de consultas, procesamiento asincrónico.
Lea también
- Backend para Aplicaciones - Buenas Prácticas de Escalado
- Backend para Aplicaciones - Buenas Prácticas para Startups
- Microservicios en Aplicaciones: Arquitectura Distribuida para Móviles
- GraphQL para aplicaciones: Guía de implementación
- Caché en Aplicaciones: Buenas Prácticas y Fundamentos
- Caché en Aplicaciones: Buenas Prácticas y Pasos Esenciales
