Arquitecturas REST (Representa

Anuncio
Arquitecturas REST (Representa3onal State Transfer) Protocolo HTTP Hypertext Transfer Protocol RFC2616:h"p://www.ie*.org/rfc/rfc2616.txt Protocolo orientado a transacciones Esquema pe3ción/respuesta entre un cliente (navegador) y un servidor web •  Protocolo sin estado •  Basado en la localización de recursos (URLs) •  Puerto80 • 
• 
• 
• 
Servicios
Web
yREST
Arquitecturas
RES
Protocolo HTTP Servicios Web
y
Arquitecturas
Protocolo
HTTP
Protocolo HTTP
•  Modelo de comunicación web •
Modelo
de
comunicación
web
m
• Modelo de comunicación web
Petición
HTTP
Cliente
Web
(Navegador)
Petición
HTTP Cliente
Web
Servidor
(Navegador) Web
Respuesta
HTTP
• Paquete HTTP
• Paquete HTTP
•  Paquete HTTP Cabecera
Cuerpo
Cabecera
Cuerpo
Respuesta
HTTP
o
D
Servid
In
Web
d
W
Servicios Web y Arquitecturas REST
Protocolo HTTP - Petición
Protocolo HTTP -­‐ Pe3ción máster
GET / HTTP/1.1
HTTP/1 1
online en
Host: www.google.es
Dirección e
User-Agent: <cliente-web>
Ingeniería
de Sitios
Web
•  Métodos: •  GET: Solicita un recurso Métodos:
• GET:
Solicita
un recursoun recurso •  PUT: Actualiza • 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 métodos: HEAD, TRACE, OPTIONS y CONNECT
•  Otros métodos: HEAD, TRACE, OPTIONS y CONNECT vicios Web Protocolo y Arquitecturas
REST-­‐ Pe3ción HTTP ocolo HTTP - Petición
•  Atributos de la Cabecera HTTP: máster
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 Dirección
e
Accept-charset:
Conjunto de
caracteres
aceptados
–  Accept-­‐encoding: Codificación caracteres aceptados Ingeniería
Accept-encoding:
C f Idiomas Codificación
caracteres
aceptados
–  Accept-­‐language: aceptados de Sitios
–  Cookie: CIdiomas
ookie enviada previamente por el servidor Web
Accept-language:
aceptados
Content-­‐length: Longitud de la por
pe3ción Cookie:– Cookie
enviada previamente
el servidor
–  Content-­‐type: Tipo MIME del cuerpo de la pe3ción Content-length: Longitud de la petición
–  Date: Fecha/hora de la solicitud Content-type:
Tipo MIME
cuerpo
de la petición
–  User-­‐Agent: Tipo del
agente de usuario u3lizado Date: Fecha/hora
de la solicitud
–  Otros atributos: Authoriza3on, Cache-­‐control, Connec3on, If-­‐Modified-­‐Since, User-Agent:
Tipo agente deIf-­‐None-­‐Match 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: <tamaño>
<html>
</html>
Códigos de
de respuesta:
respuesta: ••  Códigos
–– 1xx:
1xx: Mensajes
Mensajes –– 2xx:
2xx: Operación
Operación exitosa
exitosa –– 3xx:
3xx: Redirección
Redirección –– 4xx:
(p.e:
404,
nonencontrado)
4xx: Error
Error en
en elecliente
l cliente (p.e: 404, o encontrado) Coordinador:
Javier Parra
Fuente
– 5xx: Dr.
–  5xx: Error
Error en
en eleservidor
l servidor máster
online en
Direcció
Ingenier
de Sitios
Web
Protocolo HTTP – Respuesta •  Atributos de la Cabecera HTTP: –  Content-­‐encoding: Codificación u3lizada en el mensaje –  Content-­‐language: Idioma u3lizado en el mensaje –  Content-­‐length: Tamaño del mensaje –  Content-­‐type: Tipo MIME del contenido –  Date: Fecha/hora de la respuesta –  Expires: Fecha de expiración del contenido para eliminarse de la caché –  Server: Iden3fica el 3po de servidor –  Set-­‐cookie: Ac3va una cookie en el cliente –  Otros atributos: Cache-­‐control, Content-­‐loca3on, Etag, WWW-­‐Authen3cate Servicios
Web y Arquitecturas
Protocolo HTTP – EREST
jemplo Protocolo HTTP - Ejemplo
hdp://web-­‐sniffer.net/ ••  http://web-sniffer.net/
más
onlin
Dire
Inge
de S
Web
REST •  Es3lo arquitectónico de servicios web •  Basado en el modelo de comunicación de la World Wide Web •  Toma como referencia el protocolo HTTP •  Basado en la ges3ón de recursos en lugar de métodos de negocio REST – Métodos •  U3liza directamente los métodos HTTP: POST: crea un recurso POST /usuarios HTTP/1.1 Host: miservidor Content-­‐type: applica3on/xml <usuario> <nombre>Carlos</nombre> </usuario> GET: ob3ene un recurso GET /usuarios/Carlos HTTP/1.1 Host: miservidor Accept: applica3on/xml REST – Métodos PUT: modifica un recurso PUT /usuarios/Javier HTTP/1.1 Host: miservidor Content-­‐Type: applica3on/xml <usuario> <nombre>Juan</nombre> </usuario> DELETE: elimina un recurso DELETE /usuarios/Carlos HTTP/1.1 Host: miservidor REST – URI (Uniform Resource Iden3fier) •  Localización del recurso web GET <URI> HTTP/1.1 Host: miservidor Accept: applica3on/xml •  Debe ser autodescrip3vo •  Recursos organizados jerárquicamente h(p://www.servicio.org/empresa/empleados/{empleado} REST – Atributo Content-­‐type •  Indica el 3po MIME de la pe3ción HTTP •  Facilita la correcta interpretación por el servidor POST /usuarios HTTP/1.1 Host: miservidor Content-­‐type: applica3on/xml <usuario> <nombre>Carlos</nombre> </usuario> REST – Atributo Accept •  Indica el 3po MIME de la respuesta •  Facilita la correcta interpretación por el cliente GET /usuarios/Carlos HTTP/1.1 Host: miservidor Accept: applica>on/xml Ejemplos: – JSON: applica3on/json – XML: applica3on/xml – XHTML:applica3on/xhtml+xml REST vs. SOAP •  Ejemplo: Servicio web librería –  Pe3ción •  Mensaje REST: hdp://www.miLibreria.com/listaPrecios/libros/ThinkingInJava GET /listaPrecios/libros/ThinkingInJava HTTP/1.1 Host: www.miLibreria.com Accept: applica>on/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=“up-­‐8” Content-­‐length: 548 SOAPAc3on: “/GetPrecio” <?xml version=“1.0”?> <SOAP-­‐ENV:Envelope xmlns:SOAP-­‐ENV=“hdp://schemas.xmlsoap.org/soap/envelope/” xmlns:xsi=“hdp://www.w3c.org/2001/XMLSchema-­‐instance” xmlns:xsd=“hdp://www.w3c.org/2001/XMLSchema” SOAP-­‐ENV:encodingStyle=“hdp://schemas.xmlsoap.org/soap/encoding/”> <SOAP-­‐ENV:Header> </SOAP-­‐ENV:Header> <SOAP-­‐ENV:Body> <m:GetPrecio xmlns:m=“hdp://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: applica3on/xml Content-­‐length: <tamaño> <libreria xmlns="..."> <precio>49.99</precio> </libreria> REST vs. SOAP •  Mensaje SOAP HTTP/1.1 200 OK Connec3on: close Content-­‐length: 526 Content-­‐Type: text/xml; charset=“up-­‐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=“hdp://schemas.xmlsoap.org/soap/envelope/” xmlns:xsi=“hdp://www.w3c.org/2001/XMLSchema-­‐instance” xmlns:xsd=“hdp://www.w3c.org/2001/XMLSchema” SOAP-­‐ENV:encodingStyle=“hdp://schemas.xmlsoap.org/soap/encoding/”> <SOAP-­‐ENV:Body> <m:GetPrecioRespuesta mlns:m=“hdp://www.miLibreria.com/listaPrecios/”> <precio> 49.99 </precio> </m:GetPrecioRespuesta> </SOAP-­‐ENV:Body> </SOAP-­‐ENV:Envelope> Prác3ca 3 1.  Ponga en funcionamiento la prác3ca que se presenta a con3nuación. 2.  Posteriormente, cree su propio cliente de servicio REST que conecte con otro servicio web. 3.  Por úl3mo, haga un manual de los pasos que ha ido realizando al crear su cliente (incluya pantallazo de cada paso). Deberá enviar este manual. Prác3ca 3 – Netbeans •  Herramienta: –  Netbeans: –  h"p://www.netbeans.org/ Prác3ca 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 Prác3ca .1 – Crear REST
RREST
epositorio Servicios
Web
y3Arquitecturas
Servicios
Web
y Arquitecturas
Práctica
– Crear
Repositorio
Persistente
Práctica
3.13.1
– Crear
Repositorio
Persistente
Persistente mást
máster
onlin
online
e
Direc
Direcció
Ingen
Ingenie
S
de de
Sitio
Web
Web
la
(sample)
a. a.
Conectar
a laaaBase
de de
Datos
(sample)
a.  Conectar
Conectar la Base
Base de Datos
Datos (sample) 1
1
2
2
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
5
5
4
Prác3ca 3
.1 –
C
rear R
epositorio Servicios Web y Arquitecturas REST
Práctica 3.1 – CrearPersistente Repositorio Persistente
filas aa la
la Tabla
Tabla c.•  Añadir Añadir filas
mást
onlin
Direc
Ingen
de Si
Web
5
Servicios Web y Arquitecturas REST
Prác3ca 3
.2 –
C
rear P
royecto Práctica 3.2 – Crear Proyecto
a. Crear un nuevo proyecto máster
online e
Direcci
Ingenie
de Sitio
Web
a. Crear un nuevo proyecto
1
3
2
5
4
6
24
Prác3ca 3.2 – CREST
rear Proyecto rvicios Web
y Arquitecturas
áctica 3.2 – Crear Proyecto
b. A
ñadir d
river a
l p
royecto Añadir driver al proyecto
máster
online en
Dirección e
Ingeniería
de Sitios
Web
8
7
9
Prác3ca 3
.3 –
C
rear R
ecurso (
En3dad Servicios Web y Arquitecturas REST
Persistente) Práctica 3.3 – Crear
Recurso (Entidad Persistente)
1
2
3
4
mást
onlin
Direc
Ingen
de S
Web
Prác3ca 3.3 – Crear Recurso (En3dad Servicios Web y Arquitecturas REST
Persistente) Práctica 3.3 – Crear Recurso (Entidad Persistente)
máster
online e
Direcci
Ingenie
de Sitio
Web
5
6
Prác3ca 3.3 – Crear Recurso (En3dad Persistente) package persistencia; import java.io.Serializable; import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.En3ty; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.valida3on.constraints.NotNull; import javax.valida3on.constraints.Size; import javax.xml.bind.annota3on.XmlRootElement; /** * * @author CarlosM */ @En>ty @Table(name = "EMPLEADO") @XmlRootElement @NamedQueries({ @NamedQuery(name = "Empleado.findAll", query = "SELECT e FROM Empleado e"), @NamedQuery(name = "Empleado.findById", query = "SELECT e FROM Empleado e WHERE e.id = :id"), @NamedQuery(name = "Empleado.findByNombre", query = "SELECT e FROM Empleado e WHERE e.nombre = :nombre"), @NamedQuery(name = "Empleado.findBySueldo", query = "SELECT e FROM Empleado e WHERE e.sueldo = :sueldo")}) public class Empleado implements Serializable { private sta3c final long serialVersionUID = 1L; @Id @Basic(op3onal = 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 fields consider using these annota3ons to enforce field valida3on @Column(name = "SUELDO") private Float sueldo; Prác3ca 3.3 – Crear Recurso (En3dad 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
REST
Prác3ca 3.4 –y Arquitecturas
Crear Servicio Web REST Práctica 3.4 – Crear Servicio Web REST
má
onl
Dire
Ing
de
We
1
2
3
Servicios
Web y3Arquitecturas
Prác3ca .4 – Crear SREST
ervicio Web REST Práctica 3.4 – Crear Servicio Web REST
máster
online en
Dirección e
Ingeniería
de Sitios
Web
4
5
Coordinador: Dr. Javier Parra Fuente
6
Prác3ca 3.5 – Probar Servicio Web Servicios Web y Arquitecturas REST
REST Práctica 3.5 – Probar Servicio
Web REST
máster
online en
Dirección e
Ingeniería
3
de Sitios
Web
1
2
32
Descargar