Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013...

31
Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a los Servicios Web RESTful

Transcript of Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013...

Page 1: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

© 2012-2013 Depto. Ciencia de la Computación e IA

Componentes web

Sesión 11: Introducción a los Servicios Web RESTful

Page 2: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Índice• Fundamentos de REST• Tipos de peticiones HTTP• Invocación de servicios• Estructuras JSON• Implementación de servicios REST con Jersey

2

Page 3: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Fundamentos de REST

• REST: REpresentational State Transfer. Son un conjunto de restricciones que, aplicadas al diseño de un sistema, crean un estilo arquitectónico caracterizado por:• Debe ser un sistema cliente-servidor• Tiene que ser sin estado• Tiene que soportar cachés• Tiene que ser un sistema uniformemente accesible (a través de URIs)• Tiene que ser un sistema por capas (escalabilidad)

• Estas restricciones no dictan qué tipo de tecnología utilizar. Podemos utilizar las infraestructuras de red existentes• Un ejemplo de sistema RESTful: la web estática

3

Page 4: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Recursos• Un recurso es “cualquier cosa” que pueda ser accedido y

transferido a través de la red:

• Es una correspondencia lógica y temporal con un concepto del domino del problema

• Ejemplos: una noticia de un periódico, la temperatura de Alicante, un valor de IVA almacenado en una BD...

• Cada uno de los recursos puede ser accedido directamente, y de forma independiente, pero diferentes peticiones podrían “apuntar” al mismo dato

• La representación de un recurso depende del tipo solicitado por el cliente (tipo MIME)

4

Page 5: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Representación• Lo que se intercambia entre los consumidores (clientes) y los

productores de servicios son representaciones de los recursos.• Una representación muestra el estado de un dato real

almacenado en algún dispositivo de almacenamiento en el momento de la petición

• Durante el ciclo de vida del servicio web, puede haber varios clientes solicitando recursos. Clientes diferentes pueden solicitar diferentes representaciones del mismo recurso

• El “lenguaje” de intercambio de información (representación) con el servicio queda a elección del desarrollador

• Ejemplos de representaciones comunes son:

5

Page 6: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

URI• Una URI (Uniform Resource Identifier), en un servicio web

RESTful es un hiper-enlace a un recurso, y es la única forma de intercambiar representaciones entre clientes y servidores

• En un sistema REST la URI no cambia a lo largo del tiempo• Si, por ejemplo, en nuestro sistema tenemos información de

cursos, podríamos acceder a una lista de cursos disponibles mediante la siguiente URL:• http://jtech.ua.es/resources/cursos• Esto nos podría devolver un documento como el siguiente:

6

<?xml  version="1.0"?><j:Cursos  xmlns:j="http://www.jtech.ua.es"  xmlns:xlink="http://www.w3.org/1999/xlink">    <Curso  id="1"  xlink:href="http://jtech.ua.es/resources/cursos/1"/>    <Curso  id="2"  xlink:href="http://jtech.ua.es/resources/cursos/2"/>    <Curso  id="4"  xlink:href="http://jtech.ua.es/resources/cursos/4"/>    <Curso  id="6"  xlink:href="http://jtech.ua.es/resources/cursos/6"/></j:Cursos>

Page 7: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Uniformidad de las interfaces• El desarrollo de REST está centrado en el concepto de nombres

(intercambio de recursos)• Un servicio RESTful modifica el estado de los datos a través de

la representación de los recursos• Un servicio RESTful limita la ambigüedad en el diseño y la

implementación restringiendo las operaciones que podemos realizar con los recursos: create, retrieve, update, delete• La correspondencia de estas acciones con métodos HTTP son:

7

Un servicio REST puede ejecutar lógica en el lado del servidor, pero cada respuesta debe ser una representación del recurso del dominio en cuestión

Page 8: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Obtención de recursos

• Supongamos que tenemos las siguientes representaciones XML

8

http://restful.java/students/Janehttp://restful.java/students

Page 9: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

GET/RETRIEVE

• http://restful.java/students/Jane con el método GET• Seguro e idempotente

9

200  OkDevuelve el recurso

404  Not  found  Si no existe el recurso

Page 10: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

POST/CREATE

• http://restful.java/students/ con el método POST• No idempotente

10

201  CreateNuevo recurso creado

Location  URI del recurso

Page 11: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

PUT/UPDATE

• http://restful.java/students/Jane con el método PUT• Idempotente

11

204  No  contentRecurso modificado

201  Created  Nuevo recurso creado

Page 12: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

DELETE/DELETE

• http://restful.java/students/Jane con el método DELETE

12

200  OkDevuelve el recurso borrado

204  No  content

Page 13: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Invocación desde una clase Java• Cliente RESTful de Twitter

13

public  class  ClienteTwitter  {      public  static  void  main(String[]  args)  {        try  {              URL  twitter  =  new                URL("http://twitter.com/statuses/public_timeline.xml");              //  Abrimos  la  conexión                      URLConnection  tc  =  twitter.openConnection();            //  Obtenemos  la  respuesta  del  servidor            BufferedReader  in  =  new  BufferedReader(new                                InputStreamReader(  tc.getInputStream()));            String  line;                  //  Leemos  la  respuesta  del  servidor  y  la  imprimimos              while  ((line  =  in.readLine())  !=  null)  {                      System.out.println(line);            }            in.close();          }  catch  (MalformedURLException  e)  {                      e.printStackTrace();        }  catch  (IOException  e)  {                      e.printStackTrace();        }    }}

Page 14: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Resultado obtenido

• Mostramos parte de uno de los tweets

14

<?xml  version="1.0"  encoding="UTF-­‐8"?>  <statuses  type="array">    ...    <status>        <created_at>Tue  Feb  22  11:43:25  +0000  2011</created_at>        <id>40013788233216000</id>        <text>Haar  doen  voor  de  cam.  #ahahah</text>        <source>web</source>        <truncated>false</truncated>        <favorited>false</favorited>        <in_reply_to_status_id></in_reply_to_status_id>        <in_reply_to_user_id></in_reply_to_user_id>        <in_reply_to_screen_name></in_reply_to_screen_name>        <retweet_count>0</retweet_count>        <retweeted>false</retweeted>        <user>              ...        </user>    </status>...</statuses>    

Page 15: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Invocación con HttpClient• En lugar de utilizar el paquete estándar java.net, utilizamos la

librería de Jakarta Commons

15

public  class  ClienteTwitter  {    public  static  void  main(String[]  args)  {        HttpClient  client  =  new  HttpClient();        GetMethod  method  =  new  GetMethod(                "http://twitter.com/statuses/public_timeline.xml");        try  {            int  statusCode  =  client.executeMethod(method);            if  (statusCode  ==  HttpStatus.SC_OK)  {                System.out.println(new                          String(method.getResponseBody()));            }        }  catch  (HttpException  e)  {            e.printStackTrace();        }  catch  (IOException  e)  {            e.printStackTrace();        }  finally  {            method.releaseConnection();        }    }}

Page 16: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Invocación desde un JSP

• El código de nuestro index.jsp será:

16

<%@  page  contentType="text/xml;  charset=UTF-­‐8"  %><%@  page  import="java.io.BufferedReader,  java.io.IOException,  java.io.InputStreamReader,  java.net.MalformedURLException,  java.net.URL,  java.net.URLConnection"  %><%

 try  {              URL  twitter  =  new                    URL("http://twitter.com/statuses/public_timeline.rss");            URLConnection  tc  =  twitter.openConnection();            BufferedReader  in  =  new  BufferedReader(                    new  InputStreamReader(tc.getInputStream()));            String  line;            while  ((line  =  in.readLine())  !=  null)  {                    out.println(line);            }            in.close();  }  catch  (MalformedURLException  e)  {                          e.printStackTrace();  }  catch  (IOException  e)  {              e.printStackTrace();  }%>

Page 17: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Resultado de la ejecución

17

Page 18: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Invocación desde una aplicación de escritorio

18

Page 19: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Estructuras JSON

• JSON es una representación muy utilizada para formatear los recursos solicitados a un servicio web RESTful

• Se trata de ficheros de texto planos que pueden ser manipulados muy fácilmente utilizando Javascript (función eval())• Los elementos están contenidos entre llaves• Los valores de los elementos se organizan en pares con la

estructura “nombre:valor” separados por comas• Las secuencias de elementos están contenidas entre corchetes

• Ejemplo:

19

{      "firstName":  "John",  "lastName":  "Smith",        "age":  25,  "address":          {      "streetAddress":  "21  2nd  Street",                  "city":  "New  York",  "state":  "NY",                  "postalCode":  "10021"  },          "phoneNumber":          [    {    "type":  "home",  "number":  "212  555-­‐1234"},                {    "type":  "fax",  "number":  "646  555-­‐4567"}  ]  }

Page 20: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Jersey

• Jersey es un framework para implementar servicios JAX-RS• JAX-RS es un API de Java para servicios RESTful, también

se conoce como JAX-311

• Jersey proporciona los conectores para los servicios web a través de anotaciones java• “Decoraremos” las clases con anotaciones específicas para

definir recursos y las acciones que pueden realizarse sobre ellas• Nos olvidamos de las tareas de interceptar peticiones http y

las negociaciones con el framework para centrarnos en la lógica del negocio

20

Page 21: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Anotaciones Jersey

21

Anotación Descripción@Path Es una URI de un path relativo que indica dónde residirá la clase java

@GET El método java anotado con @GET procesa peticiones HTTP GET

@POST El método java anotado con @POST procesa peticiones HTTP POST

@PUT El método java anotado con @PUT procesa peticiones HTTP PUT

@DELETE El método java anotado con @DELETE procesa peticiones HTTP DELETE

@PathParam Los parámetros del path de la URI se extraen de la URI de la petición, y los nombres de los parámetros se corresponden con los nombres de las variables de las plantillas del path de la URI especificados en la anotación @Path a nivel de clase

@QueryParam Es un tipo de parámetro que puede extraerse para utilizarse en la clase del recurso. Los parámetros de la query de la URI se extraen de los parámetros de query de la URI de la petición

@Consumes Se utiliza para especificar el tipo MIME de las representaciones que un recurso puede consumir cuando ésta es enviada desde el cliente

@Produces Se utiliza para especificar el tipo MIME de las representaciones que un recurso puede proporcionar y enviar al cliente, por ejemplo "text/plain

Page 22: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Servlet de Jersey• Debemos configurar el servlet de Jersey en web.xml

22

<?xml  version="1.0"  encoding="UTF-­‐8"?><web-­‐app  version="2.5"  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_2_5.xsd">        <servlet>                <servlet-­‐name>Jersey  Web  Application</servlet-­‐name>                <servlet-­‐class>                      com.sun.jersey.spi.container.servlet.ServletContainer                </servlet-­‐class>                <init-­‐param>                        <param-­‐name>                                com.sun.jersey.config.property.packages                        </param-­‐name>                        <param-­‐value>org.especialistajee.rest</param-­‐value>                </init-­‐param>                <load-­‐on-­‐startup>1</load-­‐on-­‐startup>        </servlet>        <servlet-­‐mapping>                <servlet-­‐name>Jersey  Web  Application</servlet-­‐name>                <url-­‐pattern>/recursos/*</url-­‐pattern>        </servlet-­‐mapping></web-­‐app>  

Paquete que contiene los recursos

URL que da acceso a los recursos

Page 23: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Implementación de aplicaciones JAX-RS• Los recursos anotados con @Path son recursos raíz• Mapea la URL que da acceso al servicio• Relativa a la URL del servlet de Jersey

• Podemos acceder conhttp://localhost:8080/contexto/recursos/holamundo

23

package  org.especialistajee.rest;  @Path("/holamundo")public  class  HolaMundoResource  {                  @GET        @Produces("text/plain")        public  String  getSaludo()  {                return  "Hola  mundo!";        }}

Page 24: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Anotación @Path• Identifica la plantilla para la URI del recurso al que se accede

• Se puede especificar a nivel de clase o a nivel de método de dicho recurso• Si se especifica a nivel de método, es relativa a la clase

• Con @PathParam inyectamos segmentos variables del path

24

@Path("/alumnos/{nombre}")  public  class  AlumnoResource  {        @GET      @Produces("text/xml")        public  String  getAlumno(                                          @PathParam("nombre")                                          String  nombre)  {  }}

@Path("/alumnos")  public  class  AlumnoResource  {      @GET        public  String  getAlumnos()  {  }              @GET      @Path("/mensajes")      public  String  getMensajesAlumnos()  {  }}

Page 25: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Anotación @Consumes• Esta anotación funciona conjuntamente con @POST y @PUT• Indica a Jersey a qué método se debe delegar la petición HTTP de

entrada• El cliente fija la cabecera HTTP Content-type y el framework delega

la petición al correspondiente método capaz de manejar su contenido

• Si no hay métodos de recurso que puedan responder al tipo MIME solicitado, se le devolverá al cliente un código HTTP 415 ("Unsupported Media Type").

25

@Path("/alumnos")  public  class  AlumnoResource  {      @PUT      @Consumes("application/xml")        public  void  updateAlumno(String  representation)  {  }}

Page 26: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Anotación @Produces• Esta anotación funciona conjuntamente con @GET, @POST y

@PUT• El cliente envía una petición HTTP junto con una cabecera Accept

HTTP que se mapea directamente con el Content-Type que el método produce

• Si un cliente solicita una petición a una URI con un tipo MIME no soportado por el recurso, se envía de vuelta un error HTTP 406 ("Not acceptable").

26

@Path("/alumnos")  public  class  AlumnoResource  {      @GET      @Produces("application/xml")        public  String  getAlumnosXml()  {  }              @GET      @Produces("application/json")        public  String  getAlumnosJson()  {  }}

Page 27: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Tipos de datos en la petición y respuesta• Básicos• byte  [], char  [], String

• Flujos y ficheros• InputStream, File, StreamingOutput

• Datos de formularios• MultivaluedMap<K,V>

• Beans JAXB• Conversión automática entre objetos Java y XML o JSON

• Códigos de estado respuesta• Response (permite añadir contenido y cabeceras)

• Excepciones• WebApplicationException (permite incluir estado de respuesta)

27

Page 28: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Beans JAXB• La conversión se especifica mediante anotaciones

28

@XmlRootElement(name="estado")public  class  EstadoBean  {        @XmlAttribute(name="valor")      public  String  estado  =  "Idle";              @XmlElement(name="toner")      public  int  tonerRestante  =  25;              @XmlTransient      public  int  tonerTotal  =  100;

     @XmlElementWrapper(name="tareas")      @XmlElement(name="tarea")      public  List<TareaBean>  tareas  =                            new  ArrayList<TareaBean>();}

<estado  valor="Idle">        <toner>25</toner>        <tareas>                <tarea>                        <nombre>texto.doc</nombre>                        <estado>imprimiendo...</estado>                        <paginas>13</paginas>                </tarea>                <tarea>                        <nombre>texto2.doc</nombre>                        <estado>en  espera...</estado>                        <paginas>5</paginas>                </tarea>        </tareas></estado>

Page 29: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Código de respuesta• Mediante un objeto de tipo Response• ok devuelve entidad (código 200)• noContent no devuelve contenido (código 204)• created devuelve URI del recurso creado (código 201)

29

@GET@Produces(MediaType.APPLICATION_XML)public  Response  getAlumnos()  {    AlumnosBean  alumnos  =  FactoriaDao.getInstance().getAlumnos();    return  Response.ok(alumnos).build();}  @POST@Consumes(MediaType.APPLICATION_XML)public  Response  addAlumno(AlumnoBean  alumno,                                                      @Context  UriInfo  uriInfo)  {    String  id  =  FactoriaDao.getInstance().addAlumno(alumno);    URI  uri  =  uriInfo.getAbsolutePathBuilder().path("{id}").build(id);    return  Response.created(uri).build();}

Page 30: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

Respuesta mediante excepciones• Podemos lanzar WebApplicationException• Permite indicar el código de error que se devolverá

30

@GET@Path("{isbn}")@Produces(MediaType.APPLICATION_XML)public  AlumnoBean  getAlumno(@PathParam("isbn")  String  isbn)  {        AlumnoBean  alumno  =  FactoriaDao.getInstance().getAlumno(isbn);        if(alumno==null)  {                throw  new  WebApplicationException(Status.NOT_FOUND);        }  else  {                return  alumno;        }}

Page 31: Presentación de PowerPoint · 2012-12-13 · Experto Universitario Java Enterprise © 2012-2013 Depto. Ciencia de la Computación e IA Componentes web Sesión 11: Introducción a

Experto Universitario Java Enterprise

Componentes web © 2012-2013 Depto. Ciencia de la Computación e IA Servicios Web RESTFul

¿Preguntas...?

31