74
13/02/2019 1 FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services RESTful ICONO TRAINING FORMADOR www .iconotc.com training@iconotc .com l inkedin.com/company/icono-training-consulting www.iconotc.com Javier Martín Consultor y Formador en las Tecnologías de la información. Formación en Nuevas Tecnologías ¡Síguenos en las Redes Sociales! 17 18

FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

1

FORMACIÓN EN NUEVAS TECNOLOGÍAS

Web Services RESTful

ICONO TRAINING FORMADOR

www.iconotc.com

[email protected]

linkedin.com/company/icono-training-consulting

www.iconotc.com

Javier Martín

Consultor y Formador en las Tecnologías de la

información.

Formación en Nuevas Tecnologías

¡Síguenos en las Redes Sociales!

17

18

Page 2: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

2

WEB SERVICES RESTful -Avanzado-DURACIÓNl

14 horas

LUGAR/FECHAS /HORARIO:

Madrid. 13 y 14 de Febrero de 2019. De 9:00 hs a 14:00 y de 15:00 a 17:00 hs.

CONTENIDOS:

1. Diseño e implementación de recursos REST con JAX-RS

2. JAX-RS Injection

3. API Cliente JAX-RS 2.0. Clientes de bajo nivel

4. Control de Errores y respuestas del servidor

5. JAX-RS asíncrono

6. Seguridad bajo JAX-RS

7. Creación de servicios Web RESTful con Spring framework y Spring Boot

8. Motivación para usar Spring Boot

9. Definición de proyectos Spring Boot

10. Anotaciones esenciales para crear Servicios Web RESTful bajo Spring

www.iconotc.com

© JMA 2016. All rights reserved

Servicios REST en

Java

19

20

Page 3: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

3

© JMA 2016. All rights reserved

SERVICIOS WEB

Introducción

¿Qué es un Servicio Web?

Según Microsoft:

“… es una entidad programable que proporciona un elemento de funcionalidad determinado, como lógica de aplicación … (accesible) mediante estándares de Internet … como XML y HTTP.”

Según Sun:

“… es un componente software con las siguientes características:

1) Es accesible a través del interfaz SOAP,

2) Su interfaz se describe en un documento WSDL.”

Según Wikipedia:

“… es un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones.”

Componentes que permiten a las aplicaciones compartir datos siguiendo un modelo de programación distribuida basados en estándares abiertos de tipo texto que permite interactuar entre si a sistemas heterogéneos.

21

22

Page 4: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

4

Introducción

• Pero esto no es todo, aun podemos definirlo de mas formas

De otra forma:

“A través de una interfaz estándar … permite el funcionamiento de una serie de sistemas heterogéneos como un conjunto integrado.”

Simplificando:

“Sistema diseñado para soportar interoperabilidad entre máquinas sobre una red.”

Introducción

• ¿Qué es REALMENTE un Servicio Web?

• Es una «elemento» accesible a través de Internet, mediante la invocación remota

• Se deben de alojar en un Servidor Web. (que soporte Web Services)

• Son:

Autocontenido

Autodescrito

Modular e

Independiente de Plataforma

• Utilizan estándares (XML, SOAP, RPC) para poder ofrecer sus servicios

23

24

Page 5: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

5

Introducción

¿Qué es REALMENTE un Servicio Web?

• Un servicio web es:

Una aplicación remota

Descrito usando WSDL (Web Service Description Language)

Accediendo mediante SOAP (Simple Object Access Protocol)

Todo esto bajo una serie de reglas/estándares definidas por WS-I Basic Profile

• El WS-I (Web Services Organización de Integración) es un grupo de proveedores (Microsoft, IBM, BEA, Sun Microsystems, Oracle, HP, y otros) que se han unido para garantizar que los servicios web son interoperables en todas las plataformas.

• Para ello, han creado una recomendación llamado Basic Profile 1.1, que define un conjunto de reglas para el uso de XML, SOAP y WSDL para crear servicios web interoperables.

Introducción

• Los servicios Web son sistemas que se comunican principalmente a través de HTTP.

• Pero puede comunicarse a través de otros protocolos de también populares y con posibilidades de ser tratado (inspeccionado, transformado,

persistido, etc) como XML o JSON

• Normalmente, las cargas útiles de comunicaciones de servicios Web suelen ser generadas en XML.

• También es posible la comunicación de datos binarios compactos entre Web Services.

25

26

Page 6: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

6

Web Services. Historia

AÑO Descripción

1976 Aparición de RPC (Remote Procedure Call) en Sistema

Unix

1990 Aparición de DCE (Distributed Computing Environment)

que es un sistema de software para computación

distribuida, basado en RPC.

1991 Aparición de Microsoft RPC basado en DCE para sistemas

Windows.

1992 Aparición de DCOM (Microsoft) y CORBA (ORB) para la

creación de componentes software distribuidos.

1997 Aparición de Java RMI en JDK 1.1

1999 Aparición de SOAP 1.0, WSDL

2000 Definición REST

Arquitectura SOA y Web Services

• Los servicios Web y la Arquitectura SOA están muy relacionados.

• SOA (Arquitectura Orientada a Servicios)

• SOA es una arquitectura de software que definen el uso de servicios

como soporte a los requisitos del negocio.

• Su objetivo es alcanzar un mínimo acoplamiento entre agentes software,

con el fin de permitir a la empresa organizar y hacer uso de múltiples

procesos.

• Los Servicio Webs son las unidades de trabajo, realizados por un

proveedor de servicios, para alcanzar un resultado final deseado por un

consumidor del servicio.

27

28

Page 7: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

7

Arquitectura SOA y Web Services

• Con SOA, las aplicaciones software ya no son enormes bloques de

funciones y procesos.

• Con SOA las aplicaciones se componen de servicios modulares

ensamblados, pequeños y concretos.

Arquitectura SOA y Web Services

• En un sistema SOA, los servicios que pueden integrar deben de ser:

• Reutilizables

Todo servicio debe ser diseñado y construido pensando en su reutilización.

• Disponer de un contrato Formal

Debe proporcionar un contrato en el cual figuren: el nombre del servicio, su forma de acceso,

las funcionales que ofrece, los datos de entrada de cada una de las funcionalidades y los datos

de salida

• Bajo Acoplamiento

Tienen que ser independientes los unos de los otros, utilizando el contrato existente cada vez

que se quiera ejecutar un servicio.

• Autónomos

Todo Servicio debe tener su propio entorno de ejecución.

• Permitir composición y Descubrimiento

Todo Servicio debe permitir su orquestación y posibilidad de ser descubierto para poder ser

utilizados.

29

30

Page 8: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

8

Arquitectura SOA y Web Services

• En un sistema de SOA, un servicio muy simple puede consistir en una

sola función.

• El modelo de implementación de este modelo es sencillo y familiar para

los programadores (Trabajo con funciones).

• Esta simplicidad, también permiten la reutilización de código a través de

la composición de los nuevos servicios de los ya existentes.

• Un sistema de SOA puede ser bastante complejo, pero la complicación

surge de la composición y no de la creación de los propios componentes

de la composición (servcios).

Arquitectura SOA y Web Services

• Los servicios Web son ideales como componentes en un sistema de

SOA.

• Un servicio web debe consistir en una o varias operaciones.

• Cada una de estas operaciones se implementa como una llamada a la

función sin estado.

• En Java, un servicio web bien diseñado, es una clase que:

• Tiene métodos de instancia → Operaciones de servicio

• No tiene atributos → para no pueda afectar al resultado devuelto

• En el contexto de SOA:

• Proveedor suministra la funcionalidad del servicio

• Consumidor es un cliente que emite peticiones contra las operaciones del servicio.

31

32

Page 9: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

9

Características diferenciadoras de WS

• Varias características distinguen a los servicios web desde otros sistemas de software distribuidos

1. Infraestructura Abierta Los servicios Web se implementan utilizando estándares de la industria, protocolos

independientes del proveedor y lenguajes.

Los servicios web pueden aprovecharse de las redes, el formato de los datos, la seguridad y otras infraestructuras ya existentes

2. Plataforma y Lenguaje Transparente Los servicios web pueden ser creados, publicados y consumidos en varias plataformas de

hardware y bajo diferentes sistemas operativos.

3. Diseño Modular Los WS son pequeños programas que pueden ser integrados/orquestados en grandes

sistemas.

Un principio básico del diseño de servicios web es comenzar con operaciones muy simples de servicio, para posteriormente poder ser orquestados para trabajar con otros servicios, y así indefinidamente

Diferentes tipos de Web Services

• Podemos encontrar diversos estilos de Servicios Web:

• XML-RPC (RPC, Llamadas a Procedimientos Remotos)

Es un protocolo que permite a un programa ejecutar código en otra máquina remota sin tener

que preocuparse por las comunicaciones entre ambos.

Es el precursor de SOAP ( Java RMI, .NET Remoting, CORBA )

• Basados en SOAP (o denominados comúnmente WS)

Los Servicios Web basados en SOA son soportados por la mayor parte de desarrolladores de

software y analistas

Se basan en los estándares: SOAP, WSDL, UDDI., que se comunican con aplicaciones a

través de HTML utilizando XML

• REST (REpresentational State Transfer)

Es una técnica de arquitectura software para sistemas hipermedia distribuidos como WWW.

Se usa para describir cualquier interfaz web simple que utiliza XML y HTTP, sin protocolos

basados en patrones de intercambio de mensajes como el protocolo de servicios web SOAP

Se centra más en interactuar con recursos con estado, que con mensajes y operaciones.

33

34

Page 10: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

10

Diferentes tipos de Web Services

Diferentes tipos de Web Services

35

36

Page 11: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

11

© JMA 2016. All rights reserved

TECNOLOGÍAS DE SERVICIOS WEB

El protocolo SOAP

• SOAP Simple Object Access Protocol.

• SOAP es un protocolo estándar que define cómo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos XML.

• Fundamentalmente, SOAP es la capa de transporte por defecto para los servicios Web.

38

40

Page 12: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

12

El protocolo SOAP

• Este protocolo consiste de tres partes:

• Envelope Identifica el documento XML como un mensaje SOAP.

En el cual define qué hay en el mensaje y cómo procesarlo.

Marca el inicio y el final del mensaje SOAP

• Header (opcional)

Cuando se utiliza el protocolo SOAP sobre HTTP, las cabeceras

HTTP proporcionan información sobre el tipo de contenido,

longitud del contenido , y el destinatario del mensaje.

• Body Contiene información de la llamada y respuesta.

El cuerpo es un elemento obligatorio que contiene la información para el destinatario del mensaje

El protocolo SOAP

41

42

Page 13: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

13

Descripción de servicios Web con WSDL

• WSDL (Web Services Description Language)

• WSDL es una tecnología que se utiliza para describir la interfaz pública de un servicio Web.

• Está basado y creado en lenguaje XML.

• WSDL es un estándar desarrollado por el W3C que describe:• Lo que hace un servicio

• Cómo invocar sus operaciones

• Y dónde encontrarlo.

Descripción de servicios Web con WSDL

• Un documento WSDL tiene los siguientes elementos:

• Tipos de Datos <types> Define los tipos de datos usados en los mensajes.

Se utilizan los tipos definidos en la especificación de esquemas XML.

• Mensajes <message> Se utilizan para definir el formato de los datos intercambiados entre un consumidor de

servicios Web y el proveedor de servicios.

• Tipos de Puerto <portType>: Se utiliza para especificar las operaciones del servicio Web.

• Bindings <binding>: Describe el protocolo, formato de datos y la seguridad de un elemento <portType>

Los Bindings estándar son HTTP o SOAP, o uno propio.

• Servicios <service>: Conjunto de direcciones y puertos para poder interactuar con los servicios.

43

44

Page 14: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

14

Descripción de servicios Web con WSDL

<binding name="CreditCheckEndpointBeanPortBinding” type="tns:CreditCheckEndpointBean">

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>

<operation name="CreditCheck">

<soap:operation soapAction=""/>

<input>

<soap:body use="literal"/>

</input>

<output>

<soap:body use="literal"/>

</output>

</operation>

</binding>

<service name="CreditService">

<port name="CreditCheckEndpointBeanPort" binding="tns:CreditCheckEndpointBeanPortBinding">

<soap:address location="http://localhost:64082/CreditService/CreditCheckEndpointBean"/>

</port>

</service>

<portType name="CreditCheckEndpointBean">

<operation name="CreditCheck">

<input message="tns:CreditCheck"/>

<output message="tns:CreditCheckResponse"/>

</operation>

</portType>

Publicación de servicios Web con UDDI

• UDDI (Universal Description, Discovery and Integration).

• UDDI es una iniciativa industrial abierta, cuyo principal propósito es contener un catálogo de Servicios Webs de Internet.

• Objetivos

• Ser accedido por los mensajes SOAP

• Descubrir Servicios

• Obtener documentos WSDL con la descripción de los contratos (requisitos del

protocolo, formatos de mensajes, etc del servicio) para poder utilizar los Servicios.

45

46

Page 15: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

15

Publicación de servicios Web con UDDI

• UDDI utiliza lenguaje XML para realizar los registros y localizar los

Servicios Webs.

• Los Sistemas UDDI pueden ser utilizados a nivel Internet o más

comúnmente Intranet.

Publicación de servicios Web con UDDI

• UDDI consta de tres partes:

• Páginas blancas

Dan información acerca de la empresa que presta el servicio.

– Nombre, Dirección, Persona de contacto, teléfono, etc

Usando esta información, es posible encontrar un servicio sobre el que se conoce alguna

información

• Páginas amarillas

Proporcionan una clasificación del servicio o negocio.

Esta clasificación se basa en taxonomías estándar, geográficas, etc.

Pueden existir mas de una página amarilla por empresa ( si esta proporciona varios servicios)

• Páginas verdes

Se utilizan para describir la forma de acceder a un servicio web.

Dirección, parámetros y referencias del servicio necesarios.

Especificaciones indicadas en WSDL

47

48

Page 16: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

16

REST

• REST (REpresentational State Transfer)

• REST es un patrón de arquitectura de software que utiliza HTTP para descubrir, consultar y manipular los recursos en un entorno descentralizado y distribuido.

• En la actualidad REST ha ganado popularidad a SOAP-WDSL debido a su simplicidad.

• Cuando se usa REST, el cliente tiene acceso a un recurso en el servidor, utilizando el URI y el conjunto estándar de métodos HTTP (GET, POST, PUT

y DELETE).

• En respuesta, el servidor devuelve un documento que contiene el estado actual o previsto de los recursos.

REST

• Servicios Web RESTful

• Servicios web RESTful son servicios que se construyen sobre la base de los principios REST antes mencionados.

• Servicios web RESTful utilizan HTTP e implementar las operaciones que se asignan a los métodos HTTP comunes:

import javax.ws.rs.Consumes;

import javax.ws.rs.PUT;

import javax.ws.rs.Path;

import javax.ws.rs.PathParam;

import javax.ws.rs.Produces;

@Path("creditCheck")

public class CreditCheck {

@PUT

@Consumes("text/plain")

@Produces("text/plain")

@Path("isValid")

public boolean isValid(@PathParam("cardNumber")

String ccNumber) {

return true;

}

}

49

50

Page 17: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

17

Comparación SOAP v REST

Apache CXF

• Apache CXF es un framework completo, de código abierto para servicios web.

• Se originó como combinación de dos proyectos de código abierto:

• Celtix desarrollado por IONA Technologies

• XFire desarrollado por un equipo basado en Codehaus.

• El nombre CXF se deriva de la combinación de los nombres de proyecto "Celtix" y "XFire".

• CXF frecuentemente se emplea en conjunto con otros frameworks de Apache (ServiceMix, Camel y ActiveMQ) en proyectos de infraestructura con arquitecturas orientadas a servicios (SOA)

51

52

Page 18: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

18

Apache CXF

• CXF incluye un conjunto amplio de características, pero se concentra principalmente en las siguientes áreas:

• Soporte de estándares en servicios web:

SOAP

WS-Security

WS-*

• JAX-WS API para el desarrollo de servicios web.

• JAX-RS (JSR 311 1.1) API para el desarrollo de servicios web del tipo RESTful.

• Soporte de Maven como herramienta.

• Capas de transporte HTTP y JMS.

JAX-WS

• Java API for XML Web Services (JAX-WS) es una API de Java para la creación de servicios web.

• Es parte de la plataforma Java EE de Sun Microsystems.

• JAX-WS utiliza anotaciones, para simplificar el desarrollo y despliegue de los clientes y puntos finales de servicios web.

• Forma parte del Java Web Services Development Pack.

• JAX-WS 2.0 reemplazó a la API JAX-RPC en Java EE 5 JAX-WS también es uno de los fundamentos de WSIT.

53

54

Page 19: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

19

JAX-RS

• JAX-RS: Java API for RESTful Web Services es una API de Java que proporciona soporte en la creación de servicios web de acuerdo con el estilo arquitectónico Representational State Transfer (REST).

• JAX-RS usa anotaciones, introducidas en Java SE 5, para simplificar el desarrollo y despliegue de los clientes y puntos finales de los servicios web.

• JAX-RS forma parte de Java EE 6.

• Al ser parte oficial de Java EE no se requiere configuración para comenzar a usar JAX-RS.

• Para los entornos que no son Java EE 6 se requiere una (pequeña) entrada en el descriptor de despliegue web.xml.

JAX-RS

• Entre las implementaciones de JAX-RS se incluyen:

• Apache CXF un framework de servicios web de código abierto.

• Jersey la implementación de referencia de Sun (ahora Oracle).

• RESTeasy implementación de JBoss.

• Restlet creado por Jerome Louvel, un pionero en frameworks de REST.

• Apache Wink proyecto de Apache Software Foundation Incubator, el módulo del servidor implementa JAX-

RS.

55

56

Page 20: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

20

© JMA 2016. All rights reserved

IMPLEMENTACIÓN DE SERVICIOS WEB REST

Introducción a los Servicios REST

• REST y SOAP son muy diferentes.

• SOAP:

Es un protocolo de mensajería

• REST:

Es un estilo de arquitectura de software para sistemas hipermedia distribuidos.

Sistemas en los que el texto , gráficos , audio y otros medios de comunicación se almacenan en una red e interconectados a través de hipervínculos .

• WWW es un sistema REST (web estática, web dinámica no ).

• En la Web, HTTP es a la vez un protocolo de transporte y un sistema de mensajería (las peticiones y respuestas HTTP son mensajes).

• Roy Fielding, en el 2000 acuñó el acrónimo REST, (autor principal de la

especificación HTTP y cofundador de la Fundación de Software Apache)

58

60

Page 21: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

21

Introducción a los Servicios REST

• Lo primero es aclarar que REST no es una tecnología, ni siquiera una arquitectura, en un convenio:

Una familia de arquitecturas de servicios distribuidos que

cumplan con una serie de requisitos definidos REST.

• Estos requisitos REST son:• Se publican Recursos.

Un dato, una operación, un numero de empleado 33, empleado 44, etc.

• Los servicios REST no publican un conjunto de métodos u operaciones, publican RECURSOS.

• Cada recurso dispone de un identificador único.

• Cada recurso debe de tener una o varias representaciones de su estado (XML, HTML, PDF, etc)

Introducción a los Servicios REST

61

62

Page 22: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

22

Introducción a los Servicios REST

• REST (REpresentation State Transfer )

• Nos permite utilizar cualquier interfaz web simple que utiliza HTTP, sin las abstracciones/restricciones de los protocolos basados en patrones de intercambio de mensajes.

• Los servicios que siguen los principios de REST habitualmente se denominan RESTful.

• REST se basa en varios componentes principales:

• Recursos

• URI

• Representaciones

• Solicitudes HTTP

REST y HTTP

• HTTP es una pieza fundamental en World Wide Web, y especifica como

intercambiar entre cliente y servidor recursos web.

• Es un protocolo idóneo para implementar servicios web, ya que sigue los

principios REST.

• Características de HTTP:

• Es un protocolo de nivel de aplicación y algo de presentación.

• Está diseñado para ser ejecutado sobre TCP o sobre TLS/SSL.

• Se basa en un paradigma sencillo petición/respuesta, es decir, es un protocolo

stateless.

63

64

Page 23: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

23

REST y HTTP

• Cuando realizamos una petición HTTP, el mensaje consta de:

• Primera línea de texto indicando la versión del protocolo utilizado, el verbo y el URI

El verbo indica la acción a realizar sobre el recurso web localizado en la URI

• Posteriormente vendrían las cabeceras (opcionales)

• Después el cuerpo del mensaje, que contiene un documento, que puede estar en

cualquier formato ( XML, HTML, JSON → Content-type )

REST y HTTP

• Los mensajes HTTP de respuesta siguen el mismo formato que los de

envío.

• Sólo difieren en la primera línea

• Donde se indica un código de respuesta junto a una explicación textual de dicha

respuesta.

• El código de respuesta indica si la petición tuvo éxito o no.

65

66

Page 24: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

24

Componentes de REST

Recursos• Un recurso es cualquier elemento que dispone de un URI correcto y único.

• Es cualquier cosa que sea direccionable a través de internet.

• Estos recursos pueden ser manipulados por clientes y servidores.

Una noticia.

La temperatura en Madrid a las 22:00h.

Un estudiante de alguna clase en alguna escuela

Un ejemplar de un periódico, etc

• En REST todos los recursos comparten una interfaz única y constante. (http://...)

• Todos los recursos tienen las mismas operaciones (CRUD)CREATE, READ, UPDATE, DELETE

Componentes de REST

URI (Uniform Resource Identifier)• Los URI son los identificadores globales de recursos en la web, y actúan de manera

efectiva como UUIDs REST.

• Hay 2 tipos de URIs : URL y URN

URL s Identifican un recurso de red mediante una IP o un DNS

URNs son simples UUIDs lógicos con un espacio de nombres asociados

• URI es una cadena de caracteres corta, que identifica inequívocamente un recurso y que tienen el siguiente formato

<esquema>://<host>:puerto/<ruta><querystring><fragmento>

Esquema = Indican que protocolo hay que utilizar para usar el recurso ( http o https )

Host = Indica el lugar donde encontraremos el recurso ( por IP o por dominio )

Puerto = Puerto por donde se establece la conexión ( 80 o 443 )

Ruta = Ruta del recurso dentro del servidor, está separado por /

queryStrng = Parámetros adicionales, separados por ? o por &

Fragmento = Separado por #

67

68

Page 25: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

25

Componentes de REST

URI (Uniform Resource Identifier)

• Las URI es el único medio por el que los clientes y servidores pueden realizar el intercambio de representaciones.

• Normalmente estos recursos son accesibles en una red o sistema.

• Para que un URI sea correcto, debe de cumplir los requisitos de formato, REST no indica de forma específica un formato obligatorio.

• Los URI asociados a los recursos pueden cambiar si modificamos el recurso (nombre, ubicación, características, etc)

Componentes de REST

Peticiones HTTP. Verbos• HTTP dispone de un característica completamente REST y es que dispone de un

interfaz uniforme para todos los recursos web.

• HTTP dispone de un conjunto cerrado de acciones (verbos) para gestionar todos los recursos.

Método HTTP Método REST Descripción

GET RETRIEVE Recuperar el estado de un recurso (HEAD + BODY)

HEAD Recuperar el estado de un recurso (HEAD )

POST CREATE Creación de objetos

PUT UPDATE Actualizar o crear

DELETE DELETE Eliminar un recurso

OPTIONS Recuperar los métodos HTTP que el servidor soporta para

una URL específico

CONNECT TRACE PATCH

69

70

Page 26: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

26

Tipos MIME

• Otro aspecto muy importante es la posibilidad de negociar distintos formatos (representaciones) a usar en la transferencia del estado entre servidor y cliente (y viceversa).

• La representación de los recursos es lo que se envía un lado a otro entre clientes y servidores.

• Como REST utiliza HTML, podemos transferir múltiples tipos de información.

• Los datos se transmiten a través de TCP/IP, el navegador sabe cómo interpretar las secuencias binarias (Content-Type) por el protocolo HTTP

• La representación de un recurso depende del tipo de llamada que se ha generado (Texto, HTML, PDF, etc).

Tipos MIME

• En HTTP cada uno de estos formatos son los diferentes Tipos MIME.

• Cada tipo MIME tiene el formato de <tipo>/<subtipo>. application / json application / xml

application / atom+xml application / javascript

text / html audio / vorbis.

• ¿Cómo se negocia el tipo MIME entre el cliente y el servidor?

• Es sencillo

Petición

– En la cabecera ACCEPT envía una lista de tipos MIME que el cliente entiende.

– En caso de enviar contenido en el cuerpo, la cabecera CONTENT-TYPE indica en que formato MIME

está codificado.

Respuesta

– El servidor selecciona el tipo que más le interese de entre todos los especificados en la cabecera

ACCEPT, y devuelve la respuesta indicando con la cabecera CONTENT-TYPE el formato del cuerpo.

• Si el servidor no entiende ninguno de los tipos MIME propuestos devuelve un mensaje con código 406 (incapaz de aceptar petición).

71

72

Page 27: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

27

Tipos MIME

• La lista de tipos MIME se especifica en la cabecera (Accept) mediante lo

que se llama una lista separada por comas de tipos (media range).

• Cada uno de los tipos MIME puede ir acompañados por uno o más

parámetros, separados por ; text/html ; level=3

text/plain; charset=ISO-8859-1

application/json ; charset=UTF-8

• También pueden aparecer expresiones de rango, por ejemplo*/* indica cualquier tipo MIME

image / * indica cualquier formato de imagen

• También se especifica la preferencia mediante q=text/*;q=0.3, text/html;q=0.7, text/html;level=1 a mayor numero mas preferencia

Códigos de Estado

• En HTTP el mensaje de respuesta contiene en su primera línea lo que se

llama el código de estado, que indica el resultado de la operación.

• Existen múltiples códigos, pero los mas utilizados son:

Código Descripción

200 OK, Indica éxito en la operación de forma genérica

201 Created, Indica que se creó con éxito un nuevo recurso web. Suele devolverse cuando

ejecutamos un método POST o PUT

202 Accepted, Indica que la petición se ha aceptado pero que no está completa

204 No content, Indica éxito en la operación DELETE

301 Indica que el recurso se ha movido a otra URI de forma permanente

400 El mensaje de petición está mal formado

401 Requiere autenticación

403 Acceso denegado

404 Recurso no encontrado

405 Método no soportado

73

74

Page 28: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

28

Introducción a los Servicios REST

Introducción a los Servicios REST

Servicio REST = CRUD de Web• Son parecidos, pero existen algunas diferencias sutiles e importantes entre un CRUD

simple y una arquitectura REST.

• El servicio REST puede soportar muchas representaciones de un mismo recurso:

xml, pdf, png, gif, excel, html, json, texto, etc.. Hay pocas BBDD que hagan esto.

• Habitualmente, las operaciones CRUD en Servicios REST no se reducen a persistir los datos, sino hacen mas cosas. Flujos de negocios, actualización de otros recursos, etc

• Los recursos tienen identificadores únicos por lo que se pueden interrelacionar con recursos en sistemas de terceros.

75

76

Page 29: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

29

Diseño de un Servicio Web REST

• Para el desarrollo de los Servicios Web’s REST es necesario conocer una serie de cosas:

• Analizar el/los recurso/s a implementar

• Diseñar la REPRESENTACION del recurso.

Deberemos definir el formato de trabajo del recurso: XML, JSON, HTML, imagen, RSS, etc

• Identificar el URI de acceso.

Deberemos indicar el/los URI de acceso para el recurso

• Conocer los métodos soportados por el servicio DELETE, GET, POST, PUT

• Qué códigos de estado pueden ser devueltos

Los códigos de estado HTTP típicos que podrían ser devueltos

• Todo lo anterior dependerá de nuestro servicio a implementar.

Uso de la cabecera

• Request: Método /uri?parámetros

• GET: Recupera el recurso

Todos: Sin parámetros

Uno: Con parámetros

• POST: Crea un nuevo recurso

• PUT: Edita el recurso

• DELETE: Elimina el recurso

• Accept: Indica al servidor el formato o posibles formatos esperados,

utilizando MIME.

• Content-type: Indica en que formato está codificado el cuerpo, utilizando

MIME

• Response: Código de estado con el que el servidor informa del resultado

de la petición.

77

78

Page 30: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

30

Peticiones

Request: GET /users

Response: 200 content-type:application/json

BODY

Request: GET /users/11

Response: 200 content-type:application/json

BODY

Request: POST /usersBODY

Response: 201 content-type:application/json

BODY

Request: PUT /usersBODY

Response: 200 content-type:application/json

BODY

Request: DELETE /users/11

Response: 204 no content

Jersey

• Jersey es una implementación para JAX-RS para la creación de Servicios Web’s REST.

• Jersey es un framework de código abierto, para entornos de producción y desarrollo (JSR 311 & JSR 339)

• Jersey nos permite hacer servicios web y que respondan al protocolo HTTP.

• Cuando utilizamos Jersey, éste actúa en nuestra aplicación como un servlet, que podemos configurar para aceptar peticiones, respuestas, etc. (en el web.xml) .

79

80

Page 31: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

31

Servicio Web RESTful como un recurso JAX-RS

• Para crear nuestro Servicio Web, tendremos que crear un Proyecto Dinámico y configurarle para la ejecución y despliegue de Servicios Web.

( Servidor Aplicaciones –Tomcat, etc)

Servicio Web RESTful como un recurso JAX-RS

• Una vez creado el proyecto, necesitaremos descargar Jersey 1. Descargamos Jersey.

https://jersey.java.net/download.html ( jersey-archive-1.17.1.zip)

2. Lo descomprimimos en un directorio del disco

https://jersey.java.net/download.html ( jersey-archive-1.17.1.zip)

c:\Download\jersey\.......

81

82

Page 32: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

32

Servicio Web RESTful como un recurso JAX-RS

3. Añadimos todos los ficheros *.jar del directorio LIB al proyecto en 2 sitios:

WebContent – WEB-INF - Lib

Servicio Web RESTful como un recurso JAX-RS

• Después crearemos una clase que actuará de Servicio Web.

Si disponemos de Jboss TOOL

podremos crear mas de un tipo

de Service REST

83

84

Page 33: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

33

Servicio Web RESTful como un recurso JAX-RS

• Deberemos definir

Proyecto Dinámico donde crear el

ServiceREST

Nombre del Servicio y la actualización

del fichero web.xml

Definición de:

- Paquete

- Clase

- Aplicación

Servicio Web RESTful como un recurso JAX-RS

• Si todo ha ido correcto nos ha tenido que crear 2 clases

AppHola: Clase para lanzar el Servicio en el Servidor

ClaseHola: Clase que implementa el Servicio REST

85

87

Page 34: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

34

Servicio Web RESTful como un recurso JAX-RS

• Sólo nos interesará la clase ClaseHola

ANOTACIONES

@Path( "/Saludo" )

- Define el PATH para acceder al Recurso

- Puede existir un PATH para la Aplicación y uno

por cada método

@GET()

- Indica el método HTML para utilizar el Recurso

@Produces (MediaType.TEXT) o @Produces ( "text/plain" )

- Nos indica el tipo de información que el método puede devolver.

Method.TEXT

Method.XML

Method.HTML

Servicio Web RESTful como un recurso JAX-RS

• Como Jersey crea un Servlet para dar servicio a este tipo de Servicios Web, necesitamos configurar correctamente también el fichero web.xml.

88

89

Page 35: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

35

Servicio Web RESTful como un recurso JAX-RS

• Para acceder al URI correspondiente y probar nuestro servicio Web REST, necesitamos conocer como se crea esa URI:

http://<IP_Servidor>:Puerto/<Nombre_Proyecto>/<url-pattern>/<PATH>/<SubPATH>

http://localhost:8080/RESTService / rest / Saludo

Servicio Web RESTful como un recurso JAX-RS

Fichero web.xml

<display-name>RESTService</display-name>

:

<servlet>

<servlet-name>Jersey REST Service</servlet-name>

<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

<init-param>

<param-name>com.sun.jersey.config.property.packages</param-name>

<param-value>servicio.web</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>Jersey REST Service</servlet-name>

<url-pattern>/rest/*</url-pattern>

</servlet-mapping>

Nombre del Proyecto

Nombre del Paquete donde esta la clase

URL relativa de mapeo de la clase

90

91

Page 36: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

36

Servicio Web RESTful como un recurso JAX-RS

• También podemos tener mas de un método en el Servicio REST como por ejemplo

package servicio.web;

import javax.ws.rs.Produces;

import javax.ws.rs.GET;

import javax.ws.rs.Path;

@Path("/Saludo")

public class ClaseHola {

@GET()

@Path("/hola")

@Produces("text/plain")

public String saludar() {

return "Hola Mundo WS REST";

}

@GET()

@Path("/adios")

public String adios() {

return "Adios Mundo WS REST";

}

}

http://localhost:8080/RESTService / rest / Saludo / hola

http://localhost:8080/RESTService / rest / Saludo / adios

Anotaciones de RESTful

• Mediante anotaciones se puede extraer la información la petición:

@GET

public String get(@Context UriInfo ui, @Context HttpHeaders hh) {

MultivaluedMap<String, String> queryParams = ui.getQueryParameters();

MultivaluedMap<String, String> pathParams = ui.getPathParameters();

MultivaluedMap<String, String> headerParams = hh.getRequestHeaders();

Map<String, Cookie> pathParams = hh.getCookies();

}

• Con anotaciones se pueden mapear valores concretos a parámetros, pero los

parámetros deben cumplir alguna de las siguientes condiciones:

1. Ser un tipo primitivo;

2. Tener un constructor que acepte un solo String como argumento;

3. Tener un método estático llamado valueOf o fromString que acepte un solo String

como argumento;

4. Tener una implementación registrada de javax.ws.rs.ext.ParamConverterProviderSPI

capaz de la conversión "a partir de una cadena" para el tipo.

5. Ser List<T>, Set<T> o SortedSet<T>, donde T satisface el 2 o el 3. La colección

resultante será de solo lectura.

92

93

Page 37: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

37

Anotaciones de RESTful

@PathParam

• Esta anotación es una anotación a nivel de parámetro y sirve para ligar parámetros de

una petición clásica REST con las variables del servicio como por ejemplo

/persona/nombre/pedro.

• En donde la variable nombre tiene asignado el valor de pedro.

@GET

@Path("/persona/nombre/{nombre}")

public Persona buscarPersona( @PathParam("nombre") String nombre)

{

Persona persona = null;

for (Persona p : listaPersonas)

if (nombre.equals(p.getNombre()))

{

persona = p;

}

return persona;

} El datos es el nombre pasado en la URL al llamarlo

Anotaciones de RESTful

@QueryParam

• Esta anotación es una anotación útil ya que nos permite leer parámetros que vengan a

través de una petición clásica GET con paso de parámetros

@GET

@Path("/persona")

public Persona buscarPersonaClasico( @QueryParam("nombre") String nombre)

{

Persona persona = null;

for (Persona p : listaPersonas)

if (nombre.equals(p.getNombre()))

{

persona = p;

}

return persona;

}

http://url?nombre=pedro

94

95

Page 38: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

38

Anotaciones de RESTful

@FormParam

• Esta anotación es una anotación a nivel de parámetro y sirve para ligar parámetros de

un formulario HTML con variables del servicio REST .

• Utilizado cuando queremos que los valores de un formulario pasen como parámetros a

un método determinado.

@POST

@Path("/persona/add")

public void addPersona(

@FormParam("nombre") String nombre,

@FormParam("apellidos") String apellidos)

{

Persona p = new Persona(nombre, apellidos);

listaPersonas.add(p);

}

Los datos son pasados desde un FORMULARIO

Anotaciones de RESTful

• @MatrixParam extrae información de los segmentos de ruta de URL.

• @HeaderParam extrae información de los encabezados HTTP.

• @CookieParam extrae información de las cookies recibidas en los

encabezados HTTP.

public Response getCookie(@CookieParam("name") Cookie cookie) {

• @Context devuelve todo el contexto del objeto.

public Response getPeticion(@Context HttpServletRequest request) {

• Para evitar el valor nulo en los parámetros cuando no existan en la

petición se pueden establecer valores por defecto:

@GET

public Response list(

@DefaultValue("0") @QueryParam("page") int page,

@DefaultValue("20") @QueryParam("step") int step,

96

97

Page 39: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

39

Preparar respuesta

• A veces es necesario devolver información adicional en respuesta a una

solicitud HTTP.

• Dicha información se puede generar y devolver utilizando Response y

Response.ResponseBuilder.

• Por ejemplo, un patrón RESTful común para la creación de un nuevo

recurso es utilizar una solicitud POST que devuelve un código de estado

201 (Creado) y un encabezado Location cuyo valor es el URI para el

recurso recién creado.

@POST

@Consumes("application/json")

public javax.ws.rs.core.Response post(String content) {

URI createdUri = ...

create(content);

return Response.status(201).created(createdUri).build();

}

Excepciones

• Es posible utilizar el mismo mecanismo de preparar respuestas para

devolver errores HTTP directamente, por ejemplo, al manejar

excepciones en un bloque try-catch.

Response.status(Responses.NOT_FOUND)

.entity("Not Found").type("text/plain").build()

• Es recomendable usar el sistema de excepciones con la excepción

WebApplicationException o uno de sus herederos.

• throw new WebApplicationException(404);

• throw new WebApplicationException(404, "Not Found");

• Las excepciones que no se intercepten generaran un código de error

500: Error interno de servidor.

98

99

Page 40: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

40

Registro: Explicito

Fichero web.xml<servlet>

<servlet-name>servicio.web.App</servlet-name>

</servlet>

<servlet-mapping>

<servlet-name>servicio.web.App</servlet-name>

<url-pattern>/ws/*</url-pattern>

</servlet-mapping>

Fichero App.javapackage servicio.web;

import javax.ws.rs.core.Application;

import java.util.HashSet;

import java.util.Set;

public class App extends Application {

@Override

public Set<Class<?>> getClasses() {

HashSet<Class<?>> classes = new HashSet<Class<?>>();

classes.add(Service1.class);

classes.add(Service2.class);

// …

return classes;

}

}

Registro: Descubrimiento

Fichero web.xml<servlet>

<servlet-name>Jersey REST Service</servlet-name>

<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

<init-param>

<param-name>com.sun.jersey.config.property.packages</param-name>

<param-value>servicios.rest</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

Fichero App.javapackage servicios.rest;

import javax.ws.rs.ApplicationPath;

import javax.ws.rs.core.Application;

@ApplicationPath("/api")

public class RestApplication extends Application {

}

100

101

Page 41: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

41

Servicio Web RESTful

import javax.ws.rs.Consumes;

import javax.ws.rs.DELETE;

import javax.ws.rs.GET;

import javax.ws.rs.POST;

import javax.ws.rs.PUT;

import javax.ws.rs.Path;

import javax.ws.rs.PathParam;

import javax.ws.rs.Produces;

import javax.ws.rs.core.MediaType;

import javax.ws.rs.InternalServerErrorException;

@Path("/personas")

@Consumes(MediaType.APPLICATION_JSON)

@Produces(MediaType.APPLICATION_JSON)

public class Personas {

@GET

@Produces(MediaType.APPLICATION_JSON)

public Persona[] getAll() {

return …;

}

@GET

@Path("{id: \\d+}")

@Produces(MediaType.APPLICATION_JSON)

public Persona get(@PathParam("id") final int id) {

Servicio Web RESTful

@GET

@Path("{id: \\d+}")

@Produces(MediaType.APPLICATION_JSON)

public Persona get(@PathParam("id") final int id) {

if(lst.get(id) == null)

throw new InternalServerErrorException("No existe");

return …;

}

@POST

@Produces(MediaType.APPLICATION_JSON)

public Persona insert(final Persona persona) {

}

@PUT

@Produces(MediaType.APPLICATION_JSON)

public Persona update(final Persona persona) {

}

@DELETE

@Path("{id: \\d+}")

@Produces(MediaType.APPLICATION_JSON)

public Persona remove(@PathParam("id") final int id) {

}

}

104

105

Page 42: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

42

Seguridad

• La ejecución de aplicaciones JavaScript puede suponer un riesgo para el

usuario que permite su ejecución.

• Por este motivo, los navegadores restringen la ejecución de todo código

JavaScript a un entorno de ejecución limitado.

• Las aplicaciones JavaScript no pueden establecer conexiones de red con

dominios distintos al dominio en el que se aloja la aplicación JavaScript.

• Los navegadores emplean un método estricto para diferenciar entre dos

dominios ya que no permiten ni subdominios ni otros protocolos ni otros

puertos.

• Si el código JavaScript se descarga desde la siguiente URL:

http://www.ejemplo.com

• Las funciones y métodos incluidos en ese código no pueden acceder a:

• https://www.ejemplo.com/scripts/codigo2.js

• http://www.ejemplo.com:8080/scripts/codigo2.js

• http://scripts.ejemplo.com/codigo2.js

• http://192.168.0.1/scripts/codigo2.js

CORS

• Un recurso hace una solicitud HTTP de origen cruzado cuando solicita otro recurso de un dominio distinto al que pertenece.

• XMLHttpRequest sigue la política de mismo-origen, por lo que, una aplicación usando XMLHttpRequest solo puede hacer solicitudes HTTP a su propio dominio. Para mejorar las aplicaciones web, los desarrolladores pidieron a los proveedores de navegadores que permitieran a XMLHttpRequest realizar solicitudes de dominio cruzado.

• El Grupo de Trabajo de Aplicaciones Web del W3C recomienda el nuevo mecanismo de Intercambio de Recursos de Origen Cruzado (CORS, Cross-origin resource sharing: https://www.w3.org/TR/cors). Los servidores deben indicar al navegador mediante cabeceras si aceptan peticiones cruzadas y con que características:

"Access-Control-Allow-Origin", "*"

"Access-Control-Allow-Headers", "Origin, Content-Type, Accept, Authorization, X-XSRF-TOKEN"

"Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"

"Access-Control-Allow-Credentials", "true"

• Soporte: Chrome 3+ Firefox 3.5+ Opera 12+ Safari 4+ Internet Explorer 8+

106

107

Page 43: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

43

Filtro con cabeceras CORS

@Provider

public class CORSHeadersFilter implements ContainerResponseFilter {

@Override

public void filter(ContainerRequestContext request,

ContainerResponseContext response) throws IOException {

String origin = request.getHeaders().getFirst("Origin");

response.getHeaders().add("Access-Control-Allow-Origin", origin);

// response.getHeaders().add("Access-Control-Allow-Origin", "*");

response.getHeaders().add("Access-Control-Allow-Headers",

"origin, content-type, accept, authorization");

response.getHeaders().add("Access-Control-Allow-Credentials","true");

response.getHeaders().add("Access-Control-Allow-Methods",

"GET, POST, PUT, DELETE, OPTIONS, HEAD");

}

}

© JMA 2016. All rights reserved

APLICACIONES CLIENTES DE UN SERVICIO WEB REST

108

110

Page 44: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

44

Introducción a los clientes WS RESTful

• Dependiendo del entorno en que trabajamos, podemos elegir entre varias opciones del cliente.

• Nuestro cliente puede ser:

• Una aplicación de línea de comandos

• Una aplicación GUI Swing

• o una aplicación web.

• Podemos disponer de varios clientes para consumir diferentes tipos de representación.

• Por ejemplo: Aplicación de línea de comando en una secuencia XML formateada .

Aplicación Swing, mostraremos el resultado en un formato más fácil de leer y vamos a crear un cliente de GUI reutilizable.

En JSP, podremos utilizar RSS y el navegador web para mostrar los resultados .

Introducción a los clientes WS RESTful

• Hay muchos servicios RESTful disponibles en Internet de distribuidores conocidos como Yahoo!, Amazon y eBay.

• Algunos de estos Servicios REST están disponibles para poder conectarnos/probar nuestros clientes REST.

• Ejemplos• Servicios de Noticias de Yahoo

Servicio de noticias HTML que nos devuelve información sobre el tema pedido.

Utiliza peticiones HTTP GET

• Amazon E-Commerce

Servicio de e-commerce, para hacer compras de libros, informática, etc

Utiliza peticiones HTTP GET

• Tumblr Es una variación del blog tradicional, que hace hincapié en las entradas de texto cortos con

multimedia

To

do

s n

ece

sita

n C

UE

NT

A d

e U

su

ario

112

113

Page 45: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

45

Funcionamiento de un Cliente WS REST

• La petición de un cliente WS REST es muy simple, sólo debemos conocer el la URI del Servicio REST.

• Etapas:1. Localizar el WS REST

2. Creación de una instancia del URI del WS.

3. Apertura de una conexión con el WS

4. Realización de la llamada al método deseado.

5. Obtener la respuesta y tratarla

Funcionamiento de un Cliente WS REST

Formulario HTML como CLIENTE REST.

• Podemos tener un Web Servicio REST, que esté preparado para recibir parámetros desde un formulario.

@FormParam

• Nos bastaría hacer un formulario HTML para poder llamar al Servicio Web y que éste nos contestara.

• No necesitamos obtener una conexión con el Servicios, sólo utilizarlo y ya.

• Este tipo de Servicios:

Trabajan con Métodos HTML POST

Están preparados para devolver código HTML y ser interpretado por el Navegador.

114

115

Page 46: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

46

Funcionamiento de un Cliente WS REST

Formulario HTML como CLIENTE REST.

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Insert title here</title>

</head>

<body>

<p>This page uses frames. The current browser you are using does not support frames.</p>

<form action="http://localhost:8081/RESTService/rest/Saludo/bienvenido" method="post">

<input type="text" name="nombre">

<input type="text" name="apellido">

<input type="submit" value="Enviar información">

</form>

</body>

</html>

Funcionamiento de un Cliente WS REST

CLIENTE REST con representación XML

• Deberemos crear una instancia URI con el Web Service y realizar una conexión del él.

• Esta representación se trata como un Flujo de Caracteres (InputStream) que serán encapsulados en elementos BufferReaders.

BufferedReader in = new BufferedReader(new InputStreamReader ( tc.getInputStream() ) );

• Su resultado podemos mostrarlo en pantalla o derivarlo a algún fichero para su tratamiento XML.

116

117

Page 47: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

47

Funcionamiento de un Cliente WS REST

CLIENTE REST con representación XML

public class RESTClient {

public static void main(String[] args) {

try {

URL twitter = new URL("http://maps.googleapis.com/maps/api/distancematrix/xml?&

mode=driving&sensor=false&origins=Madrid&destinations=Barcelona");

URLConnection tc = twitter.openConnection();

BufferedReader in = new BufferedReader(new InputStreamReader ( tc.getInputStream() ) );

String line;

while ((line = in.readLine()) != null) {

System.out.println(line);

}

in.close();

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

Funcionamiento de un Cliente WS REST

RESULTADO

<application/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>

<DistanceMatrixResponse>

<status>OK</status>

<origin_address>Madrid, Spain</origin_address>

<destination_address>Barcelona, Spain</destination_address>

<row>

<element>

<status>OK</status>

<duration>

<value>20162</value>

<text>5 hours 36 mins</text>

</duration>

<distance>

<value>621213</value>

<text>621 km</text>

</distance>

</element>

</row>

</DistanceMatrixResponse> :

118

119

Page 48: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

48

Funcionamiento de un Cliente WS REST

CLIENTE REST con representación RSS

• Podemos utilizar el mismo recurso, pero con otra representación.

• Ahora utilizaremos RSS para la obtención de los datos

• Utilizaremos el URI: http://twitter.com/statuses/public_timeline.rss

• Utilizaremos el navegador FireFox para mostrar el resultado de la petición realizada.

• El cliente lo implementaremos con un JSP.

Funcionamiento de un Cliente WS REST

CLIENTE REST con representación RSS

<%@ page contentType="text/xml; charset=UTF-8" %>

<%@ page import="java.io.BufferedReader, java.io.IOException,

java.io.InputStreamReader, java.net.MalformedURLException, java.net.URL, java.net.URLConnection" %>

<%

try {

URL twitter = new URL("http://www.redesparalaciencia.com/redes.rss");

URLConnection tc = twitter.openConnection();

BufferedReader in = new BufferedReader(new InputStreamReader(tc.getInputStream()));

String line;

while ((line = in.readLine()) != null) {

out.println(line);

}

in.close();

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

%>

Cliente.jsp

Para probar el ejemplo, debemos

copiar el fichero al directorio

/webapps/ de TOMCAT

O crear un Proyecto Dinamico y JSP

http://localhost:8080/Cliente.jsp

120

121

Page 49: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

49

Funcionamiento de un Cliente WS REST

Funcionamiento de un Cliente WS REST

CLIENTE REST con representación HTML

• También podemos obtener la representación de un recurso en formato HTML.

• Podemos utilizar un servlet para ejecutar una parte de código y devolver un resultado HTML.

• También podemos obtener el recurso en XML y convertirlo a HTML.

• Las peticiones al recurso serían similares a las anteriores.

122

123

Page 50: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

50

Funcionamiento de un Cliente WS REST

CLIENTE REST con representación HTML

public class RESTfulServletClient extends HttpServlet {

public void doGet(HttpServletRequest req,HttpServletResponse res) {

// Set mime-type

res.setContentType("image/jpeg");

BufferedReader in = null;

try {

:

:

// Conectando con la API de Twitter

URL twitter = new URL("https://dev.twitter.com/docs/api/1/get/users/lookup");

URLConnection tc = twitter.openConnection();

in = new BufferedReader(new InputStreamReader(tc.getInputStream()));

String line;

:

:

}

Servlet

© JMA 2016. All rights reserved

JSON

JavaScript Object Notation

http://tools.ietf.org/html/rfc4627

124

126

Page 51: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

51

© JMA 2016. All rights reserved

Introducción

• JSON (JavaScript Object Notation) es un formato sencillo para el intercambio de información.

• El formato JSON permite representar estructuras de datos (arrays) y objetos (arrays asociativos) en forma de texto.

• La notación de objetos mediante JSON es una de las características principales de JavaScript y es un mecanismo definido en los fundamentos básicos del lenguaje.

• En los últimos años, JSON se ha convertido en una alternativa al formato XML, ya que es más fácil de leer y escribir, además de ser mucho más conciso.

• No obstante, XML es superior técnicamente porque es un lenguaje de marcado, mientras que JSON es simplemente un formato para intercambiar datos.

• La especificación completa del JSON es la RFC 4627, su tipo MIME oficial es application/json y la extensión recomendada es .json.

© JMA 2016. All rights reserved

Estructuras

• JSON está constituido por dos estructuras:– Una colección de pares de nombre/valor. En los lenguajes

esto es conocido como un objeto, registro, estructura, diccionario, tabla hash, lista de claves o un arreglo asociativo.

– Una lista ordenada de valores. En la mayoría de los lenguajes, esto se implementa como tablas, arreglos, vectores, listas o secuencias.

• Estas son estructuras universales; virtualmente todos los lenguajes de programación las soportan de una forma u otra. Es razonable que un formato de intercambio de datos que es independiente del lenguaje de programación se base en estas estructuras.

127

128

Page 52: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

52

© JMA 2016. All rights reserved

Sintaxis

• Un array es un conjunto de valores separados por comas (,) que se encierran entre corchetes [ … ]

• Un objeto es un conjunto de pares nombre:valorseparados por comas (,) que se acotan entre llaves { … }

• Los nombre son cadenas, entre comillas dobles (").• El separador entre el nombre y el valor son los dos puntos

(:)• El valor debe ser un objeto, un array, un número, una

cadena o uno de los tres nombres literales siguientes (en minúsculas):– true, false o null

• Se codifica en Unicode, la codificación predeterminada es UTF-8.

© JMA 2016. All rights reserved

Valores numéricos

• La representación de números es similar a la utilizada en la mayoría de los lenguajes de programación.

• Un número contiene una parte entera que puede ser prefijada con un signo menos opcional, que puede ser seguida por una parte fraccionaria y / o una parte exponencial.

• La parte fraccionaria comienza con un punto (como separador decimal) seguido de uno o más dígitos.

• La parte exponencial comienza con la letra E en mayúsculas o minúsculas, lo que puede ser seguido por un signo más o menos, y son seguidas por uno o más dígitos.

• Los formatos octales y hexadecimales no están permitidos. Los ceros iniciales no están permitidos.

• No se permiten valores numéricos que no se puedan representar como secuencias de dígitos (como infinito y NaN).

129

130

Page 53: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

53

© JMA 2016. All rights reserved

Valores cadena

• La representación de las cadenas es similar a las convenciones utilizadas en la familia C de lenguajes de programación.

• Una cadena comienza y termina con comillas ("). • Se pueden utilizar todos los caracteres Unicode dentro de las

comillas con excepción de los caracteres que se deben escapar: los caracteres de control (U + 0000 a U + 001F) y los caracteres con significado.

• Cuando un carácter se encuentra fuera del plano multilingüe básico (U + 0000 a U + FFFF), puede ser representado por su correspondiente valor hexadecimal. Las letras hexadecimales A-F puede ir en mayúsculas o en minúsculas.

• Secuencias de escape:– \\, \/, \", \n, \r, \b, \f, \t– \u[0-9A-Fa-f]{4}

© JMA 2016. All rights reserved

Objeto con anidamientos

{"Image": {

"Width": 800,"Height": 600,"Title": "View from 15th Floor","Thumbnail": {

"Url": "/image/481989943","Height": 125,"Width": "100"},

"IDs": [116, 943, 234, 38793]}

}

131

132

Page 54: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

54

© JMA 2016. All rights reserved

Array de objetos

[{

"precision": "zip","Latitude": 37.7668,"Longitude": -122.3959,"City": "SAN FRANCISCO","State": "CA","Zip": "94107"

},{

"precision": "zip","Latitude": 37.371991,"Longitude": -122.026020,"City": "SUNNYVALE","State": "CA","Zip": "94085"

}]

© JMA 2016. All rights reserved

JSON en JavaScript

• El Standard Built-in ECMAScript Objects define que todo interprete de JavaScript debe contar con un objeto JSON como miembro del objeto Global.

• El objeto debe contener, al menos, los siguientes miembros:– JSON.parse (Función): Convierte una cadena de la notación de objetos

de JavaScript (JSON) en un objeto de JavaScript.

– JSON.stringify (Función): Convierte un valor de JavaScript en una cadena de la notación de objetos JavaScript (JSON).

133

134

Page 55: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

55

© JMA 2016. All rights reserved

Patrón Agregado (Aggregate)

• Una Agregación es un grupo de objetos asociados que deben tratarse como una unidad a la hora de manipular sus datos.

• El patrón Agregado es ampliamente utilizado en los modelos de datos basados en Diseños Orientados al Dominio (DDD).

• Proporciona un forma de encapsular nuestras entidades y los accesos y relaciones que se establecen entre las mismas de manera que se simplifique la complejidad del sistema en la medida de lo posible.

• Cada Agregación cuenta con una Entidad Raíz (root) y una Frontera (boundary):– La Entidad Raíz es una Entidad contenida en la Agregación de la que colgarán

el resto de entidades del agregado y será el único punto de entrada a la Agregación.

– La Frontera define qué está dentro de la Agregación y qué no.

• La Agregación es la unidad de persistencia, se recupera toda y se almacena toda.

© JMA 2016. All rights reserved

ASYNCHRONOUS JAVASCRIPT AND XML

135

136

Page 56: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

56

© JMA 2016. All rights reserved

Introducción

• Una aplicación Web típica recogerá datos del usuario (primer nivel), los enviará al servidor, que ejecutará un programa (segundo y tercer nivel) y cuyo resultado será formateado y presentado al usuario en el navegador (primer nivel otra vez).

© JMA 2016. All rights reserved

Introducción

• AJAX, acrónimo de Asynchronous JavaScript And XML (JavaScript asíncrono y XML), es una técnica de desarrollo web para crear aplicaciones interactivas o RIA (RichInternet Applications). Estas aplicaciones se ejecutan en el cliente, es decir, en el navegador de los usuarios mientras se mantiene la comunicación asíncrona con el servidor en segundo plano. De esta forma es posible realizar cambios sobre las páginas sin necesidad de recargarlas, mejorando la interactividad, velocidad y usabilidad en las aplicaciones.

• Ajax es una tecnología asíncrona, en el sentido de que los datos adicionales se solicitan al servidor y se cargan en segundo plano sin interferir con la visualización ni el comportamiento de la página. Ajax no constituye una tecnología en sí, sino que es un término que engloba a un grupo de éstas que trabajan conjuntamente.

• JavaScript es el lenguaje interpretado (scripting language) en el que normalmente se efectúan las funciones de llamada de Ajax mientras que el acceso a los datos se realiza mediante XMLHttpRequest, objeto disponible en los navegadores actuales. En cualquier caso, no es necesario que el contenido asíncrono esté formateado en XML.

• Ajax es una técnica válida para múltiples plataformas y utilizable en muchos sistemas operativos y navegadores dado que está basado en estándares abiertos como JavaScript y Document Object Model (DOM).

137

138

Page 57: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

57

© JMA 2016. All rights reserved

XMLHttpRequest

• XMLHttpRequest (XHR), también conocido como XMLHTTP (Extensible MarkupLanguage / Hypertext Transfer Protocol), es una interfaz empleada para realizar peticiones HTTP y HTTPS a servidores Web.

• Para los datos transferidos se usa cualquier codificación basada en texto, incluyendo: texto plano, XML, JSON, HTML y codificaciones particulares específicas.

• El navegador implementa la interfaz como una clase de la que una aplicación cliente puede generar tantas instancias como necesite y permita el navegador para manejar el diálogo con el servidor.

• La primera versión de la interfaz XMLHttpRequest fue desarrollada por Microsoft que la introdujo en la versión 5.0 de Internet Explorer utilizando un objeto ActiveX. A partir de la versión 7 la interfaz se ofrece de manera integrada.

• El proyecto Mozilla incorporó la primera implementación integrada en la versión 1.0 de la Suite Mozilla en 2002. Esta implementación sería seguida por Apple a partir de Safari 1.2, Opera Software a partir del Opera 8.0 e iCab desde la versión 3.0b352.

• El World Wide Web Consortium presentó el 27 de septiembre de 2006 el primer borrador de una especificación estándar de la interfaz.

© JMA 2016. All rights reserved

Propiedades

Propiedad Descripción

readyState

0 No inicializado (objeto creado, pero no se ha invocado el método open)

1 Cargando (objeto creado, pero no se ha invocado el método send)

2Cargado (se ha invocado el método send, pero el servidor aún no ha respondido)

3Interactivo (descargando, se han recibido algunos datos, aunque no se puede emplear la propiedad responseText)

4 Completo (se han recibido todos los datos de la respuesta del servidor)

responseText El contenido de la respuesta del servidor en forma de cadena de texto

responseXMLEl contenido de la respuesta del servidor en formato XML. El objeto devuelto se puede procesar como un objeto DOM

statusEl código de estado HTTP devuelto por el servidor (200 para una respuesta correcta, 404 para "No encontrado", 500 para un error de servidor, etc.)

statusTextEl código de estado HTTP devuelto por el servidor en forma de cadena de texto: "OK", "Not Found", "Internal Server Error", etc.

139

140

Page 58: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

58

© JMA 2016. All rights reserved

Métodos y eventos

Método Descripción

abort() Detiene la petición actual.

getAllResponseHeaders()Devuelve una cadena de texto con todas las cabeceras de la respuesta del servidor.

getResponseHeader("cabecera")Devuelve una cadena de texto con el contenido de la cabecera solicitada.

open("metodo", "url")Establece los parámetros de la petición que se realiza al servidor. Los parámetros necesarios son el método HTTP empleado y la URL destino.

send(contenido) Realiza la petición HTTP al servidor

setRequestHeader("cabecera", "valor")

Permite establecer cabeceras personalizadas en la petición HTTP. Se debe invocar entre el open() y el send().

onreadystatechangeEvento. Se invoca cada vez que se produce un cambio en el estado de la petición HTTP.

© JMA 2016. All rights reserved

Códigos HTTP (status)

status statusText Descripción

100 ContinueUna parte de la petición (normalmente la primera) se ha recibido sin problemas y se puede enviar el resto de la petición

101Switching protocols

El servidor va a cambiar el protocolo con el que se envía la información de la respuesta. En la cabecera Upgrade indica el nuevo protocolo

200 OKLa petición se ha recibido correctamente y se está enviando la respuesta. Este código es con mucha diferencia el que mas devuelven los servidores

201 CreatedSe ha creado un nuevo recurso (por ejemplo una página web o un archivo) como parte de la respuesta

202 AcceptedLa petición se ha recibido correctamente y se va a responder, pero no de forma inmediata

203Non-Authoritative Information

La respuesta que se envía la ha generado un servidor externo. A efectos prácticos, es muy parecido al código 200

204 No Content La petición se ha recibido de forma correcta pero no es necesaria una respuesta

205 Reset ContentEl servidor solicita al navegador que inicialice el documento desde el que se realizó la petición, como por ejemplo un formulario

206 Partial ContentLa respuesta contiene sólo la parte concreta del documento que se ha solicitado en la petición

141

142

Page 59: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

59

© JMA 2016. All rights reserved

Códigos de redirección

status statusText Descripción

300Multiple Choices

El contenido original ha cambiado de sitio y se devuelve una lista con varias direcciones alternativas en las que se puede encontrar el contenido

301Moved Permanently

El contenido original ha cambiado de sitio y el servidor devuelve la nueva URL del contenido. La próxima vez que solicite el contenido, el navegador utiliza la nueva URL

302 FoundEl contenido original ha cambiado de sitio de forma temporal. El servidor devuelve la nueva URL, pero el navegador debe seguir utilizando la URL original en las próximas peticiones

303 See OtherEl contenido solicitado se puede obtener en la URL alternativa devuelta por el servidor. Este código no implica que el contenido original ha cambiado de sitio

304 Not Modified

Normalmente, el navegador guarda en su caché los contenidos accedidos frecuentemente. Cuando el navegador solicita esos contenidos, incluye la condición de que no hayan cambiado desde la última vez que los recibió. Si el contenido no ha cambiado, el servidor devuelve este código para indicar que la respuesta sería la misma que la última vez

305 Use ProxyEl recurso solicitado sólo se puede obtener a través de un proxy, cuyos datos se incluyen en la respuesta

307Temporary Redirect

Se trata de un código muy similar al 302, ya que indica que el recurso solicitado se encuentra de forma temporal en otra URL

© JMA 2016. All rights reserved

Códigos de error del navegador

status statusText Descripción

400 Bad Request El servidor no entiende la petición porque no ha sido creada de forma correcta

401 Unauthorized El recurso solicitado requiere autorización previa

402 Payment Required Código reservado para su uso futuro

403 ForbiddenNo se puede acceder al recurso solicitado por falta de permisos o porque el usuario y contraseña indicados no son correctos

404 Not FoundEl recurso solicitado no se encuentra en la URL indicada. Se trata de uno de los códigos más utilizados y responsable de los típicos errores de Página no encontrada

405Method Not Allowed

El servidor no permite el uso del método utilizado por la petición, por ejemplo por utilizar el método GET cuando el servidor sólo permite el método POST

406 Not AcceptableEl tipo de contenido solicitado por el navegador no se encuentra entre la lista de tipos de contenidos que admite, por lo que no se envía en la respuesta

407Proxy Authentication Required

Similar al código 401, indica que el navegador debe obtener autorización del proxy antes de que se le pueda enviar el contenido solicitado

408 Request TimeoutEl navegador ha tardado demasiado tiempo en realizar la petición, por lo que el servidor la descarta

143

144

Page 60: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

60

© JMA 2016. All rights reserved

Códigos de error del navegador

status statusText Descripción

409 ConflictEl navegador no puede procesar la petición, ya que implica realizar una operación no permitida (como por ejemplo crear, modificar o borrar un archivo)

410 GoneSimilar al código 404. Indica que el recurso solicitado ha cambiado para siempre su localización, pero no se proporciona su nueva URL

411 Length RequiredEl servidor no procesa la petición porque no se ha indicado de forma explícita el tamaño del contenido de la petición

412 Precondition Failed No se cumple una de las condiciones bajo las que se realizó la petición

413Request Entity Too Large

La petición incluye más datos de los que el servidor es capaz de procesar. Normalmente este error se produce cuando se adjunta en la petición un archivo con un tamaño demasiado grande

414 Request-URI Too LongLa URL de la petición es demasiado grande, como cuando se incluyen más de 512 bytes en una petición realizada con el método GET

415Unsupported Media Type

Al menos una parte de la petición incluye un formato que el servidor no es capaz procesar

416Requested Range Not Suitable

El trozo de documento solicitado no está disponible, como por ejemplo cuando se solicitan bytes que están por encima del tamaño total del contenido

417 Expectation FailedEl servidor no puede procesar la petición porque al menos uno de los valores incluidos en la cabecera Expect no se pueden cumplir

© JMA 2016. All rights reserved

Códigos de error del servidor

status statusText Descripción

500 Internal Server ErrorSe ha producido algún error en el servidor que impide procesar la petición

501 Not ImplementedProcesar la respuesta requiere ciertas características no soportadas por el servidor

502 Bad GatewayEl servidor está actuando de proxy entre el navegador y un servidor externo del que ha obtenido una respuesta no válida

503 Service UnavailableEl servidor está sobrecargado de peticiones y no puede procesar la petición realizada

504 Gateway TimeoutEl servidor está actuando de proxy entre el navegador y un servidor externo que ha tardado demasiado tiempo en responder

505HTTP Version Not Supported

El servidor no es capaz de procesar la versión HTTP utilizada en la petición. La respuesta indica las versiones de HTTP que soporta el servidor

145

146

Page 61: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

61

© JMA 2016. All rights reserved

Pasos a seguir

1. Obtener XMLHttpRequest

2. Crear y asignar el controlador del evento onreadystatechange.

3. Abrir conexión: open(method, url, async):

4. Opcional. Añadir cabeceras.

5. Opcional. Serializar datos a enviar vía POST.

6. Enviar petición: send()

© JMA 2016. All rights reserved

Obtener XMLHttpRequest

• Los navegadores que siguen los estándares (Firefox, Safari, Opera, Internet Explorer 7+) implementan el objeto XMLHttpRequest de forma nativa, por lo que se puede obtener a través del objeto window. Los navegadores obsoletos (Internet Explorer 5 y 6) implementan el objeto XMLHttpRequest como un objeto de tipo ActiveX.

var xmlhttp;if (window.XMLHttpRequest) {

//El explorador implementa la interfaz de forma nativaxmlhttp = new XMLHttpRequest();

} else if (window.ActiveXObject) {//El explorador permite crear objetos ActiveXtry {

xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");} catch (e) {

try {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

} catch (e) {}}

}if (!xmlhttp) {

alert("No ha sido posible crear una instancia de XMLHttpRequest");}

147

148

Page 62: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

62

© JMA 2016. All rights reserved

Controlador del evento onreadystatechange

• readyState: cuando vale 4 (Completo: se han recibido todos los datos de la respuesta del servidor)

• status: cuando vale 200 (OK: La petición se ha recibido correctamente y se está enviando la respuesta)

• responseText: El contenido de la respuesta del servidor en forma de cadena de texto

• responseXML: El contenido de la respuesta del servidor en formato XML. xmlhttp.onreadystatechange = function () {

if (xmlhttp.readyState == 4) if (xmlhttp.status == 200) {

xmlDoc = xmlhttp.responseXML;// Tratamiento de los datos recivbdos

} else {// Tratamiento de excepción

}};

© JMA 2016. All rights reserved

Enviar petición

• Abrir conexión: open(method, url, async):– method: Verbo HTTP (GET, POST, …)– async: Opcional, marcar con false para comportamiento síncronoxmlhttp.open("GET","demo_get.asp?nocache=" + Math.random());xmlhttp.open("POST","demo_post.asp");

• Opcional. Añadir cabeceras.xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

• Opcional. Serializar datos a enviar vía POST.– Reunir los datos a enviar en una cadena formada por pares “nombre=valor”

concatenados con ampersand (&).var nombre= document.getElementById("fldNombre");var datos="nombre="+encodeURIComponent(nombre)

+"&apellidos="+encodeURIComponent(apellidos);

• Enviar petición: send()xmlhttp.send(datos);

149

150

Page 63: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

63

© JMA 2016. All rights reserved

Texto plano, HTML y JavaScript

• Texto planovar rslt = http_request.responseText;document.getElementById("myDiv").innerHTML=rslt;

• HTMLvar rslt = http_request.responseText;document.getElementById("myDiv").innerHTML=rslt;

• JavaScriptvar respuesta = http_request.responseText;eval(respuesta);

© JMA 2016. All rights reserved

XML

• Serializar:var datos="<Datos>";datos+="<Nombre>"+nombre+"<\/Nombre>";datos+="<Apellidos>"+apellidos+"<\/Apellidos>";datos+="<\/Datos>";

• Recibir:xmlDoc=xmlhttp.responseXML;txt="";x=xmlDoc.getElementsByTagName("Provincias");for (i=0;i<x.length;i++) {

txt=txt + x[i].childNodes[0].nodeValue + "<br>";}document.getElementById("myDiv").innerHTML=txt;

151

152

Page 64: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

64

© JMA 2016. All rights reserved

JSON

• Serializar:var datos= JSON.stringify(objeto_json);var datos='{"Datos": {';datos+='"Nombre":"'+nombre+'"';datos+=',"Apellidos":"'+apellidos+'"';datos+='}}';

• Recibir:var respuesta = http_request.responseText;var objeto_json= JSON.parse(respuesta).Provincias;//var objeto_json = eval("("+respuesta+")").Provincias;txt="";for (i=0;i<objeto_json.length;i++) {txt=txt + objeto_json[i].Nombre + "<br>";

}document.getElementById("myDiv").innerHTML=txt;

© JMA 2016. All rights reserved

Detener las peticiones

…// Fijar un temporizador que aborte la peticiónvar temporizador = setTimeout(function() {

xmlhttp.abort();alert(…);

}, 18000); // 2 minutosxmlhttp.onreadystatechange = function () {

if (xmlhttp.readyState == 4) {clearTimeout(temporizador);if (xmlhttp.status == 200) {

// Eliminar el temporizador, innecesario…

153

154

Page 65: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

65

© JMA 2016. All rights reserved

Indicador de descarga

var temporizador = setTimeout(function() {

document.getElementById("trabajandoAJAX").style.display="none";

xmlhttp.abort();

alert(…);

}, 18000); // 30 segundos

// Muestra el indicador hasta ahora oculto

document.getElementById("trabajandoAJAX").style.display = "block";

xmlhttp.onreadystatechange = function () {

if (xmlhttp.readyState == 4)

try {

if (xmlhttp.status == 200) {

} finally {

// Oculta el indicador

document.getElementById("trabajandoAJAX").style.display="none";

}

© JMA 2016. All rights reserved

JQUERY AJAX

155

156

Page 66: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

66

© JMA 2016. All rights reserved

Introducción

• AJAX, acrónimo de Asynchronous JavaScript And XML (JavaScript asíncrono y XML), es una técnica de desarrollo web para crear aplicaciones interactivas o RIA (Rich Internet Applications).

• A través de varios métodos, jQuery provee soporte para Ajax, permitiendo abstraer las diferencias que pueden existir entre navegadores.

• El método $.ajax() encapsula todas las tareas necesarias para realizar la petición asíncrona y procesar la respuesta.

• El método $ .ajax () devuelve el objeto jqXHR, que es un supraconjunto del objeto XMLHttpRequest.

• jQuery suministra atajos preconfigurados mediante los métodos $.get(), $.getScript(), $.getJSON(), $.post() y $().load().

• A pesar que la definición de Ajax posee la palabra XML, la mayoría de las aplicaciones no utilizan dicho formato para el transporte de datos, sino que en su lugar se utiliza HTML plano o información en formato JSON.

© JMA 2016. All rights reserved

Tipos de datos

• jQuery soporta los formatos mas habituales de intercambio de datos:– text: Para el transporte de cadenas de caracteres simples.– html: Para el transporte de bloques de código HTML que serán

ubicados en la página.– script: Para añadir un nuevo script con código JavaScript a la

página.– json: Para transportar información en formato JSON, el cual

puede incluir cadenas de caracteres, arrays y objetos.– jsonp: Para transportar información JSON de un dominio a otro.– xml: Para transportar información en formato XML.

• Cuando el tipo de dato no este es especificado por el nombre del método habrá que indicarlo en la configuración.

157

158

Page 67: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

67

© JMA 2016. All rights reserved

Petición AJAX

$.ajax({

url : 'post.php', // la URL para la petición

data : { id : 123 }, // la información a enviar

type : 'GET', // especifica si será una petición POST o GET

dataType : 'json', // el tipo de información de la respuesta

// código a ejecutar si la petición es satisfactoria

success : function(json) {

$('<h1/>').text(json.title).appendTo('body');

$('<div class="content"/>')

.html(json.html).appendTo('body');

},

// código a ejecutar si la petición falla

error : function(xhr, status) {

alert('Disculpe, existió un problema');

}

});

© JMA 2016. All rights reserved

Configuración básica

• url: Establece la URL en donde se realiza la petición. La opción url es obligatoria para el método $.ajax();

• type/method: Verbo HTTP: GET, POST, PUT, DELETE, HEAD, … Por defecto GET. Algunos verbos pueden no estar soportados por todos los navegadores.

• data: Establece la información que se enviará al servidor. Puede ser: un objeto, un array o una cadena de datos.

• dataType: Establece el tipo de información que se espera recibir como respuesta del servidor. Si no se especifica ningún valor, de forma predeterminada, jQuery revisa el tipo de MIME recibido con la respuesta.

• jsonp: Establece el nombre de la función de devolución de llamada a enviar cuando se realiza una petición JSONP. De forma predeterminada el nombre es callback

159

160

Page 68: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

68

© JMA 2016. All rights reserved

Configuración especifica

• async: Establece si la petición será asíncrona o no. De forma predeterminada el valor es true. Debe tener en cuenta que si la opción se establece en false, la petición bloqueará la ejecución de otros códigos hasta que dicha petición haya finalizado.

• username: El usuario que utilizada XMLHttpRequest en respuesta a una solicitud de autenticación de acceso HTTP.

• password: La contraseña que utilizada XMLHttpRequest en respuesta a una solicitud de autenticación de acceso HTTP.

• headers: Permite añadir los pares clave/valor adicionales a enviar en el encabezado de las peticiones. El encabezado “X-Requested-With: XMLHttpRequest” siempre se añade.

• cache: Establece si la petición será guardada en la cache del navegador. De forma predeterminada es true para todos los dataType excepto para script y jsonp. Cuando posee el valor false, se agrega una cadena de caracteres anti-cache al final de la URL de la petición.

© JMA 2016. All rights reserved

Configuración avanzada

• context: Establece el alcance en que la/las funciones de devolución de llamada se ejecutaran (define el significado de this dentro de las funciones). De manera predeterminada this hace referencia al objeto originalmente pasado al método $.ajax.

• timeout: Establece un tiempo en milisegundos para considerar a una petición como fallada.

• contentType: Indica al servidor el tipo de contenido. El valor predeterminado es "application/x-www-form-urlencoded; charset=UTF-8 ", lo cual es adecuado para la mayoría de los casos.

• crossDomain: true si se desea forzar una solicitud crossdomain (como JSONP) en el mismo dominio. Esto permite, por ejemplo, la redirección del lado del servidor a otro dominio. Por defecto: false para solicitudes del mismo dominio y true para las solicitudes a otros dominios.

• converters: Conjunto de convertidores para los tipo de datos recibidos. Un convertidor es una función que devuelve el valor transformado de la respuesta. Por defecto: {"* text": window.String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML}

161

162

Page 69: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

69

© JMA 2016. All rights reserved

Configuración de Eventos

• complete: function(jqXHR jqXHR, String textStatus) Establece una función de devolución de llamada que se ejecuta cuando la petición está completa, haya fallado o no. La función recibe como argumentos el objeto de la petición en crudo y el código de estatus de la misma petición.

• success: function(Anything data, String textStatus, jqXHR jqXHR) Establece una función a ejecutar si la petición ha sido satisfactoria. Dicha función recibe como argumentos la información de la petición (convertida a objeto JavaScript en el caso que dataType sea JSON), el estatus de la misma y el objeto de la petición en crudo.

• error: function(jqXHR jqXHR, String textStatus, String errorThrown) Establece una función de devolución de llamada a ejecutar si resulta algún error en la petición. Dicha función recibe como argumentos el objeto de la petición en crudo y el código de estatus de la misma petición.

• statusCode: Establece un conjunto de pares código/función. Permite asociar una función a cada código HTTP de estado.

© JMA 2016. All rights reserved

Atajos

• Los métodos que provee la biblioteca son:– $.get(): Realiza una petición GET.– $.getScript(): Realiza una petición GET y añade un script a la página.– $.getJSON(): Realiza una petición GET y espera que el dato devuelto sea JSON.– $.post(): Realiza una petición POST.– $().load(): Obtiene el código HTML de una URL y rellena a los elementos

seleccionados con la información obtenida.

• Los métodos pueden tener los siguientes argumentos, salvo la URL obligatoria, en el siguiente orden:– url: La URL en donde se realizará la petición.– data: La información que se enviará al servidor (NO en $.getScript()).– success: Función que se ejecuta en caso que petición haya sido satisfactoria

(String script, String textStatus, jqXHR jqXHR). – dataType: El tipo de dato que se espera recibir desde el servidor: xml, json,

jsonp, script, text o html (NO en $.getJSON() ni en $.getScript()).

• Con $.ajaxSetup() se fijan las opciones de configuración por defecto.

163

164

Page 70: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

70

© JMA 2016. All rights reserved

Ayudantes para formularios

• Para transformar la información de un formulario a una cadena POST$('#myForm').serialize();Resultado:field1=123&field2=hello+world

• Para crear un array de objetos conteniendo información de un formulario$('#myForm').serializeArray();Resultado:[

{ name : 'field1', value : 123 },{ name : 'field2', value : 'hello world' }

]

• Para enviar el formulario:$("button").click(function(){

$.post("demo_test_post.asp",$('#myForm').serialize(),function(data, status){

alert("Data: " + data + "\nStatus: " + status);});

});

© JMA 2016. All rights reserved

Controladores de eventos globales

• Se pueden registra controladores globales que se llevan a cabo para cualquier petición Ajax en la página.

• Solo se dispararon si la propiedad global en jQuery.ajaxSetup () es true, como es por defecto.

• Los eventos disponibles– .ajaxComplete(): Cuando se completa la petición.– .ajaxSuccess(): Cuando se completa la petición satisfactoriamente.– .ajaxError(): Cuando se completa la petición con un error.– .ajaxSend(): Antes de enviar una petición Ajax.– .ajaxStart(): Cuando comienza la primera petición Ajax.– .ajaxStop(): Cuando todas las peticiones Ajax han completado.$(document).ajaxError(function(event, request, settings) { … }$('#trabajandoAJAX')

.ajaxStart(function() { $(this).show(); })

.ajaxStop(function() { $(this).hide(); });

165

166

Page 71: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

71

© JMA 2016. All rights reserved

Promise Pattern

• El Promise Pattern es un patrón de organización de código que permite encadenar llamadas a métodos que se ejecutaran a la conclusión del anterior (flujos).

• Simplifica y soluciona los problemas comunes con el patrón Callback:– Llamadas anidadas– Complejidad de código

o.m(1, 2, f(m1(3, f1(4,5,ff(8))) → o.m(1, 2).f().m1(3).f1(4 , 5).ff(8)

• Aunque se utiliza extensamente para las operaciones asíncronas, no es exclusivo de las mismas.

• La librería JQuery incluye el objeto $.Deferred desde la versión 1.5. • Las promesas se han incorporado a los objetos estándar de

JavaScript en la versión 6.

© JMA 2016. All rights reserved

Objeto Promise

• Una “promesa” es un objeto que actúa como proxy en los casos en los que no se puede utilizar el verdadero valor porque aún no se conoce (no se ha generado, llegado, …) pero se debe continuar sin esperar a que este disponible (no se puede bloquear la función esperando a su obtención).

• Una “promesa” puede tener los siguientes estados:– Pendiente: Aún no se sabe si se podrá o no obtener el resultado.– Resuelta: Se ha podido obtener el resultado (defered.resolve())– Rechazada: Ha habido algún tipo de error y no se ha podido obtener el

resultado (defered.reject())

• Los métodos del objeto promesa devuelven al propio objeto para permitir apilar llamadas sucesivas.

• Como objeto, la promesa se puede almacenar en una variable, pasar como parámetro o devolver desde una función, lo que permite aplicar los métodos en distintos puntos del código.

167

168

Page 72: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

72

© JMA 2016. All rights reserved

Objeto Defered

• El objeto Defered gestiona la creación del objeto Promise y los cambios de estados del mismo.

this.list = function() {var defered=$. Deferred();var promise=defered.promise(); $.ajax({

url : 'ws/datos.php', type : 'GET', success : function(data) { defered.resolve(data); }, error : function(xhr, status) { defered.reject(status); }

}); return promise;

}

© JMA 2016. All rights reserved

Invocar promesas

• El objeto Promise expone los métodos:– then(fnPendiente, fnError, fnProgeso): Recibe como parámetro la función a ejecutar cuando

termine correctamente la anterior y, opcionalmente, la función a ejecutar en caso de que falle la anterior y la del progreso.

– done(fnPendiente): Recibe como parámetro la función a ejecutar en caso de que se cumpla.– fail(fnError): Recibe como parámetro la función a ejecutar en caso de que falle.– always(fnNueva): Recibe como parámetro la función a ejecutar independientemente de si ha

sido resuelta o rechazada.– progress(fnProgeso): Recibe como parámetro la función a ejecutar cuando se indique cambio

de progreso.

list().then(calcular, ponError).then(guardar)

• Si queremos que algo se ejecute cuando dos o más promesas sean resueltas, nos valdremos de la función $.when() que dada una lista de Promesas, devuelve una nueva que sigue el siguiente patrón:

– Cuando todas las promesas hayan sido resueltas, la promesa devuelta será resuelta.– Cuando alguna de las promesas haya fallado, la promesa devuelta será rechazada.

var p1 = $.get(‘/Tweets.php’), p2= $.get(‘/Mensajes.php’); $.when(p1, p2).done(function() { … });

169

170

Page 73: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

73

© JMA 2016. All rights reserved

$.ajax() con promesas

• Se ha redefinido la función $.ajax y los atajos para que devuelvan promesas.

var jqxhr = $.ajax( "example.php" ).done(function() { alert( "success" ); }).fail(function() { alert( "error" ); });

// …jqxhr.always(function() { alert( "complete" ); });

• Los métodos jqXHR.success(), jqXHR.error() y jqXHR.complete() de callbacks han sido marcados como obsoletos y se eliminaran en una futura version.

VALORACIÓN DE LA ACCIÓN FORMATIVA

Tu opinión es muy importante para nosotros, por eso solicitamos tu colaboración para analizar la

calidad de esta acción formativa y para identificar elementos de mejora .

ACCEDE AL CUESTIONARIO

www.iconotc.com

171

172

Page 74: FORMACIÓN EN NUEVAS TECNOLOGÍAS Web Services ......JAX-RS Injection 3. API Cliente JAX-RS 2.0. Clientes de bajo nivel 4. Control de Errores y respuestas del servidor 5. JAX-RS asíncrono

13/02/2019

74

¡Seguimos en contacto!

www.iconotc.com

173