Está en la página 1de 34

UNIVERSIDAD

DISTRITAL FRANCISCO JOS DE CALDAS FACULTAD DE INGENIERIA DOCTORADO EN INGENIERA COMPETENCIAS EN CIENCIA DE LA INFORMACIN Y EL CONOCIMIENTO

Carlos Enrique Montenegro Marn

Ingeniero de Sistemas de la Universidad Distrital Magister en ciencias de la Informacin y las comunicaciones de la Universidad Distrital DEA en ingeniera de So>ware de la PonAca Universidad de Salamanca PhD en Sistemas y Servicios informAcos para internet de la Universidad de Oviedo

Correo Electronico: cemontenegrom@udistrital.edu.co ingcarlosmontenegro@gmail.com Linkedin: hLp://es.linkedin.com/pub/carlos-enrique-montenegro-marin/26/584/82a Facebook: hLp://www.facebook.com/ingcarlosmontenegro TwiLer @ingcemm

Arquitecturas REST (RepresentaAonal State Transfer)

Protocolo HTTP
Hypertext Transfer Protocol RFC2616:h"p://www.ie*.org/rfc/rfc2616.txt Protocolo orientado a transacciones Esquema peAcin/respuesta entre un cliente (navegador) y un servidor web Protocolo sin estado Basado en la localizacin de recursos (URLs) Puerto80

Servicios Web yREST Arquitecturas RES Protocolo HTTP Servicios Web y Arquitecturas Protocolo HTTP Protocolo HTTP Modelo de comunicacin web Modelo de comunicacin web m Modelo de comunicacin web

Cliente Web (Navegador)

Peticin HTTP Cliente Web Servidor (Navegador) Web


Respuesta

Peticin HTTP

Respuesta

HTTP

HTTP

o D Servid In Web d W

Paquete HTTP Paquete HTTP

Paquete HTTP
Cabecera Cuerpo

Cabecera Cuerpo

Servicios Web y Arquitecturas REST Protocolo HTTP - Peticin

Protocolo HTTP - PeAcin

Mtodos: GET: Solicita un recurso Mtodos: GET: Solicita un recurso PUT: Actualiza un recurso PUT: PUT Actualiza A t li Solicita un recurso POST: procesar recurso con los datos POST: Solicita procesar recurso con los datos enviados enviados DELETE: DELETE Elimina Eli i un recurso DELETE: Elimina un recurso Otros mtodos: HEAD, TRACE, OPTIONS y CONNECT Otros mtodos: HEAD, TRACE, OPTIONS y CONNECT

mster GET / HTTP/1.1 HTTP/1 1 online en Host: www.google.es Direccin e User-Agent: <cliente-web> Ingeniera de Sitios Web

vicios Web Protocolo y Arquitecturas REST- PeAcin HTTP ocolo HTTP - Peticin Atributos de la Cabecera HTTP: mster ributos de la Cabecera HTTP:

Accept: Tipos de contenido aceptados online en A Accept: t Tipos Ti de d contenido t id aceptados t d Accept-charset: Conjunto de caracteres aceptados Direccin e Accept-charset: Conjunto de caracteres aceptados Accept-encoding: Codicacin caracteres aceptados Ingeniera Accept-encoding: C f Idiomas Codificacin caracteres aceptados Accept-language: aceptados de Sitios Cookie: CIdiomas ookie enviada previamente por el servidor Web Accept-language: aceptados Content-length: Longitud de la peAcin Cookie: Cookie enviada previamente por el servidor Content-type: Tipo MIME del cuerpo de la peAcin Content-length: Longitud de la peticin Date: Fecha/hora de la solicitud Content-type: Tipo MIME cuerpo de la peticin User-Agent: Tipo del agente de usuario uAlizado Date: Fecha/hora de la solicitud Otros atributos: AuthorizaAon, Cache-control, ConnecAon, If-Modied-Since, If-None-Match User-Agent: Tipo agente de usuario utilizado GET / HTTP/1.1 Host: www.google.es Otros atributos: Authorization, Cache-control, User-Agent: <cliente-web> Connection, If-Modified-Since, If-None-Match

Servicios Web y Arquitecturas REST Protocolo HTTP - Respuesta

Protocolo HTTP Respuesta

HTTP/1.1 200 OK Date: <fecha> C t tt Content-type: t t/ht l text/html Content-length: <tamao> <html> </html>

mster online en Direcci Ingenier de Sitios Web

Cdigos Cdigos de de respuesta: respuesta: Mensajes 1xx: 1xx: Mensajes Operacin exitosa 2xx: 2xx: Operacin exitosa Redireccin 3xx: 3xx: Redireccin Error en el (p.e: 404, non encontrado) 4xx: 4xx: Error en ecliente l cliente (p.e: 404, o encontrado) Coordinador: Javier Parra 5xx: Dr. Error en el Fuente 5xx: Error en eservidor l servidor

Atributos de la Cabecera HTTP:

Protocolo HTTP Respuesta

Content-encoding: Codicacin uAlizada en el mensaje Content-language: Idioma uAlizado en el mensaje Content-length: Tamao del mensaje Content-type: Tipo MIME del contenido Date: Fecha/hora de la respuesta Expires: Fecha de expiracin del contenido para eliminarse de la cach Server: IdenAca el Apo de servidor Set-cookie: AcAva una cookie en el cliente Otros atributos: Cache-control, Content-locaAon, Etag, WWW-AuthenAcate

Servicios Web y Arquitecturas REST Protocolo HTTP E jemplo Protocolo HTTP - Ejemplo

hLp://web-snier.net/ http://web-sniffer.net/

ms onlin Dire Inge de S Web

REST
EsAlo arquitectnico de servicios web Basado en el modelo de comunicacin de la World Wide Web Toma como referencia el protocolo HTTP Basado en la gesAn de recursos en lugar de mtodos de negocio

REST Mtodos
UAliza directamente los mtodos HTTP:
POST: crea un recurso
POST /usuarios HTTP/1.1 Host: miservidor Content-type: applicaAon/xml <usuario> <nombre>Carlos</nombre> </usuario>

GET: obAene un recurso


GET /usuarios/Carlos HTTP/1.1 Host: miservidor Accept: applicaAon/xml

REST Mtodos
PUT: modica un recurso
PUT /usuarios/Javier HTTP/1.1 Host: miservidor Content-Type: applicaAon/xml <usuario> <nombre>Juan</nombre> </usuario>

DELETE: elimina un recurso


DELETE /usuarios/Carlos HTTP/1.1 Host: miservidor

REST URI (Uniform Resource IdenAer)


Localizacin del recurso web
GET <URI> HTTP/1.1 Host: miservidor Accept: applicaAon/xml

Debe ser autodescripAvo Recursos organizados jerrquicamente


h;p://www.servicio.org/empresa/empleados/{empleado}

REST Atributo Content-type


Indica el Apo MIME de la peAcin HTTP Facilitalacorrectainterpretacinporelservidor
POST /usuarios HTTP/1.1 Host: miservidor Content-type: applicaAon/xml <usuario> <nombre>Carlos</nombre> </usuario>

REST Atributo Accept


Indica el Apo MIME de la respuesta Facilita la correcta interpretacin por el cliente
GET /usuarios/Carlos HTTP/1.1 Host: miservidor Accept: applicaPon/xml

Ejemplos: JSON: applicaAon/json XML: applicaAon/xml XHTML:applicaAon/xhtml+xml

REST vs. SOAP


Ejemplo: Servicio web librera
PeAcin
Mensaje REST:
hLp://www.miLibreria.com/listaPrecios/libros/ThinkingInJava

GET /listaPrecios/libros/ThinkingInJava HTTP/1.1 Host: www.miLibreria.com Accept: applicaPon/xml

REST vs. SOAP


Mensaje SOAP
POST /GetPrecio HTTP/1.1 User Agent; Mozilla/4.0 (Linux) Host: cmontenegro:8080 Content-Type: text/xml; charset=us-8 Content-length: 548 SOAPAcAon: /GetPrecio <?xml version=1.0?> <SOAP-ENV:Envelope xmlns:SOAP-ENV=hLp://schemas.xmlsoap.org/soap/envelope/ xmlns:xsi=hLp://www.w3c.org/2001/XMLSchema-instance xmlns:xsd=hLp://www.w3c.org/2001/XMLSchema SOAP-ENV:encodingStyle=hLp://schemas.xmlsoap.org/soap/encoding/> <SOAP-ENV:Header> </SOAP-ENV:Header> <SOAP-ENV:Body> <m:GetPrecio xmlns:m=hLp://www.miLibreria.com/listaPrecios/> <nombreLibro xsi:type=xsd:string> Thinking in Java </nombreLibro> </m:GetPrecio> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

REST vs. SOAP


Respuesta
Mensaje REST:
HTTP/1.1 200 OK Date: <fecha> Content-type: applicaAon/xml Content-length: <tamao> <libreria xmlns="..."> <precio>49.99</precio> </libreria>

HTTP/1.1 200 OK ConnecAon: close Content-length: 526 Content-Type: text/xml; charset=us-8 Date: Mon, 1 Feb 2010 11:04:19 GMT Server: Apache/1.3.0 <?xml version=1.0?> <SOAP-ENV:Envelope xmlns:SOAP-ENV=hLp://schemas.xmlsoap.org/soap/envelope/ xmlns:xsi=hLp://www.w3c.org/2001/XMLSchema-instance xmlns:xsd=hLp://www.w3c.org/2001/XMLSchema SOAP-ENV:encodingStyle=hLp://schemas.xmlsoap.org/soap/encoding/> <SOAP-ENV:Body> <m:GetPrecioRespuesta mlns:m=hLp://www.miLibreria.com/listaPrecios/> <precio> 49.99 </precio> </m:GetPrecioRespuesta> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

Mensaje SOAP

REST vs. SOAP

PrcAca 3
1. Ponga en funcionamiento la prcAca que se presenta a conAnuacin. 2. Posteriormente, cree su propio cliente de servicio REST que conecte con otro servicio web. 3. Por lAmo, haga un manual de los pasos que ha ido realizando al crear su cliente (incluya pantallazo de cada paso). Debera enviar este manual.

PrcAca 3 Netbeans
Herramienta:
Netbeans: h"p://www.netbeans.org/

PrcAca 3 Pasos
1. 2. 3. 4. Crear un repositorio persistente Crear un proyecto Crear el recurso Crear el servicio web REST asociado al recurso 5. Probar el servicio web REST

PrcAca .1 Crear RREST epositorio Servicios Web y3 Arquitecturas Servicios Web y Arquitecturas REST Prctica 3.1 Crear Repositorio Persistente Prctica 3.1 Crear Repositorio Persistente Persistente

aa la Base Datos (sample) a. a. Conectar a la Base de de Datos (sample) a. Conectar Conectar la Base de Datos (sample)
2
2

mst mster onlin online e Direc Direcci Ingen Ingenie S de de Sitio Web Web

b. Crear l a T abla e n l a B ase d e D atos ( Empleado) b. Crear la Tabla en la Base de Datos (Empleado) b. Crear la Tabla en la Base de Datos (Empleado)
4 3
3 4

PrcAca 3 .1 C rear R epositorio Servicios Web y Arquitecturas REST Persistente Prctica 3.1 Crear Repositorio Persistente
Aadir las a a la la Tabla Tabla c. Aadir filas

mst onlin Direc Ingen de Si Web

Servicios Web y Arquitecturas REST PrcAca 3 .2 C rear P royecto Prctica 3.2 Crear Proyecto a. Crear un nuevo proyecto
1 3

a. Crear un nuevo proyecto

mster online e Direcci Ingenie de Sitio Web


5

6
24

PrcAca 3.2 CREST rear Proyecto rvicios Web y Arquitecturas ctica 3.2 Crear Proyecto

b. A adir d river a l p royecto Aadir driver al proyecto

mster online en Direccin e Ingeniera de Sitios Web


8

PrcAca 3 .3 C rear R ecurso ( EnAdad Servicios Web y Arquitecturas REST Persistente) Prctica 3.3 Crear Recurso (Entidad Persistente)
1

2
3

mst onlin Direc Ingen de S Web

PrcAca 3.3 Crear Recurso (EnAdad Servicios Web y Arquitecturas REST Persistente) Prctica 3.3 Crear Recurso (Entidad Persistente)

mster online e Direcci Ingenie de Sitio Web

PrcAca 3.3 Crear Recurso (EnAdad Persistente)


package persistencia; import java.io.Serializable; import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.EnAty; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.validaAon.constraints.NotNull; import javax.validaAon.constraints.Size; import javax.xml.bind.annotaAon.XmlRootElement; /** * * @author CarlosM */ @EnPty @Table(name = "EMPLEADO") @XmlRootElement @NamedQueries({ @NamedQuery(name = "Empleado.ndAll", query = "SELECT e FROM Empleado e"), @NamedQuery(name = "Empleado.ndById", query = "SELECT e FROM Empleado e WHERE e.id = :id"), @NamedQuery(name = "Empleado.ndByNombre", query = "SELECT e FROM Empleado e WHERE e.nombre = :nombre"), @NamedQuery(name = "Empleado.ndBySueldo", query = "SELECT e FROM Empleado e WHERE e.sueldo = :sueldo")}) public class Empleado implements Serializable { private staAc nal long serialVersionUID = 1L; @Id @Basic(opAonal = false) @NotNull @Column(name = "ID") private Integer id; @Size(max = 20) @Column(name = "NOMBRE") private String nombre; // @Max(value=?) @Min(value=?)//if you know range of your decimal elds consider using these annotaAons to enforce eld validaAon @Column(name = "SUELDO") private Float sueldo;

PrcAca 3.3 Crear Recurso (EnAdad Persistente)


public Empleado() { } public Empleado(Integer id) { this.id = id; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public Float getSueldo() { return sueldo; } public void setSueldo(Float sueldo) { this.sueldo = sueldo; }

Servicios Web y Arquitecturas REST PrcAca 3.4 Crear Servicio Web REST Prctica 3.4 Crear Servicio Web REST
1

m onl Dire Ing de We


2

Servicios Web y REST PrcAca 3Arquitecturas .4 Crear S ervicio Web REST Prctica 3.4 Crear Servicio Web REST
4 5

mster online en Direccin e Ingeniera de Sitios Web

Coordinador: Dr. Javier Parra Fuente

PrcAca 3.5 Probar Servicio Web Servicios Web y Arquitecturas REST REST Prctica 3.5 Probar Servicio Web REST
mster online en Direccin e Ingeniera 3 de Sitios Web
1

32