# Bloque 3 · Tema 6 # Arquitectura cliente/servidor y multicapas. Servicios web y protocolos. --- # Esquema resumen **Modelos arquitectónicos** | Modelo | Descripción | Característica clave | |---|---|---| | **Cliente/servidor** | Cliente solicita, servidor responde | Separación de roles | | **2 capas** | Cliente + servidor | Cliente pesado o ligero | | **3 capas** | Presentación + lógica + datos | Forma más habitual | | **N capas** | Multicapas con capa de servicios o integración | Aplicaciones complejas | **Servicios web** | Tecnología | Tipo | Formato | Descripción | |---|---|---|---| | **SOAP** | Protocolo | XML | Formal, contrato WSDL, empresarial | | **REST** | Estilo arquitectónico | JSON | Ligero, verbos HTTP, API modernas | | **GraphQL** | Lenguaje de consulta | JSON | Cliente define qué campos necesita | | **gRPC** | Protocolo RPC | Protobuf | Alta eficiencia, microservicios | | **WebSocket** | Protocolo bidireccional | Cualquiera | Tiempo real, persistente | **Protocolos principales** | Protocolo | Capa | Función | |---|---|---| | **HTTP/HTTPS** | Aplicación | Petición/respuesta web; HTTPS cifra con TLS | | **TCP** | Transporte | Entrega fiable y ordenada | | **IP** | Red | Direccionamiento y enrutamiento | | **TLS** | Sesión/Presentación | Cifrado del canal; sucesor de SSL | | **DNS** | Aplicación | Resolución de nombres a IPs | | **FTP** | Aplicación | Transferencia de ficheros | | **SMTP** | Aplicación | Envío de correo electrónico | --- # 1. Arquitectura cliente/servidor ## 1.1. Definición y elementos La arquitectura cliente/servidor es el modelo fundamental de distribución de aplicaciones. Un **cliente** realiza peticiones de servicios o recursos, y un **servidor** los proporciona. Ambos se comunican a través de una **red**. Sus características principales son: - **Separación de funciones**: el cliente gestiona la presentación; el servidor gestiona los datos y la lógica. - **Centralización de recursos**: los recursos compartidos (BD, ficheros, servicios) están en el servidor. - **Escalabilidad**: se pueden añadir más servidores o clientes sin reestructurar la arquitectura. - **Heterogeneidad**: cliente y servidor pueden usar plataformas distintas si se comunican mediante protocolos estándar. --- ## 1.2. Tipos de cliente | Tipo | Descripción | Ejemplo | |---|---|---| | **Cliente pesado** (thick/fat client) | Mayor parte de la lógica en el cliente; el servidor solo aporta datos | Aplicación de escritorio con BD remota | | **Cliente ligero** (thin client) | Casi toda la lógica en el servidor; el cliente solo gestiona la presentación | Navegador web con servidor de aplicaciones | | **Cliente mixto** | Reparte la lógica entre cliente y servidor | SPA (Angular/React) con API REST | Los clientes ligeros son los más habituales en entornos empresariales actuales porque facilitan el mantenimiento centralizado. --- # 2. Arquitectura multicapas (n-tier) ## 2.1. Capas principales La arquitectura multicapas divide la aplicación en capas independientes, cada una con una responsabilidad bien definida. La separación de responsabilidades facilita el mantenimiento, la escalabilidad y la reutilización. **Tres capas clásicas:** | Capa | Responsabilidad | Tecnologías típicas | |---|---|---| | **Presentación** | Interfaz de usuario | HTML/CSS/JS, Thymeleaf, React, Angular | | **Lógica de negocio** | Procesamiento y reglas de la aplicación | Java EE, Spring, .NET | | **Datos** | Persistencia y acceso a la BD | JDBC, JPA, SQL, ORM | **Capas adicionales:** - **Capa de servicios**: expone funcionalidad como servicios web (REST/SOAP). - **Capa de integración**: adapta la comunicación con sistemas externos. - **Middleware**: software intermediario que actúa entre capas (MOM, ESB). **Ventajas:** - Modularidad: cada capa puede desarrollarse y desplegarse de forma independiente. - Mantenimiento: los cambios en una capa no afectan a las demás si se respeta el contrato. - Escalabilidad: se puede escalar cada capa de forma independiente. - Seguridad: las capas actúan como barreras entre el exterior y los datos. --- ## 2.2. Relación con cliente/servidor Cliente/servidor y multicapas no son excluyentes: un sistema puede ser cliente/servidor (dos extremos que se comunican) y a la vez estar organizado en múltiples capas internamente. | Concepto | Alcance | |---|---| | **Cliente/servidor** | Modelo general de comunicación entre dos extremos | | **Multicapas** | Organización interna de la aplicación | Un navegador web actúa de cliente; el back-end (organizado en 3 capas) actúa de servidor. --- # 3. Comunicación síncrona y asíncrona ## 3.1. Comunicación síncrona En la comunicación síncrona el cliente envía una petición y **queda bloqueado** hasta recibir la respuesta del servidor. Es el modelo clásico de HTTP. | Aspecto | Detalle | |---|---| | **Comportamiento** | Bloqueante: el cliente espera | | **Modelo** | Petición → bloqueo → respuesta | | **Ejemplo** | Navegador solicita una página; espera la respuesta | | **Ventaja** | Simplicidad, fácil de implementar y depurar | | **Inconveniente** | Bloqueo; menor rendimiento en alta concurrencia | --- ## 3.2. Comunicación asíncrona y colas de mensajes En la comunicación asíncrona el cliente envía una petición y **no bloquea**: puede seguir ejecutando otras tareas. La respuesta llega posteriormente mediante un callback, un evento o una cola de mensajes. | Aspecto | Detalle | |---|---| | **Comportamiento** | No bloqueante | | **Mecanismos** | Callbacks, eventos, colas de mensajes, WebSocket | | **Ventaja** | Mayor escalabilidad y rendimiento | | **Inconveniente** | Mayor complejidad; gestión de estado más difícil | **Sistemas de colas de mensajes (MOM — Message-Oriented Middleware):** - **JMS** (Java Message Service): API estándar de Jakarta EE para mensajería asíncrona. - **RabbitMQ**: broker de mensajes con soporte AMQP. - **Apache Kafka**: plataforma de streaming de eventos de alto rendimiento. Los patrones de mensajería más comunes son: - **Punto a punto** (Queue): un productor envía a una cola; un consumidor la lee. - **Publicación/suscripción** (Topic): un productor publica en un topic; múltiples consumidores suscritos lo reciben. Clave de examen: HTTP es síncrono; microservicios y arquitecturas de eventos combinan síncrono y asíncrono; la asincronía es fundamental para la escalabilidad. --- # 4. Servicios web ## 4.1. SOAP **SOAP** (Simple Object Access Protocol) es un **protocolo** de comunicación entre aplicaciones basado en XML. Es el modelo clásico de servicios web empresariales. | Elemento | Descripción | |---|---| | **SOAP** | Protocolo de mensajería en XML | | **WSDL** | Web Services Description Language; describe la interfaz del servicio (operaciones, parámetros, tipos) en XML | | **UDDI** | Universal Description, Discovery and Integration; registro para descubrir servicios web | | **WS-Security** | Extensión de seguridad: cifrado, firma y autenticación a nivel de mensaje | **Estructura de un mensaje SOAP:** - **Envelope**: elemento raíz obligatorio. - **Header**: cabeceras opcionales (seguridad, transacciones). - **Body**: contenido del mensaje (petición o respuesta). - **Fault**: información de error. **Características:** - Protocolo formal y estricto. - Independiente del transporte (puede ir sobre HTTP, SMTP, TCP). - Soporte nativo para transacciones distribuidas y seguridad a nivel de mensaje. - Adecuado para integraciones B2B y entornos que requieren contratos formales. --- ## 4.2. REST **REST** (Representational State Transfer) es un **estilo arquitectónico**, no un protocolo. Lo definió Roy Fielding en su tesis doctoral de 2000. Una API que cumple los principios REST se denomina **RESTful**. **Principios REST (restricciones):** | Principio | Descripción | |---|---| | **Sin estado** (stateless) | Cada petición contiene toda la información necesaria; el servidor no guarda estado de sesión | | **Interfaz uniforme** | Recursos identificados por URI; representaciones estándar (JSON, XML) | | **Sistema en capas** | El cliente no sabe si hay intermediarios (proxy, caché, balanceador) | | **Caché** | Las respuestas pueden ser cacheables para mejorar el rendimiento | | **Cliente/servidor** | Separación clara entre cliente y servidor | | **Código bajo demanda** (opcional) | El servidor puede enviar código ejecutable al cliente (JS) | **Verbos HTTP en REST:** | Verbo | Operación CRUD | Ejemplo | |---|---|---| | **GET** | Read (lectura) | `GET /usuarios/1` → obtener usuario 1 | | **POST** | Create (creación) | `POST /usuarios` → crear usuario | | **PUT** | Update completo | `PUT /usuarios/1` → reemplazar usuario 1 | | **PATCH** | Update parcial | `PATCH /usuarios/1` → modificar campo | | **DELETE** | Delete | `DELETE /usuarios/1` → eliminar usuario 1 | **Códigos de estado HTTP:** | Rango | Categoría | Ejemplos | |---|---|---| | **2xx** | Éxito | 200 OK, 201 Created, 204 No Content | | **3xx** | Redirección | 301 Moved Permanently, 304 Not Modified | | **4xx** | Error del cliente | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found | | **5xx** | Error del servidor | 500 Internal Server Error, 503 Service Unavailable | **Diferencias SOAP vs REST:** | Aspecto | SOAP | REST | |---|---|---| | Tipo | Protocolo | Estilo arquitectónico | | Formato | XML obligatorio | JSON (principalmente), XML, otros | | Contrato | WSDL | OpenAPI/Swagger (recomendado) | | Transporte | HTTP, SMTP, TCP... | HTTP/HTTPS | | Estado | Puede ser con estado | Sin estado (stateless) | | Uso | Empresarial, B2B, legado | APIs modernas, microservicios, móvil | --- ## 4.3. Otras arquitecturas de servicios **GraphQL:** - Desarrollado por Meta (Facebook) en 2015. - El cliente especifica exactamente qué campos necesita: evita el overfetching (recibir más datos de los necesarios) y el underfetching (necesitar múltiples llamadas). - Una única URL de endpoint; las consultas se envían como `query` en el cuerpo de la petición. - Adecuado para aplicaciones con clientes variados (web, móvil) que necesitan datos distintos. **gRPC:** - Desarrollado por Google; usa HTTP/2 y Protocol Buffers (Protobuf) como formato binario. - Muy eficiente y de bajo latencia; adecuado para comunicación entre microservicios internos. - Los contratos se definen en ficheros `.proto`. - Admite streaming bidireccional. **WebSocket:** - Protocolo que establece una conexión persistente y bidireccional entre cliente y servidor sobre TCP. - A diferencia de HTTP (sin estado, petición/respuesta), la conexión se mantiene abierta. - Usos típicos: chat en tiempo real, notificaciones push, juegos online, dashboards en vivo. --- # 5. Protocolos asociados ## 5.1. HTTP/HTTPS **HTTP** (HyperText Transfer Protocol) es el protocolo de la capa de aplicación que define cómo se comunican cliente y servidor en la web. Opera sobre TCP. | Versión | Características clave | |---|---| | **HTTP/1.1** | Conexiones persistentes; pipeline; cabeceras en texto | | **HTTP/2** | Multiplexación de streams; cabeceras comprimidas (HPACK); mayor rendimiento | | **HTTP/3** | Basado en QUIC (UDP); menor latencia; conexiones más rápidas | **Cabeceras HTTP relevantes:** - `Content-Type`: tipo MIME del cuerpo (application/json, text/html). - `Authorization`: credenciales (Bearer token, Basic auth). - `Cache-Control`: directivas de caché. - `Cookie` / `Set-Cookie`: gestión de sesiones. **HTTPS** = HTTP + **TLS**. Garantiza confidencialidad (cifrado), integridad (no manipulación) y autenticación del servidor (certificado). --- ## 5.2. TCP/IP y SSL/TLS **TCP/IP** es el conjunto de protocolos base de internet. Corresponde a las capas 3 y 4 del modelo OSI. | Protocolo | Capa | Función | |---|---|---| | **IP** | Red (3) | Direccionamiento y enrutamiento de paquetes | | **TCP** | Transporte (4) | Transmisión fiable, orientada a conexión, ordenada | | **UDP** | Transporte (4) | Transmisión no fiable, sin conexión, más rápida | TCP garantiza la entrega mediante el mecanismo de three-way handshake (SYN, SYN-ACK, ACK) y la retransmisión de paquetes perdidos. HTTP, HTTPS, FTP y SMTP usan TCP. DNS y algunos servicios de streaming usan UDP. **TLS** (Transport Layer Security) es el protocolo que proporciona seguridad en la comunicación: - **Confidencialidad**: cifrado asimétrico para el intercambio de claves, simétrico para el flujo de datos. - **Integridad**: MAC (Message Authentication Code) para detectar modificaciones. - **Autenticación**: certificados X.509 firmados por una CA (Autoridad Certificadora). TLS 1.2 y TLS 1.3 son las versiones actuales; SSL está obsoleto y no debe usarse. --- ## 5.3. Otros protocolos de aplicación | Protocolo | Puerto | Función | |---|---|---| | **FTP** | 21 (control), 20 (datos) | Transferencia de ficheros | | **SFTP** | 22 | FTP seguro sobre SSH | | **SMTP** | 25 / 587 | Envío de correo electrónico | | **IMAP** | 143 / 993 | Acceso a buzón de correo (sincronizado) | | **POP3** | 110 / 995 | Descarga de correo (local) | | **DNS** | 53 | Resolución de nombres de dominio a IPs | | **LDAP** | 389 / 636 | Directorio de usuarios (Active Directory) | | **SSH** | 22 | Acceso remoto seguro a servidores | --- # Miniresumen final del tema | Concepto | Clave | |---|---| | **Cliente/servidor** | Cliente solicita, servidor responde; comunicación por red | | **Cliente pesado** | Lógica en el cliente | | **Cliente ligero** | Lógica en el servidor; ej. navegador | | **Multicapas (3 capas)** | Presentación + lógica de negocio + datos | | **Comunicación síncrona** | Bloqueante; modelo HTTP clásico | | **Comunicación asíncrona** | No bloqueante; colas JMS, RabbitMQ, Kafka | | **SOAP** | Protocolo; XML; WSDL; formal; empresarial | | **REST** | Estilo arquitectónico; JSON; verbos HTTP; stateless | | **GraphQL** | Cliente define los campos que necesita; Meta | | **gRPC** | RPC binario (Protobuf); HTTP/2; microservicios | | **WebSocket** | Bidireccional; tiempo real; conexión persistente | | **HTTP** | Protocolo web; petición/respuesta; sobre TCP | | **HTTPS** | HTTP + TLS; cifrado, integridad, autenticación | | **TLS** | Seguridad del canal; sucesor de SSL | | **TCP** | Transporte fiable y ordenado |