
Volver a clases
DevOps y Deploy●Principiante
Fundamentos de Arquitectura de Software Web
120 min
135 vistas
Introducción a los conceptos fundamentales de arquitectura de software web, patrones arquitectónicos y principios de diseño.
Introducción a la Arquitectura de Software
- ¿Qué es la arquitectura de software?: Es la estructura fundamental de un sistema que define sus componentes, sus relaciones y los principios que guían su diseño y evolución. La arquitectura determina cómo se organizan y comunican las partes de una aplicación.
- Importancia de la arquitectura: Una buena arquitectura facilita el mantenimiento, escalabilidad y evolución del software. Permite que múltiples equipos trabajen en paralelo, reduce el acoplamiento entre componentes y mejora la testabilidad.
- Arquitectura vs Diseño: La arquitectura se enfoca en decisiones de alto nivel (qué componentes existen, cómo se comunican), mientras que el diseño se centra en la implementación de cada componente. La arquitectura es más difícil de cambiar una vez implementada.
Estilos Arquitectónicos Fundamentales
- Arquitectura Monolítica: Todo el código en una sola aplicación. Ventajas: simplicidad, fácil de desarrollar y desplegar inicialmente. Desventajas: difícil de escalar, un error puede tumbar todo el sistema, tecnología única para todo.
- Arquitectura en Capas (Layered): Organiza el código en capas horizontales (presentación, lógica de negocio, acceso a datos). Cada capa solo se comunica con la adyacente. Facilita la separación de responsabilidades.
- Arquitectura Cliente-Servidor: Separación clara entre el frontend (cliente) y backend (servidor). El cliente solicita recursos y el servidor los proporciona. Fundamento de la web moderna.
- Arquitectura de Microservicios: Descompone la aplicación en servicios pequeños e independientes. Cada microservicio tiene su propia base de datos y se puede desplegar independientemente. Ideal para aplicaciones grandes y equipos distribuidos.
Principios SOLID en Arquitectura Web
- Single Responsibility (SRP): Cada módulo o clase debe tener una única razón para cambiar. En backend, separa controladores, servicios y repositorios. En frontend, componentes con una sola responsabilidad.
- Open/Closed (OCP): Abierto a extensión, cerrado a modificación. Usa interfaces y abstracciones para agregar funcionalidad sin cambiar código existente.
- Liskov Substitution (LSP): Las implementaciones deben ser intercambiables sin romper el sistema. Importante en sistemas con múltiples proveedores (ej: diferentes bases de datos).
- Interface Segregation (ISP): Interfaces específicas mejor que una genérica grande. Define contratos claros entre capas.
- Dependency Inversion (DIP): Depende de abstracciones, no de implementaciones concretas. Usa inyección de dependencias para desacoplar componentes.
Patrones Arquitectónicos Web
- MVC (Model-View-Controller): Separa datos (Model), interfaz (View) y lógica de control (Controller). Usado en frameworks como Ruby on Rails, Laravel, ASP.NET MVC.
- MVP (Model-View-Presenter): Similar a MVC pero el Presenter maneja toda la lógica, la View es completamente pasiva. Común en aplicaciones con interfaces complejas.
- MVVM (Model-View-ViewModel): El ViewModel expone datos y comandos para la View mediante data binding. Usado en frameworks como Angular, Vue.js, WPF.
- API Gateway: Punto de entrada único para múltiples microservicios. Maneja autenticación, rate limiting, enrutamiento y agregación de respuestas.
Arquitectura REST y APIs
- Principios REST: Stateless (sin estado en servidor), recursos identificables por URI, uso de métodos HTTP estándar (GET, POST, PUT, DELETE), respuestas en formatos estándar (JSON, XML).
- Niveles de madurez REST: Nivel 0 (HTTP como túnel), Nivel 1 (recursos), Nivel 2 (verbos HTTP), Nivel 3 (HATEOAS - hipermedia).
- Versionado de APIs: Estrategias: versionado en URL (
/api/v1/users), en headers (Accept: application/vnd.api+json; version=1), o mediante content negotiation. - Documentación: Usa OpenAPI/Swagger para documentar contratos de API. Facilita la integración y mantenimiento.
Ejemplos de Código
1 ejemplo
CRUD REST completo
javascript
1// routes/posts.js
2const express = require("express");
3const router = express.Router();
4
5// GET /api/posts - Listar todos los posts
6router.get("/", async (req, res) => {
7 const posts = await Post.find();
8 res.json(posts);
9});
10
11// POST /api/posts - Crear nuevo post
12router.post("/", async (req, res) => {
13 const post = new Post(req.body);
14 await post.save();
15 res.status(201).json(post);
16});
17
18// GET /api/posts/:id - Obtener un post
19router.get("/:id", async (req, res) => {
20 const post = await Post.findById(req.params.id);
21 res.json(post);
22});
23
24// PUT /api/posts/:id - Actualizar post
25router.put("/:id", async (req, res) => {
26 const post = await Post.findByIdAndUpdate(req.params.id, req.body, {
27 new: true,
28 });
29 res.json(post);
30});
31
32// DELETE /api/posts/:id - Eliminar post
33router.delete("/:id", async (req, res) => {
34 await Post.findByIdAndDelete(req.params.id);
35 res.status(204).send();
36});
37
38module.exports = router;Recursos
5 recursos disponibles
¡Hora de Practicar!
PrácticaPrincipiante30 min
Práctica Guiada
- Diseñar la arquitectura de una aplicación de blog: identificar las capas (presentación con Vite, API con Express, base de datos PostgreSQL), definir los endpoints RESTful principales.
- Crear un diagrama de componentes mostrando cómo el frontend consume la API, cómo la API valida y procesa requests, y cómo interactúa con la base de datos.
- Aplicar el principio de separación de responsabilidades: controladores manejan HTTP, servicios contienen lógica de negocio, repositorios acceden a datos.
Desafío de Código
EjercicioPrincipiante30 min
Ejercicios Prácticos
- Diseña los endpoints REST para un sistema de gestión de tareas (CRUD completo).
- Dibuja un diagrama de capas para una aplicación de e-commerce.
- Investiga las diferencias entre arquitectura monolítica y microservicios para un caso específico.
Documentación Oficial
DocumentaciónPrincipiante60 min
Enlaces externos relevantes
Link 1: Martin Fowler - Arquitectura de Software
- URL:
https://martinfowler.com/architecture/ - Descripción: Artículos fundamentales sobre patrones arquitectónicos y mejores prácticas de diseño de software.
Link 2: Microsoft Architecture Guide
- URL:
https://docs.microsoft.com/en-us/azure/architecture/guide/ - Descripción: Guía completa de arquitectura de aplicaciones en la nube con patrones y anti-patrones.
Link 3: RESTful API Design Best Practices
- URL:
https://restfulapi.net/ - Descripción: Guía detallada sobre diseño de APIs RESTful, convenciones y estándares.
Documentación Oficial
DocumentaciónPrincipiante30 min
The Clean Architecture
Robert C. Martin explica los principios de arquitectura limpia para sistemas mantenibles.
Documentación Oficial
DocumentaciónPrincipiante30 min
Building Microservices
Guía completa de Sam Newman sobre diseño, implementación y evolución de microservicios.