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