tsi2 07-web-services

132
Instituto de Computación Facultad de Ingeniería Universidad de la República de Uruguay Taller de Sistemas de Información 2 Web Services 11 de Setiembre de 2012

Upload: stefita-banchon

Post on 01-Jul-2015

100 views

Category:

Education


0 download

DESCRIPTION

Web Services

TRANSCRIPT

Page 1: Tsi2 07-web-services

Instituto de

Computación

Facultad de

Ingeniería

Universidad de la

República de Uruguay

Taller de Sistemas de

Información 2

Web Services

11 de Setiembre de 2012

Page 2: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 2

Page 3: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 3

Que es un web service?

● Es un servicio o funcionalidad

● Se encuentra disponible a través de Internet o una

Intranet

● Usando una forma estandarizada de mensajería

(generalmente XML)

● No se encuentra atado a ningún sistema operativo ni

ningún lenguaje de programación

● Se puede auto describir (generalmente vía XML)

● Puede ser descubierto a través de un mecanismo de

búsqueda

Page 4: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 4

Tendencias

● Hoy día tenemos dos grandes tendencias en el

desarrollo de web services

● Web services que estandarizan su información

a través de mensajes XML, en formato SOAP.

Estos se denominan servicios SOAP

● Web services que no estandarizan su

información, denominados servicios REST

Page 5: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 5

Web Services SOAP

● Este tipo de servicios, implica el intercambio de

mensajes XML, codificados según el protocolo

SOAP

● Estos mensajes tienen la forma:

Page 6: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 6

Web Services SOAP

● Estos mensajes en formato SOAP son movidos de un

sistema a otro, utilizando HTTP

● El sistema recibe el mensaje, hace lo que tiene que

hacer, y devuelve una respuesta también en formato

SOAP

● Es un sistema simple, que no tiene en cuenta aspectos

importantes del desarrollo de soluciones empresariales,

pero que son tenidas en cuenta a través de extensiones

a los estándares

Page 7: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 7

Especificaciones

● Los servicios web utilizan diferentes

especificaciones para estandarizar su

funcionamiento

● Estas se dividen en dos tipos

● Especificaciones básicas

● Especificaciones avanzadas, de las cuales algunas

se destacan por su utilidad para la construcción de

soluciones de integración

Page 8: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 8

WSDL

Web Services Description Language

(WSDL)

HTTP

SOAP Simple Object

Access Protocol (SOAP)

Universal Description, Discovery and Integration

(UDDI)

Publish Find

FTP, SMTP, etc.

Especificaciones basicas

Page 9: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 9

Page 10: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 10

Page 11: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 11

Page 12: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 12

Mensajes SOAP

● La estructura básica de un mensaje SOAP

consiste de un elemento “Envelope” el cual

contiene

● un elemento opcional “Header”

● un elemento requerido “Body”

– que puede incluir un elemento “Fault”

● El “Envelope” es el elemento raíz de todo

mensaje SOAP e identifica un documento XML

como un mensaje SOAP

Page 13: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 13

Mensaje SOAP

<?xml version="1.0"?>

<soap:Envelope

xmlns:soap="http://www.w3.org/2001/12/soap-envelope"

soap:encodingStyle="http://www.w3.org/2001/12/soap-

encoding">

<soap:Header>

...

</soap:Header>

<soap:Body>

...

<soap:Fault> ... </soap:Fault>

</soap:Body>

</soap:Envelope>

Page 14: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 14

Mensaje SOAP – Body

<soap:Body>

<t:Translate xmlns:t="http://....../translations">

<t:Word>red</t:Word>

</t:Translate>

</soap:Body>

<soap:Body>

<t:TranslateResponse

xmlns:t="http://....../translations">

<t:Translation>rojo</t:Translation>

</t:TranslateResponse>

</soap:Body>

resultado

solicitud

Page 15: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 15

Transporte de mensajes

● SOAP no impone el uso de un determinado

protocolo para el intercambio de mensajes

● A través del concepto de “binding” SOAP

permite especificar:

● cómo los mensajes SOAP se encapsulan en un

protocolo de transporte

● cómo los mensajes SOAP deben ser tratados con

las primitivas del protocolo

Page 16: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 16

Page 17: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 17

WSDL

● Web Services Description Language

● Lenguaje basado en XML que permite describir

la interfaz y otras características de un Web

Service

● Un documento WSDL puede dividirse en dos

partes:

● descripción abstracta

● descripción concreta

Page 18: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 18

Page 19: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 19

Estandares avanzados

Page 20: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 20

Profiles

● Basic Profile (BP)

● Guías para el desarrollo de WS interoperables utilizando las

especificaciones centrales

● Basic Security Profile (BSP)

● Extiende el BP definiendo guías para el desarrollo de WS

seguros

● Algunos ejemplos:

● Prohíbe el uso de SSL 2.0

● Restringe cantidad de timestamps en header a 1

● Prohíbe encriptar los elementos body, header y envelope

Page 21: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 21

Plataformas para web services

● Las plataformas de Web Services son un

conjunto de herramientas para un lenguaje de

programación específico

● Permiten:

● invocar web services

● realizar el deploy de Web Services

● Las plataformas tienen en general

componentes en el servidor y en el cliente

Page 22: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 22

Plataformas para web services

● Los componentes en el servidor se alojan

usualmente en algún tipo de contenedor

● servidor Java EE

● contenedor de servlets

● Los componentes en el cliente se empaquetan

en general como herramientas para acceder a

interfaces asociadas a WS

Page 23: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 23

Plataformas para web services

● Las plataformas de Web Services

proveen en general tres subsistemas:

● Invocación

● Serialización

● Deployment

Page 24: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 24

Subsistema de invocación (servidor)

● Recibir SOAPs desde el transporte (HTTP, etc)

● Invocar manejadores para QoS (seguridad, etc)

● Determinar la operación que se quiere invocar

● Determinar la clase/método que se quiere invocar

● Enviar el SOAP al sistema de serialización

● Invocar la clase-método

● Enviar el resultado al sistema de serialización

● Crear y enviar el mensaje SOAP al transporte para el

envío de la respuesta

Page 25: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 25

Subsistema de invocación (cliente)

● Instanciar la clase que implementa la interfaz para

acceder a WS y manejar su invocación

● Enviar parámetros al sistema de serialización

● Adjuntar los mismos en un mensaje SOAP

● Invocar manejadores para QoS

● Enviar el SOAP a través del trasporte (ej. HTTP)

● Recibir los SOAPs respuesta desde el transporte

● Enviar los SOAP al sistema de serialización y completar

la invocación

Page 26: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 26

Subsistema de invocación

Subsistema de Invocación (cliente)

Subsistema de Invocación (servidor)

Param

Param

Param

Request

SOAP

Request

SOAP

Respons

e SOAP

Respons

e SOAP

Param

Param

Param

Return

Objeto

Función

Invocación de Métodos

Invocación de Métodos

Intercambio de Mensajes SOAP

Return

Page 27: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 27

Subsistema de serialización

Page 28: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 28

Subsistema de deployment

● Provee herramientas para configurar un

componente de software para que pueda ser

invocado como un WS vía mensajes SOAP

● Desplegar el componente de SW

● Mapeo operaciones WSDL – componente SW

● Configuración serialización (esquema – params)

● Publicación del WSDL

● Configurar aspectos avanzados (seguridad, etc.)

● Configurar el listener en una dirección de red

Page 29: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 29

Algunas plataformas de WS

● Windows Communication Foundation

● http://msdn.microsoft.com/en-us/library/ms730294.aspx

● Apache AXIS 2

● http://axis.apache.org/axis2/java/core/

● Apache CXF

● http://cxf.apache.org/

● Proyecto Metro

● http://metro.java.net/

● JBoss Web Services

● http://www.jboss.org/jbossws

Page 30: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 30

Implementacion de WS

● Implementación Bottom-up

● Se comienza por el código (por ejemplo, una

clase Java)

● Code-First / Contract-Last

● Implementación Top-down

● Se comienza por el WSDL

● Code-Last / Contract-First

Page 31: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 31

Bottom-Up

● Ventajas

● Forma rápida de exponer funcionalidades vía WS

● No requiere conocimiento de XMLSchema, WSDL

● Desventajas

● El esquema es embebido en el WSDL

● Los cambios en la interfaz son más difíciles de

manejar

● En el WSDL hay dependencias con la

implementación (paquetes y namespaces)

Page 32: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 32

Top-Down

● Ventajas

● Permite el desarrollo independiente y paralelo entre

cliente y servicio

● Cuando se crean nuevos tipos, éstos pueden ser

reutilizados por otros servicios

● No se generan dependencias con la implementación

● Desventajas

● Requiere conocimiento de XMLSchema y WSDL

Page 33: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 33

Web Services en JavaEE 6

● La plataforma JavaEE 6, incluye soporte para

web services, utilizando el protocolo SOAP, a

traves del API JAX-WS

● Java API for XML Web Services

● La implementacion de referencia se denomina

Metro, es desarrollada por Oracle y viene

incluida dentro del servidor de aplicaciones

GlassFish

Page 34: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 34

Web Services en JavaEE6 y JDK6

● En el caso de Jboss, la implementacion de

referencia viene incluida en el componente

JBossWS, dentro del servidor de aplicaciones

JBoss 6

● A partir de la version 6 (update 4), la plataforma

Java estandar (JDK), incluye las APIs para

trabajar con JAX-WS y JAXB, fundamentales

para el consumo de web services

Page 35: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 35

Definiendo un web service

Page 36: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 36

Definiendo un web service

● En el ejemplo anterior se intercambia un objeto

CreditCard entre el consumidor y el proveedor

del servicio

● Los datos intercambiados, deben ser un

documento XML, por lo que se necesita un

método para transformar el objeto Java en un

documento XML y viceversa

● Para esto utilizamos JAXB, anotándolo con

@javax.xml.bind.annotation.XmlRootElement

Page 37: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 37

Definiendo un web service

Page 38: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 38

Invocando un web service

● Un ejemplo de posible cliente...

Page 39: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 39

JAXB

● Si bien el intercambio de información

entre el consumidor y proveedor se hace

en base a XML, el codigo Java no tiene

porque interactuar con esto directamente

● JAXB provee un estándar para trabajar

con representaciones Java de

documentos XML y viceversa

Page 40: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 40

La clase CreditCard

Page 41: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 41

El documento XML

Page 42: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 42

El schema XML

Page 43: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 43

Binding

Page 44: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 44

Marshalling/Unmarshalling

Page 45: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 45

Anotaciones

● JAXB es similar a JPA, salvo que la

persistencia se realiza contra un documento

XML, en vez de una tabla de la base de datos

● El mapping al documento puede ser

customizado utilizando las anotaciones en el

paquete javax.xml.bind.annotation

● El equivalente de @Entity en JAXB, se

denomina @XmlRootElement

Page 46: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 46

Anotaciones

Page 47: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 47

El esquema asociado...

Page 48: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 48

El documento obtenido

Page 49: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 49

Page 50: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 50

Web Services / Funcionamiento

● Si bien el programador Java no debe

preocuparse del manejo de los protocolos de

bajo nivel en web services, es conveniente

conocer que esta sucediendo por detras...

Page 51: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 51

JAX-WS

● Como la mayoría de los componentes Java EE,

los web services utilizan el esquema de

configuración por excepción

● Solo necesitamos una anotación para

transformar un POJO en un web service,

@WebService

● Como en el caso de los EJBs, hay una serie de

requerimientos a la hora de escribir un

servicio...

Page 52: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 52

JAX-WS

● La clase debe estar anotada con

@javax.jws.WebService

● Si el web service es implementado con un EJB,

entonces este solo puede ser stateless

● La clase debe ser publica, y no puede ser final ni

abstract

● La clase debe tener un constructor por defecto

● La clase no debe definir el método finalize

● El servicio debe ser stateless

Page 53: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 53

JAX-WS

● Basta con que un POJO cumpla con los

requisitos anteriores, para que pueda ser

desplegado en un servlet container

● Esto se conoce como servlet endpoint

● Análogamente, un Stateless EJB puede ser

utilizado como clase de implementación del

servicio

● Esto se conoce como EJB endpoint

Page 54: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 54

@WebService

● Esta anotación marca una clase o interfaz como un web

service

● Si se aplica directamente sobre la clase y no la interfaz,

entonces el container generara la interfaz a partir de los

métodos públicos

Page 55: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 55

@WebMethod

● Por defecto, todos los métodos públicos del

web service (o de su interfaz) son incluidos

dentro de lo que se expone al exterior

● Para customizar la forma en como se hace esto

(por ejemplo para cambiar el nombre del

método), usamos la anotación @WebMethod,

aplicada sobre el método a modificar

● Por ejemplo...

Page 56: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 56

@WebMethod

Page 57: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 57

@WebResult

● Opera en conjunto con la anotación anterior

● Permite customizar el nombre del mensaje

devuelto como resultado de la operación

Page 58: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 58

@WebParam

● Permite customizar los parámetros que son enviados al

servicio

● Podemos cambiar el nombre y el tipo de parámetro (IN,

OUT, INOUT)

Page 59: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 59

@OneWay

● Es una anotación que permite indicar que un

método, no retorna valores

● Por ejemplo, los métodos que retornan void

● Esto permite que el container realice

optimizaciones con los métodos de este tipo,

por ejemplo, usando Asynchronous (solo en

EJB)

Page 60: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 60

Ciclo de vida

● El ciclo de vida de los web services es similar al de los

stateless session beans

● No mantienen ningún estado, simplemente existen o no

existen

● Como en el caso de los stateless, podemos usar las

anotaciones @PreDestroy y @PostConstruct

● En el caso de un web service implementado como EJB,

se pueden utilizar interceptors

Page 61: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 61

Ciclo de vida

Page 62: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 62

Web Service Context

● Como en el caso de los EJBs, el web service

tiene un contexto que permite obtener

información útil del ambiente de ejecución del

servicio

● Se inyecta como en el caso de los EJB, usando

@Resource

Page 63: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 63

Web Service Context

● GetMessageContext

● Permite acceder al mensaje SOAP, por ejemplo para

obtener los headers

● GetUserPrincipal

● Identifica a traves del Principal al emisor del

mensaje

● IsUserInRole

● Determina si un usuario autenticado esta presente

en un rol determinado

Page 64: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 64

Invocando un web service

Page 65: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 65

Invocando un web service

● Usando herramientas que generen stubs y clases Java

a partir del WSDL, podemos invocar un servicio web

● El JDK provee una herramienta, denominada wsimport

que genera las clases necesarias para poder realizar la

invocación a un determinado web service del que

conocemos su wsdl

● Las interfaces generadas se denominan SEI (Service

Endpoint Interfaces)

Page 66: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 66

Invocando un web service

● Las interfaces y artefactos generados, deben

ser colocados en el proyecto que realizara el

consumo del servicio web

● Una vez colocados los artefactos (.java)

generados, podemos hacer la invocacion de

esta forma:

Page 67: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 67

Generando los artefactos

● Usamos la herramienta wsimport

● Por ejemplo, en el practico tenemos este

ejemplo:

● wsimport -keep -d ../src

http://localhost:8080/WebService/CalculadoraSer

viceImpl/CalculadoraServiceImpl?wsdl

● keep permite mantener el codigo fuente generado

● -d ../src es la ruta donde se almacena dicho codigo

Page 68: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 68

@WebServiceRef

● Permite inyectar una referencia a un servicio

web, indicando la localizacion del WSDL del

servicio

● Por ejemplo:

@WebServiceRef(wsdlLocation="http://localhost:8

080/app/CalculatorService?WSDL")

private CalculatorService service;

● Solo puede ser utilizado en componentes

managed (managed beans, ejbs, etc)

Page 69: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 69

REST

● La motivación para desarrollar REST fue la de crear un

modelo arquitectónico de como tiene que funcionar la

web, de forma que sirva de guía para los protocolos de

la web

● REST ha sido usado para describir la arquitectura de la

web, identificar problemas existentes, comparar

soluciones alternativas, y asegurarse que las

extensiones a los protocolos no violan las restricciones

centrales que hace a la web exitosa

Page 70: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 70

REST

● Representational State Transfer

● Es un estilo arquitectónico para la

construcción de software

● REST fue desarrollado junto con el

protocolo HTTP/1.1, el cual se adhiere a

REST

Page 71: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 71

Conceptos

● La arquitectura esta compuesta por clientes y

servidores

● Requests y Responses

● Los Requests y Responses son construidos en

base a la idea de transferir representaciones de

recursos

● Los clientes contienen representaciones

● Los servidores contienen los recursos en si

Page 72: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 72

Conceptos

Page 73: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 73

Conceptos

Page 74: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 74

ROA

● REST es un estilo arquitectónico

● Una arquitectura que se adhiere a este

estilo, es ROA: Resource Oriented

Architecture

● Existen otras que pueden (en parte)

también adherirse a este estilo de trabajo

Page 75: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 75

Ejemplos de ROA

● Las URLs apuntan a recursos

(sustantivos)

● Métodos universales para manejar los

recursos

● GET, POST, PUT, DELETE

● No se maneja estado en el servidor

● Se hace uso de cache

Page 76: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 76

Definimos REST en base a...

● Recursos y URIs

● Representaciones

● Interfaces uniformes

● HATEOAS

Page 77: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 77

... pero NO en base a ...

● Schemas (XSD)

● Lenguajes de descripción

● Generación de código

● Registros

Page 78: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 78

REST/HTTP: Recursos

● Algo, una cosa con identidad

● Una persona, un perfil de Facebook, un usuario en

Twitter, una direccion, una imagen, un video en

Youtube

● Los recursos se nombran con URIs

● Las URIs son estables (no cambian tan seguido)

Page 79: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 79

REST/HTTP: Recursos

● Podemos pensar que la URI es la PK del

recurso

Page 80: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 80

URI

● Generalmente son opacas

● http://www.test.com/24985725

● Lo importante es que los clientes no tengan que

parsearla y entenderla

● Sin embargo, son opacas para las aplicaciones

cliente, pero no para los desarrolladores de clientes

● Una buena forma de organizar los recursos, es

usar un enfoque jerárquico

● http://example.com/movie/TheAvengers/review

Page 81: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 81

Representaciones

● Son los elementos que se envían dentro de un

request, y que se reciben en un response

● Por ejemplo:

Page 82: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 82

Media Types (MIME Types)

● Son el equivalente a la clase de un objeto, o el

schema de un documento XML

Page 83: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 83

Negociacion

● Las representaciones son negociables

Page 84: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 84

Negociacion

● La idea es no sobrecargar las URIs

● Le decimos a los intermediarios y clientes como

vamos a aceptar una representación

Page 85: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 85

Interfaz uniforme

Page 86: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 86

Page 87: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 87

Como se describen las APIs

Page 88: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 88

Un ejemplo:

● Una aplicación quiere transferir U$S1000

de una cuenta bancaria a la otra

● Que Recursos y URIs tendriamos?

Page 89: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 89

Un ejemplo

Page 90: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 90

Una transferencia...

Page 91: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 91

... respuesta

Page 92: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 92

Status

Page 93: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 93

Es esto RESTful?

En realidad, son nombres de recursos

Page 94: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 94

Es esto RESTful?

A través de GET, queremos hacer una operación de modificación

Debemos usar PUT

Page 95: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 95

Es esto RESTful?

Estamos usando GET y POST como sinónimos, cuando no lo son

Page 96: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 96

Es esto RESTful?

Estamos usando IDs internos de aplicación, cuando deberían utilizarse LINKS

Page 97: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 97

Es esto RESTful?

Estamos escondiendo errores del intermediario o del cliente

Debemos usar los códigos de error de HTTP 4xx o 5xx

Page 98: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 98

Web Service + REST

● Son web services desarrollados según la

filosofía de REST

● El énfasis esta en el uso de una comunicación

simple usando HTTP entre cliente y servidor,

intercambiando POX (Plain Old Xml)

● También pueden intercambiarse otros formatos

equivalente sencillos (JSON)

● Un ejemplo sencillo…

Page 99: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 99

Web Service + REST

● Tenemos un servicio REST para obtener el

valor de un stock en el mercado

● Este seria el REQUEST

Page 100: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 100

Web Service + REST

● Y esta seria la respuesta

Page 101: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 101

Comparación

Sitios web, por el año 1992

Page 102: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 102

Comparación

Servicios web WS-*, desde el año 2000

Page 103: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 103

Comparación

Servicios web REST, desde el año 2006

Page 104: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 104

Estandares

Page 105: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 105

Servicio Web SOAP

Page 106: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 106

Servicio web RESTful

Page 107: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 107

Protocolos en SOAP

Page 108: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 108

Protocolos en REST

Page 109: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 109

JAX-RS

● Para escribir un servicio web que utilice REST,

solo se necesita un cliente y un servidor que

soporte HTTP

● Como en el caso de SOAP, a fin de eliminar el

trabajo con protocolos de bajo nivel, aparece el

API JAX-RS

● La implementación de referencia de esta API,

se denomina Jersey (es un proyecto open

source)

Page 110: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 110

JAX-RS

Page 111: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 111

JAX-RS

● En el ejemplo anterior, el recurso

BookResource esta publicado en la URI /book

● El método getBookTitle() queda asociado al

método GET HTTP, produciendo un contenido

de tipo “text/plain”

● Para acceder al recurso, solo debemos usar un

browser con la dirección

http://www.myserver.com/book

Page 112: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 112

JAX-RS

● El servicio REST no implementa ninguna

interfaz ni extiende ninguna clase

● Debemos usar la anotación @Path

● Si queremos usar un EJB, entonces solo

podemos usar @Stateless

● La clase debe ser public, y no abstract ni final

● Debe contener un constructor por defecto

● La clase no debe incluir el método finalize()

Page 113: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 113

Default Providers

Page 114: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 114

Interfaz de acceso al recurso

● JAX-RS define una serie de anotaciones, para

indicar que método HTTP se utilizara para

acceder a un recurso

● Estas anotaciones corresponden a los métodos

HTTP disponibles

● @GET, @POST, @PUT, @DELETE, @HEAD,

@OPTIONS

● Solo los métodos públicos de una clase pueden

exponerse como métodos de recurso

Page 115: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 115

Interfaz CRUD

Page 116: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 116

Interfaz de acceso al recurso

● Cuando un método de recurso es invocado

● Los parámetros para los cuales hay un extractor, son

cargados con dicho valor

● Los valores de parámetros no anotados, llamados

entity parameters, es mapeado del cuerpo del

request, a través de un entity provider

● Los métodos pueden devolver void, un tipo Java o

un Response

● Response es usado cuando es necesario devolver

mas información (metadatos) en la respuesta

Page 117: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 117

Información contextual

Page 118: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 118

Manejo de excepciones

Page 119: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 119

Ciclo de vida

Page 120: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 120

HelloWorld

● Creamos una web application

● Para exponer recursos REST, necesitamos una

implementacion de REST

● Puede ser JAX-RS

● En el caso de JBoss, podemos usar RESTEasy

● Esta es una implementacion que ya viene

incorporada en el servidor 6.0

● Necesitamos que el web.xml sea version 3.0

Page 121: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 121

HelloWorld

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> ... ... ... </web-app>

Page 122: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 122

HelloWorld

● Creamos una clase HelloWorldResource

package ejemplos;

import javax.ws.rs.*;

@Path("tutorial")

public class HelloWorldResource {

@GET

@Path("hello")

public String helloworld() {

return "Hello World!";

}

}

Page 123: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 123

HelloWorld

● Luego de creado el recurso, deployeamos

y ejecutamos la aplicación web

● Accedemos al recurso, a través de la URL

● http://localhost:8080/HelloWorld/tutorial/h

ello

● Deberíamos obtener “Hello World!!”

Page 124: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 124

PathParam

● Permite extraer “pedazos” de la URL

package ejemplos;

import javax.ws.rs.*;

@Path("tutorial")

public class HelloWorldPoliteResource {

@GET

@Path("sayhello/{name}")

public String helloworld(@PathParam("name")

final String name) {

return "Hi!, how are you " + name;

}

}

Page 125: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 125

PathParam

● Como antes, se deployea y ejecuta la

aplicacion

● Debemos entrar a la URL:

● http://localhost:8080/HelloWorld/tutorial/sayhello/Pablo

● Deberíamos obtener: “Hi!, how are you Pablo”

Page 126: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 126

Intercambio de XML

● Podemos intercambiar objetos XML, tanto

para el resultado como para los

parametros

● Para esto debemos usar providers JAXB

(idem SOAP), que se encarguen de

mapear instancias en documentos XML

● Por ejemplo, vamos a intercambiar

objetos Java, “Items”

Page 127: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 127

package ejemplo;

@XmlRootElement

public class Item {

private String codigo;

private int precio;

public Item() {

}

public Item(String codigo, int precio) {

this.codigo = codigo;

this.precio = precio;

}

public String getCodigo() {

return codigo;

}

public void setCodigo(String codigo) {

this.codigo = codigo;

}

public int getPrecio() {

return precio;

}

public void setPrecio(int precio) {

this.precio = precio;

}

}

Page 128: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 128

ItemResource

package ejemplo;

import javax.ws.rs.*;

@Path("items")

public class ItemResource {

@GET

@Path("item")

@Produces({ "application/xml" })

public Item getItem() {

Item item = new Item("IPhone5", 1500);

return item;

}

}

Page 129: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 129

ItemResource

● Si ejecutamos la aplicacion, al especificar

application/xml, se utilizara el provider

adecuado para obtener este XML

<item>

<description>IPhone5</description>

<price>1500</price>

</item>

Page 130: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 130

@FormParam

● Esta anotacion sirve para extraer

informacion de un formulario

<html>

<body>

<form method="POST" action="login">

Email Address: <input type="text" name="email"><br>

Password: <input type="text" name="password"><br>

<br>

<input type="submit">

</form>

</body>

</html>

Page 131: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 131

@FormParam

package ejemplos;

import javax.ws.rs.FormParam;

import javax.ws.rs.POST;

import javax.ws.rs.Path;

@Path("/")

public class LoginResource {

@Path("login")

@POST

public String login(

@FormParam("email") String email,

@FormParam("password") String password) {

return "Ingreso con el email: " + email +

" y el password " + password;

}

}

Page 132: Tsi2 07-web-services

Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 132

@QueryParam

● Es muy similar al anterior, solo que al

usarlo, se trata de extraer el valor el query

parameter con el nombre indicado

@Path("login/{id}")

public String loginQPM(@QueryParam("id") String idvalue) {

return "Id es " + idvalue;

}

http://localhost:8080/<Nombre de proyecto>/login?id=12345