Resumen
En esta clase hablamos de:
- Arquitectura:
- Centralización:
- Estilos arquitectonicos
- Estilo Centralizado
- Estilo Distribuido
- Relativo a ambientes, no equipos físicos
- Son cualidades relativas, no absolutas
- Opciones
- Monolitico / Desktop
- Cliente Servidor
- Web
- Mobile
- Otros (No los profundizaremos):
- P2P
- Microservicios
- Etc.
- Estilos arquitectonicos
- Centralización:
- Internet y la Web
- Internet, orígenes
- Internet: Red fisica (darpanet, blah blah)
- Web: Servicio que corre sobre internet
- Orígenes
- Bólo lectura
- Basado en texto
- Impacto en la arquitectura
- Hypertext
- El browser básico
- Hace consultas
- Lee texto
- Renderiza HTML
- Modelo cliente servidor:
- Hay un servidor con información centralizada que responde pedidos de los clientes.
- El flujo es restringido: El cliente solo hace pedidos y el servidor solo puede hablar con el cliente para responder sus pedidos
- Arquitectura Web
- La Web
- Es el conjunto de apps que corren sobre internet
- Es Cliente servidor
- Corre sobre internet
- Cómo funciona?
- HTTP
- Características:
- Pedido / respuesta
- Stateless (no hay noción de pedidos anteriores)
- Textual
- Pedido
- Métodos (GET / POST / PUT / DELETE)
- Semántica
- URI
- Ubicación + Recurso
- Headers (metadata)
- Body:
- Es texto
- Hay varios formatos
- Métodos (GET / POST / PUT / DELETE)
- Respuesta
- Código de respuesta
- Headers
- Body (como en el pedido)
- Características:
- DNS
- Concepto de IP
- Concepto de dominio
- HTTP
- La Web
- Cómo uso esto para hacer una app?
- Divido mi app en partes
- Un servidor
- Un cliente
- Liviano
- El cliente recibe “vistas”, elementos visuales ya procesados listos para renderizar
- Solo la lógica de la capas de Presentación relacionada a dibujar elementos en pantalla vive en el cliente
- Pesado
- El cliente recibe información más estructurada o “cruda” y luego genera las vistas.
- Parte de la lógica de las capas de Aplicación y Presentación viven en el cliente
- Nosotros haremos esto
- Liviano
- Cómo estructurar la comunicación entre cliente y servidor
- Se comunican usando HTTP
- Cliente liviano
- Necesito un formato que me permita “dibujar cosas”
- Uso HTML
- Lenguaje de “estructurado” de elementos visuales y texto.
- Cliente pesado
- Necesito formatos más “estructurados”
- Generalmente del tipo Clave -> valor
- XML
- JSON
- Existen otros que no se usan para esto pero podrían (como YAML)
- Generalmente del tipo Clave -> valor
- Necesito formatos más “estructurados”
- Aprovecho convenciones de HTTP
- REST
- Orientada a recursos
- Aprovecha semántica de verbos
- Semántica de codigos
- Uso headers para transmitir el formato
- Content-Type/Accept
- Uso headers para otra metadata
- Location
- Authorization
- REST
- Concepto de API/Backend REST
- Servidor
- HTTP
- Usualmente JSON
- Varias rutas para formar las URLs
- Tmb llamados “endpoints”
- El cliente pesado me va pidiendo la información y la muestra (cómo? ya lo veremos!)
- Divido mi app en partes
- Internet, orígenes