Web Service Rest (RESTEasy) con Java EE

| 2014-06-23 | 2 Comentarios »

En el artículo anterior (éste) describí como crear y utilizar un servicio web SOAP, que suma dos números y devuelve el resultado.

En este nuevo artículo vamos a crear un sistema similar, pero esta vez haciendo uso de la otra alternativa por excelencia a la hora de crear servicios web, y no es otra de utilizar servicios web tipo REST. Las famosas APIs que publican muchos de los sitios web actualmente no son más que servicios web de este tipo, aunque en la mayoría de los casos con medidas de seguridad adicionales tales como autenticación OAuth o similares.

Dado el auge u omnipresencia que están tomando los servicios basados en internet, la web, los navegadores y javasctipt muchos de los sitios más importantes están evolucionando hacia servicios REST por su simplicidad de ser consumidos y fácil acceso, muchos sitios ofrecen una API basada en REST para que terceros puedan integrase con ellos, este es el principio para poder construir mashups. Algunas de sus características son que emplean el protocolo HTTP y sus diferentes métodos (GET, POST, DELETE y PUT, etc.) asignando a cada uno de ellos una operación de las denominadas CRUD (create -> PUT/POST, retrieve -> GET, update -> PUT/POST, delete -> DELETE). Pueden devolver datos en cualquier formato pero normalmente se emplea JSON o XML. En el siguiente enlace, muy recomendable, sobre algunos conceptos sobre las APIs REST está muy bien explicado las ideas sobre las que se basan estos servicios.

Para hacer sevicios web basados en REST con Java disponemos de varios frameworks entre ellos Restlet o Jersey (Son implementaciones de Java: JAX-RS.), sin embargo, me ha convencido el ofrecido por la comunidad de JBoss, RESTEasy, tiene una muy buena documentación que está bien explicada y con la que es muy fácil iniciarse. Por lo tanto a continuación voy a poner lo necesario para implementar el ejemplo para realizar una suma con RESTEasy en una aplicación web java utilizando JSON.

Con RESTEasy los servicios web son POJO (Plain Old Java Object) a los que se les añade la fucionalidad mendiante anotaciones.

Requerimientos de software 

  • Java Software Development Kit: JDK
  • IDE: NetBeans (preferentemente, con todas las características y con Tomcat Application Server)
  • Maven

¿Cómo crear el Proyecto? 

  • Abrir Netbeans.
  • Archivo, Nuevo proyecto, seleccione Maven, luego: Aplicaciones Web y  haga clic en Siguiente y utilice ServicioWebRest como nombre, puede utilizar cualquier package por defecto.

maven

Si todo va bien deberían de observar el archivo index.jsp y si ejecutan el proyecto verán el famoso “Hello World!”.

Ahora que ya tenemos el proyecto listo, hacer clic derecho en el proyecto y elegir la opción Nuevo -> Java Package (Nombre: rest)

– Debemos de agregar las dependencias de RestEasy y Gson en el archivo pom.xml:


<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>2.3.7.Final</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
</dependencies>

-Posteriormente debemos modificar el archivo web.xml para poder utilizar RestEasy y dejarlo así:


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
<display-name>Restful Web Application</display-name>

<!-- Auto scan REST service -->
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>

<!-- this need same with resteasy servlet url-pattern -->
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/rest</param-value>
</context-param>

<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>

<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

Con eso terminamos la parte de configuración, la parte «tediosa», ahora vamos a crear una nueva clase llamada «SumaRestService» dentro del package rest del proyecto:


package rest;

/**
*
* @author Rodrigo
*/
import clases.Numeros;
import com.google.gson.Gson;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/suma")
public class SumaRestService {

@GET
@Path("/sumar/{param}/{param2}")
public int sumarNumerosGet(@PathParam("param") int msg, @PathParam("param2") int msg2) {

return msg+msg2;

}

@POST
@Path("/sumar")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public String sumarNumerosPost(String json) {
Gson gson = new Gson();
Numeros nums = gson.fromJson(json, Numeros.class);
String responseString = String.valueOf(nums.getNro1()+nums.getNro2());

return responseString;

}

@PUT
@Path("/sumar")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public String sumarNumerosPut(String json) {
Gson gson = new Gson();
Numeros nums = gson.fromJson(json, Numeros.class);
String responseString = String.valueOf(nums.getNro1()+nums.getNro2());

return responseString;

}

}

Aquí vemos varias anotaciones @Path, @GET, @PathParam, @Consumes, @Produces, @PUT, @POST. Con la primera estamos indicando parte de la URL en la que el web service responderá, con la segunda indicamos que el método HTTP que llame a esa URL deberá ser get, con la tercera recogemos un parámetro indicado en la URL, con la cuarta indicamos que tipo de formato estaremos utilizando, con la quinta el tipo de formato que estaremos devolviendo, con la sexta y séptima que estaremos utilizando POST o PUT respectivamente.

También se puede observar que hay tres métodos (para que lo tengan como ejemplo de GET, POST y PUT) y como se utiliza la librería de Google Gson para convertir un string json a un objeto java o viceversa, para que funcione debemos de crear un package clases y dentro del package una clase llamada Numeros:

package clases;

/**
*
* @author Rodrigo
*/
public class Numeros {
private int nro1;
private int nro2;

public int getNro1() {
return nro1;
}

public void setNro1(int nro1) {
this.nro1 = nro1;
}

public int getNro2() {
return nro2;
}

public void setNro2(int nro2) {
this.nro2 = nro2;
}

}

Ahora que ya está todo listo, debemos de ejecutar el proyecto, para eso hacer clic derecho sobre el proyecto y luego darle ejecutar, les debería de mostrar el index.jsp con el hello world.

El proyecto debería de quedarles así:

proyecto-rest

¿Cómo probar el Web Service y la operación suma?

– La opción que podemos probar directamente desde cualquier navegador: HTTP GET -> http://localhost:8084/ServicioWebRest/rest/suma/sumar/8/5 y el Web Service nos devolvera el resultado (8 y 5 son los dos parámetros).

getrest

¿Cómo probar solicitudes POST , PUT , DELETE?

El software que utilizo para hacer pruebas de distintos web services se llama SoapUI  en su edición Open Source, una vez que instalen el programa ir a File -> New REST Project:

Url: http://localhost:8084/ServicioWebRest/rest/suma/sumar

Utilizar JSON ( { nro1:5, nro2:3 } ) para probar las opciones POST y PUT y el web service nos devolverá el resultado de la suma.

soapuirest

Espero que les pueda ser de utilidad el artículo, Saludos!

Descargar proyecto completo:

github-logo

Acerca del autor: Rodrigo Paszniuk

Ingeniero Informático, amante de la tecnología, la música, el ciclismo y aprender cosas nuevas.

Posts Relacionados

  • JSF 2 con Maven – Hola Mundo
  • Web Service Rest (Jersey) con Java EE
  • Acceso a Web Service REST en Android
  • Acceso a Web Service SOAP en Android



SEGUÍNOS EN FACEBOOK


GITHUB