Parte III: AJAX y REST



Documentos relacionados
Javascript parte II: AJAX

Clase 4. Ajax XML. XML Ajax definición Breve explicación de como funciona el HTTP XMLHttpRequest. El XML se creó para que cumpliera varios objetivos.

Ejercicios de AJAX y REST

Desarrollo de Aplicaciones Web con AJAX Huibert Aalbers Senior Certified Software IT Architect

JavaScript,, AJAX y otras tecnologías web. Área de Ingeniería Telemática

Botón de Pago Instapago versión 1.1 TECNOLOGÍA INSTAPAGO C.A.

Tutorial Servicios Web

Kaldeera Advanced Forms 2009 Guía del usuario

Tema 1 HTTP y aplicaciones web

La plantilla propone aprovechar esta estructura en común y sólo modificar el contenido del área del documento que sea diferente.

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

Parte IIIb: Seguridad en APIs REST

JavaScript como Orientación a Objetos

MS ACCESS BÁSICO 6 LOS INFORMES

PROGRAMACIÓN PÁGINAS WEB CON PHP

Manual de Uso XML-Whois de Neubox. Manual del Sistema de XML Whois de Neubox Versión

REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS

Cursos de Extensión Universitaria UNIVERSIDAD DE OVIEDO. Servicios Web (II)

INSTALACIÓN DE SIESTTA 2.0 EN UN HOSTING (Ejemplo para Guebs.com)

Práctica GESTIÓN Y UTILIZACIÓN DE REDES LOCALES. Curso 2001/2002. TCP/IP: protocolo TCP

XAJAX: una librería de AJAX para PHP (parte 1)

Introducción a PHP. * No es necesario declarar previamente las variables.

Manual de uso. Manual de uso - citanet 1

Manual del panel. Core-Admin

Ejercicio: Mensajes Alert, Confirm y Prompt

SMPP Server http GATEWAY

APRENDE A CREAR UNA PÁGINA WEB CON HTML

GUÍA RED SOCIAL FACEBOOK

Elastix Web Services (WSDL) Manual de Usuario

5. Composer: Publicar sus páginas en la web

OBTENER DATOS EXTERNOS

4. CODIFICACIÓN. Previo a la codificación además de instalar las respectivas herramientas es. importante tenerlas bien configuradas.

Instalar y configurar W3 Total Cache

Manual de usuario investigador

TUTORIAL SOBRE CÓMO CREAR Y GESTIONAR UN BLOG CON BLOGGER

MANUAL PARA GESTIÓN DE INCIDENCIAS INFORMÁTICAS

MINI MANUAL PARA CREAR FORMULARIOS CON PHP Marzo 2007

Desarrollo y servicios web

PHP Perfect SQL v1.0 (SQL perfectas en PHP)

Tutorial: Primeros Pasos con Subversion

Unidad Didáctica 12. La publicación

Introducción a los sitios de SharePoint en Office 365

SUBIR ARCHIVOS CON FTP. TRABAJAR EN UN SERVIDOR REMOTO. CREAR UNA PÁGINA WEB CON PROGRAMACIÓN PHP. (CU00814B)

Tema 2. Programación en el cliente con Javascript. 2.3 Manejo del DOM

Detectar y solucionar infecciones en un sitio web

Creación de Funciones de Conducción

A continuación se confeccionara un formulario para el ingreso de un nombre y un botón para el envío del dato ingresado al servidor:

Desarrollo y servicios web

Generador de Proxy remoto JavaScript.

PRÁCTICA FINAL TECNOLOGÍA MULTIMEDIA 3 DE JUNIO DE ENDIAN LIN [Dirección de la compañía]

Manual de instalación Actualizador masivo de Stocks y Precios

TUTORIAL ENVIO SMS MASIVOS. 1. Segmentación de la base de datos de clientes

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

DE PEKEÑAJOS SOCIEDAD CIVIL

Guí a Ra pida Dropbox.


MANUAL DE LA CONFIGURACIÓN Y USO DEL MÓDULO DE ASM PARA PRESTASHOP

PANEL DE CONTROL (Zona de Administración) MANUAL DE USO Por conexanet. Revisión 1.1 Fecha

ENVIO SMS A TRAVÉS DE WEB

El e-commerce de Grupo JAB es una herramienta que permite a los clientes del Grupo, realizar un amplio conjunto de servicios de consulta, petición y

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

Almacenamiento de CFD de Proveedores

Archivo de correo con Microsoft Outlook contra Exchange Server

Manual del Servicio Web. Afilnet.com. Afilnet. Servicios de Telecomunicaciones SMS

Manual del Servicio Web. Afilnet.com. Afilnet. Servicios de Telecomunicaciones SMS

Internet Information Server

MANUAL DE USUARIO DE CUENTAS DE CORREO

CATÁLOGO CATÁLOGO CATÁLOGO CATÁLOGO CATÁLOGO

Manual de USO de la Web. Afilnet.com. Afilnet. Servicios de Telecomunicaciones SMS

MANUAL DE AYUDA MODULO TALLAS Y COLORES

Configuración Y Diseño Del Correo Electrónico Y Web Personal De IESA

Hostaliawhitepapers. Redirección 301. Cardenal Gardoki, BILBAO (Vizcaya) Teléfono:

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

La página web del centro con SPIP

Modo básico de funcionamiento del módulo Velneo vmodapache V7

Manual de operación Tausend Monitor

MANAUAL DE MANTENIMIENTO PARA LA PÁGINA WEB DE PROYECTO ADL GESTOR DE CONTENIDOS

Manual para el uso de vgraph_component

Cómo ingresar a la Intranet?

Configuración de correo en Mozilla Thunderbird

Especificación WebService para:

INTRODUCCION. Tema: Protocolo de la Capa de aplicación. FTP HTTP. Autor: Julio Cesar Morejon Rios

Introducción a las Redes de Computadoras. Obligatorio

MANUAL DE LA CONFIGURACIÓN Y USO DEL MÓDULO DE ASM PARA PRESTASHOP

COMPRAS CEPAS A TRAVÉS DE INTERNET PORTAL CEPAS

UNIDAD DIDÁCTICA Nº 7 USO DE LOS RECURSOS EN MOODLE

Manual de software. Dynamic Cloud. 10/2014 MS-Dynamic_Cloud v1.2

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

Documentación de usuario

USO BASICO DE OUTLOOK EXPRESS 6

GIROS Bancarios en NOTIN

Manual CMS Mobincube

GUÍA PARA LA INSTALACIÓN Y USO DE WORDPRESS BY MASTERHACKS. Guía de instalación y uso de Wordpress Página 1

Transcripción:

Tema 3: Javascript Parte III: AJAX y REST Texto http://www.flickr.com/photos/kosmar/62381076 Cómo hacer peticiones al servidor desde Javascript, usando el estilo REST

AJAX 2 Asynchronous Javascript And XML Combinación de tecnologías que permite: Hacer peticiones al servidor con javascript y recibir la respuesta sin recargar la página ni cambiar de página Para insertar en la página la información que envía el servidor se usa el API del DOM, que ya veremos El API existe desde hace algunos años tanto en IE como en Firefox, pero Google lo puso de moda Google El ejemplo más típico son las sugerencias en tiempo real mientras se va tecleando Fue una de las características que marcó el inicio de web 2.0

El API de AJAX 3 Todo gira en torno a la clase XMLHttpRequest Original de Explorer (), aunque luego adoptada por el resto de navegadores. Actualmente estándar del W3C XMLHttpRequest tiene métodos para Lanzar la petición HTTP Comprobar el código de estado devuelto por el servidor Obtener la respuesta Delegar el procesamiento de la respuesta en una función callback (en AJAX asíncrono)

Esquema AJAX síncrono 4 Función que hace AJAX XMLHttpRequest # Cambios en el HTML con el API DOM Javascript $ Petición HTTP % Respuesta HTTP Servidor web " Evento que dispara AJAX Área dentro del HTML HTML

Ejemplo de código síncrono 5 Supongamos que en el servidor esperan un parámetro valor con un dato que tenemos en la variable Javascript valor. //crear el objeto xmlhttprequest, versión simplificada que no iría en IE6 var req = new XMLHttpRequest(); //preparar la petición. El tercer parámetro indica que no es asíncrona req.open('get', 'http://www.miservidor.com/miprograma.php?valor= +valor, false); //Enviar la petición. Con GET el argumento siempre es null //esta instrucción se bloquea hasta que no llegue la respuesta del servidor (al ser síncrona) req.send(null); //comprobar el código de estado if(req.status == 200) //normalmente haremos algo más útil que un simple alert alert(req.responsetext) versión con GET //En la versión con POST sería todo igual excepto open y send //con POST los argumentos no van en la URL, sino en el send req.open( POST', 'www.miservidor.com/miprograma.php', false); req.setrequestheader("content-type","application/x-www-form-urlencoded"); req.send( cod= +codigo); versión con POST

Esquema AJAX asíncrono 6 Función que hace AJAX XMLHttpRequest Función Callback # Cambios en el HTML con innerhtml o equiv. Javascript " Evento que dispara AJAX $ Petición HTTP % Respuesta HTTP Servidor web Área dentro del HTML HTML

Ejemplo de código asíncrono 7 //crear el objeto xmlhttprequest var req = new XMLHttpRequest(); //preparar la petición. El tercer parámetro indica que sí es asíncrona req.open('get', 'http://www.miservidor.com/miprograma.php?cod= +codigo, true); //decir qué función hace de callback. Esto no se debe hacer antes del open req.onreadystatechange = mi_callback; req.send(null); //ya podemos seguir con otras cosas, este send no se bloquea alert( Mira mamá, estoy haciendo AJAX ) //en algún sitio del javascript debe estar definida esta función function mi_callback() { if (req.readystate == 4) { //también valdría this.readystate, aunque esto no parece if(req.status == 200) //estar documentado (idem this.status y this.responsetext) alert(req.responsetext); }

responsetext 8 responsetext es la información que nos envía el servidor, en un String. El servidor nos tendrá que enviar la información en un formato adecuado que podamos parsear desde Javascript Por ejemplo, en un chat nos podría mandar los nuevos mensajes recibidos simplemente poniendo un mensaje en cada línea y separando sus datos (hora, usuario, texto) con algún carácter especial Ya veremos cómo se hace desde el servidor para generar esta información, por el momento supongamos que lo hace 10:00:05#pepito# hola a todos 10:00:15#jorgito# hola pepito, cuánto tiempo sin saber de ti :)

Pero dónde está XML? 9 En la idea de AJAX original, la información se enviaría en XML, que permite estructurar la información de manera más elegante que un formato casero ad-hoc <mensajes> <mensaje> <hora>10:00:05</hora> <login>pepito</login> <texto>hola a todos </texto> </mensaje> </mensajes> Problema: aunque el API DOM de Javascript permite parsear XML, resulta tedioso de usar, como veremos en semanas posteriores.

JSON y AJAX 10 Si el servidor nos envía JSON, con JSON.parse podemos obtener un objeto Javascript en un solo paso. El XML tendríamos que parsearlo con el API del DOM, mucho más complejo Si desde el servidor nos llega Desde el cliente podemos obtener un array de objetos Javascript (cada uno con los campos hora, login y texto) sin más que hacer [ ] {hora: 10:00:05,login: pepito,texto: hola a todos }, {hora: 10:00:15,login: jorgito,texto: hola pepito, cuánto tiempo sin saber de ti :) } //xhr es el objeto XMLHttpRequest con el que se ha hecho la petición AJAX mensajes = JSON.parse(xhr.responseText) for(i=0;i<mensajes.length;i++) { console.log(mensajes[i].login+ : + mensajes[i].texto) }

Restricciones de seguridad 11 Política de seguridad del mismo origen : un XMLHttpRequest solo puede hacer una petición AJAX al mismo host del que vino la página en la que está definido Resumiendo, una página que tenéis en localhost y que tiene Javascript no puede hacer peticiones AJAX a Google, por ejemplo El cross-domain AJAX (CORS) permite romper esta política bajo ciertas circunstancias Si el servidor al que le haces la petición la permite (enviando la cabecera Access-Control-Allow-Origin), el navegador también dejará que se haga HTTP/1.1 200 OK Server: Apache/2.0.61 Access-Control-Allow-Origin: *

AJAX nivel 2 12 Versión 2.0 de XMLHttpRequest que permite Intercambiar datos binarios con el servidor. Por ejemplo, esto puede servir para subir archivos Acceder a ciertos eventos, por ejemplo para ir monitorizando el progreso en el envío/recepción de datos Solo funciona en navegadores modernos. No en IE9. Consultar caniuse.com u otro recurso equivalente API FormData representa los campos de un formulario, incluyendo type= file. Enviando el FormData enviamos también el archivo Hay varios eventos como progress, load, error o abort La gestión de los eventos se hace con el estándar W3C de event listeners, sobre el objeto XMLHttpRequest

Ejemplo de AJAX 2 13 <script> function verprogreso(e) { var p= document.getelementbyid("progreso"); p.innerhtml = Math.round((e.loaded / e.total)*100)+"%"; } function uploadajax() { var fdata = new FormData(document.getElementById("formu")) var xhr = new XMLHttpRequest(); xhr.upload.addeventlistener("progress", verprogreso, false) xhr.open("post", "Upload", true) xhr.onreadystatechange = function() {if (this.readystate==4) alert(this.responsetext)} xhr.send(fdata) } </script>... <form enctype="multipart/form-data" id="formu"> Elegir archivo: <input type="file" name="archivo"/> <br/> <input type="button" value="enviar" onclick="uploadajax()"/> </form> <p id="progreso"></p>

Acceso a APIs http://dlr2008.wordpress.com/2013/06/17/rest-web-api-and-cors/ REST con Javascript AJAX con estilo REST Javascript parte II: AJAX y REST

Recordando REST 15 Las llamadas al API se implementan como peticiones HTTP, en las que: La URL representa el recurso http://eventos.com/api/eventos/1 El método representa la operación El código de estado HTTP representa el resultado 200 OK HTTP/1.1 GET http://eventos.com/api/peticiones/1 404 NOT FOUND HTTP/1.1 Como formato de intercambio de datos usaremos un estándar Preferentemente JSON por su facilidad de manejo desde Javascript Aplicaciones Distribuídas en Internet 2013-14 / Univ. Alicante

Creación de recursos 16 Por ejemplo, enviar un comentario a un evento En general, la URL estará abierta (el recurso todavía no existe y por tanto no tiene id) El método debe ser POST http://eventos.com/api/eventos/3/comentarios Excepción: si sabemos qué id queremos darle, usaremos PUT (por ejemplo, al registrar un usuario) El cliente debe enviar al servidor una representación del recurso a crear, se puede hacer En los parámetros de la petición (al ser POST irán físicamente al final de la petición, o sea, en el send del XMLHttpRequest) En el cuerpo de la petición en formato JSON email=tw%40ua.es&fecha=2014-01-10&texto=creo%20que... { email = tw@ua.es, fecha = 2014-01-10,... } Aplicaciones Distribuídas en Internet 2013-14 / Univ. Alicante

Implementación con AJAX 17 Versión con JSON xhr.open('post', api/eventos/' + idevento + "/comentarios", true) xhr.onreadystatechange = function() {... } xhr.setrequestheader("content-type", "application/json") var coment = new Object(); coment.email = document.getelementbyid("email").value; coment.texto = document.getelementbyid("texto").value... xhr.send(json.stringify(coment)) Aplicaciones Distribuídas en Internet 2013-14 / Univ. Alicante

Crear recurso: resultado 18 Resultados posibles: 403 (Acceso prohibido) 400 (petición incorrecta, p.ej. falta un campo o su valor no es válido) 500 (Error del lado del servidor al intentar crear el recurso, p.ej. se ha caído la BD) 201 (Recurso creado correctamente) Qué URL tiene el recurso recién creado? La convención en REST es devolverla en la respuesta como valor de la cabecera HTTP Location xhr.open('post', 'api/eventos/' + idevento + "/comentarios", true) xhr.onreadystatechange = function() { if (this.readystate==4) if (this.status==201) var url = this.getresponseheader( Location ) }... Aplicaciones Distribuídas en Internet 2013-14 / Univ. Alicante

Actualizar recurso 19 Método PUT Según la ortodoxia REST, actualizar significaría cambiar TODOS los datos PATCH es un nuevo método estándar HTTP (2010) pensado para cambiar solo ciertos datos. Muchos frameworks de programación REST todavía no lo soportan Resultados posibles Errores ya vistos con POST 201 (Recurso creado, cuando le pasamos el id deseado al servidor) 200 (Recurso modificado correctamente) Aplicaciones Distribuídas en Internet 2013-14 / Univ. Alicante

Eliminar recurso 20 Método DELETE Algunos resultados posibles 200 OK 404 Not found 500 Server error Tras ejecutar el DELETE con éxito, las siguientes peticiones GET a la URL del recurso deberían devolver 404 Aplicaciones Distribuídas en Internet 2013-14 / Univ. Alicante