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
Protocolo HTTP Servicios Web y Servicios Arquitecturas Web y REST Arquitecturas RES Protocolo HTTP Protocolo HTTP Modelo de comunicación Modelo de web comunicación web m Modelo de comunicación web Cliente Web (Navegador) Petición HTTP Cliente Web (Navegador) Respuesta HTTP Paquete HTTP Paquete HTTP Paquete HTTP Servidor Web Petición HTTP Respuesta HTTP o D In d W Servid Web Cabecera Cuerpo Cabecera Cuerpo
ervicios Web y Arquitecturas REST rotocolo HTTP - Petición Métodos: Protocolo HTTP - Pe3ción máster online en Dirección e Ingeniería de Sitios Web GET / HTTP/1.1 1 Host: www.google.es User-Agent: <cliente-web> Métodos: GET: Solicita un recurso GET: PUT: Solicita Actualiza un recurso un recurso PUT: POST: Actualiza Solicita un recurso procesar recurso con los datos POST: enviados Solicita procesar recurso con los datos enviados DELETE: Elimina i un recurso DELETE: Elimina un recurso Otros métodos: HEAD, TRACE, OPTIONS y CONNECT Otros métodos: HEAD, TRACE, OPTIONS y CONNECT
icios Web y Arquitecturas REST colo HTTP - Petición Protocolo HTTP - Pe3ción ibutos Atributos de la Cabecera de la Cabecera HTTP: HTTP: máster Accept: Tipos de contenido aceptados ccept: Tipos de contenido aceptados online en Accept- charset: Conjunto de caracteres aceptados Dirección e ccept-charset: Accept- encoding: Conjunto de Codificación caracteres caracteres aceptados aceptados Ingeniería ccept-encoding: Accept- language: Codificación Idiomas caracteres aceptados aceptados de Sitios ccept-language: Cookie: Cookie Idiomas enviada aceptados previamente por el servidor Web ookie: Cookie Content- length: enviada previamente Longitud de la por pe3ción el servidor Content- type: Tipo MIME del cuerpo de la pe3ción ontent-length: Longitud de la petición Date: Fecha/hora de la solicitud ontent-type: User- Agent: Tipo MIME Tipo del agente cuerpo de usuario de la petición u3lizado ate: Fecha/hora Otros atributos: de la solicitud Authoriza3on, Cache- control, Connec3on, ser-agent: If- Modified- Since, Tipo agente de If- None- Match usuario utilizado tros atributos: Authorization, Cache-control, onnection, If-Modified-Since, If-None-Match GET / HTTP/1.1 Host: www.google.es User-Agent: <cliente-web>
Servicios Web y Arquitecturas REST Protocolo HTTP - Respuesta Protocolo HTTP Respuesta HTTP/1.1 200 OK Date: <fecha> Content-type: t t text/htmlt/ht Content-length: <tamaño> máster online en Direcció Ingenier de Sitios Web <html> </html> Códigos de respuesta: Códigos de respuesta: 1xx: Mensajes 2xx: Operación exitosa 3xx: Redirección 4xx: 4xx: Error en en el el cliente (p.e: (p.e: 404, 404, no no encontrado) Coordinador: 5xx: Dr. Error Javier en Parra el Fuente servidor 5xx: Error en el servidor
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
Protocolo HTTP Ejemplo Servicios Web y Arquitecturas REST 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). Debera enviar este manual.
Prác3ca 3 Netbeans Herramienta: Netbeans: h"p://www.netbeans.org/
Prác3ca 3 Pasos 1. Crear un repositorio persistente 2. Crear un proyecto 3. Crear el recurso 4. Crear el servicio web REST asociado al recurso 5. Probar el servicio web REST
Prác3ca 3.1 Crear Repositorio Servicios Web Web y Arquitecturas y REST REST Práctica 3.1 3.1 Crear Crear Repositorio Persistente Persistente. a. Conectar a la a Base la Base de de Datos Datos (sample) a. Conectar a la Base de Datos (sample) 2 1 2 1 máster online online Direcció Ingenie de de Sitio S Web Web b. Crear la Tabla en la Base de Datos (Empleado). b. Crear Crear la Tabla Tabla en en la Base la Base de de Datos Datos (Empleado) 4 4 3 3 5 5
Prác3ca 3.1 Crear Repositorio Servicios Web y Arquitecturas REST Práctica 3.1 Crear Persistente Repositorio Persistente Añadir filas a la Tabla c. Añadir filas a la Tabla mást onlin Direc Ingen de Si Web 5
Servicios Web y Arquitecturas REST Práctica 3.2 Crear Proyecto Prác3ca 3.2 Crear Proyecto a. Crear un nuevo proyecto a. Crear un nuevo proyecto 1 3 2 máster online e Direcci Ingenie de Sitio Web 5 4 24 6
Prác3ca 3.2 Crear Proyecto vicios Web y Arquitecturas REST ctica 3.2 Crear Proyecto b. Añadir driver al proyecto ñadir driver al proyecto máster online en Dirección e Ingeniería de Sitios Web 8 7 9
Prác3ca 3.3 Crear Recurso (En3dad Servicios Web y Arquitecturas REST Práctica 3.3 Crear Persistente) Recurso (Entidad Persistente) 1 3 2 mást onlin Direc Ingen de S Web 4
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 y Arquitecturas REST Práctica 3.4 Crear Servicio Web REST Prác3ca 3.4 Crear Servicio Web REST má 1 onl Dire Ing de We 2 3
oordinador: Dr. Javier Parra Fuente Prác3ca 3.4 Crear Servicio Web REST Servicios Web y Arquitecturas REST Práctica 3.4 Crear Servicio Web REST 5 4 máster online en Dirección e Ingeniería de Sitios Web 6
Prác3ca 3.5 Probar Servicio Web ervicios Web y Arquitecturas REST REST ráctica 3.5 Probar Servicio Web REST 1 máster online en Dirección e Ingeniería 3 de Sitios Web 2 32