Tema 1 HTTP y aplicaciones web Indice 1. 2. 3. 4. HTTP para sitios web estáticos HTTP básico para aplicaciones web Aplicaciones AJAX APIs REST 1.1. HTTP para sitios web estáticos Petición/respuesta HTTP Un servidor web está a la escucha por un puerto, aceptando peticiones y haciendo respuestas según el protocolo http El protocolo especifica la sintaxis de peticiones y respuestas El intercambio de información se hace en modo texto Petición HTTP Respuesta HTTP 1 página = N recursos Una sola página contiene normalmente múltiples recursos (imágenes, código Javascript, flash,...). Cada uno de ellos requiere una transacción HTTP separada Métodos de petición GET: obtener un recurso Otros métodos: PUT: actualizar recurso, DELETE: eliminar recurso No están permitidos en la mayoría de recursos por motivos evidentes De hecho, los navegadores no los permiten en el flujo de uso normal, se necesita Javascript para lanzar estos métodos Códigos de estado Diferentes rangos numéricos indican distintos tipos de resultados 1xx informational 2xx success (p.ej. 200 OK) 3xx redirection (p. ej. 301 MOVED PERMANENTLY) 4xx client error (p. ej. 404 NOT FOUND, 400 BAD REQUEST, 403 FORBIDDEN, 418 I’M A TEAPOT:) ) 5xx server error Consultar más en http://httpstatus.es En la actualidad la mayoría son ignorados por el navegador, que se limita a mostrar el cuerpo de la respuesta. 1.2 HTTP básico para aplicaciones web Aplicaciones web y HTTP Una aplicación web es una colección de "programitas" o "rutinas". A cada uno se accede a través de una URL La comunicación con las rutinas se hace a través de HTTP Una petición p.ej. GET ya no será "devuélveme un recurso", sino "ejecuta un programa y devuélveme el resultado" El código de estado se puede interpretar como el resultado de la ejecución. p. ej, un 500 se debe a que el programa ha abortado Al igual que en línea de comandos podemos pasar parámetros. En HTTP se pasan bien en la primera línea de la petición (GET), bien en el cuerpo (POST) Aplicación web para consultar notas GET vs. POST En aplicaciones "clásicas" tienen la misma semántica, ejecutar un programa remoto pasándole datos en forma parametro=valor&parametro2=valor2... Los parámetros en GET se ven en la barra de direcciones del navegador Los parámetros en POST tienen longitud ilimitada ¿De dónde salen los parámetros? <form action="login.php" method="post"> Usuario: <input type="text" name="login"> <br> Contraseña: <input type="password" name="password"> <br> <input type="submit" value="Entrar"> </form> Usuario: Contraseña: Entrar Plantillas HTML en el servidor Facilitan la tarea de generar HTML dinámicamente, ya que generar todo el HTML a base de "printfs" sería engorroso Mezclan bloques de HTML con sentencias de un lenguaje de programación o con instrucciones especiales de control de flujo Ejemplos PHP Mustache Javascript El código se descarga junto con el HTML y se interpreta en el navegador después de la petición/respuesta HTTP Inicialmente se usaba para pequeños cálculos, validación de formularios, efectos curiosos HTTP es un protocolo sin estado No se guardan datos permanentes entre una petición/respuesta y la siguiente Sin embargo, se debería recordar que estamos autentificados, qué contiene nuestro carrito de la compra, etc... Ya veremos soluciones a este "dilema" http://xkcd.com/869/ 1.3 Aplicaciones con AJAX AJAX Varias tecnologías (sobre todo JS) que permiten hacer peticiones al servidor sin refrescar la página completa Se puede actualizar solo parte del HTML con datos procedentes del servidor meneame (no AJAX) vs meneame (AJAX) Single Page Applications Gracias a AJAX y a Javascript nos podemos llevar casi todo el código de la aplicación al navegador, convirtiendo el servidor en un API remoto para guardar/recuperar datos. La aplicación es un único HTML y los cambios en el interfaz se hacen con JS, no navegando a otras páginas Posible arquitectura de una S.P.A. 1.4 APIs REST Aplicaciones REST y S.P.A. Las aplicaciones REST no suelen ser orientadas a la presentación (usar plantillas del servidor) Son más una forma estandarizada de acceder a un API en el servidor Aplicaciones REST vs. "Clásicas" REST puede verse como un intento de volver a los principios de HTTP En lugar de llamar a programas, operar sobre recursos, que no van a ser páginas HTML sino entidades de nuestra aplicación: alumnos, notas, asignaturas El tipo de operación se especifica con el método HTTP: PUT sobre una nota significa "actualizar una nota". Recursos en REST Cada recurso se identifica con una URL única Los recursos, y por tanto las URLs se suelen organizar jerárquicamente /* todos los alumnos */ http://miaplicacion.com/alumnos /* El alumno con DNI 12345678J */ http://miaplicacion.com/alumnos/12345678J/ /* La nota de julio de 2014 de TW (9210) del alumno anterior */ http://miaplicacion.com/alumnos/12345678J/notas/9210/jul2014 Métodos HTTP en REST Los métodos POST/GET/PUT/DELETE se asocian con las operaciones Crear/Leer/Actualizar/Borrar (CRUD), respectivamente Así, obtener el listado de alumnos sería hacer GET miaplicacion.com/alumnos/ ¿Pero en qué formato obtendríamos los datos?...probemos Intercambio de datos en REST JSON: formato estándar e independiente del lenguaje para representar objetos. Originario de Javascript Es mucho más legible y flexible que el nombre=valor&nombre2=valor2.... Se pueden representar objetos compuestos de otros, arrays, ... { nombre: "Pepe Pérez", edad: 19, direccion: { calle: "Pez", num: 15} } S.P.A. y REST Muchas veces los APIs que usan las S.P.A. son de tipo REST También se podrían hacer APIs web con URLs clásicas, solo usando GET/POST y datos siempre en formato parámetro=valor, solo que no serían tan cool Cualquier presentación que se precie debería acabar con una imagen de un gatito cool