El uso de servicios REST es cada día más común y han sido construidos para poder gestionar de una forma sencilla el intercambio de información entre sistemas heterogeneos. Estamos muy habituados a utilizar Ajax para comunicarnos con un servicio REST.
Es también bastante habitual invocar servicios REST desde las APIs nativas de nuestras aplicaciones móviles como pueden ser aplicaciones desarrolladas con Android o IOS.
Sin embargo pueden existir otras muchas situaciones en las que podemos querer invocar a un servicio REST, como por ejemplo desde el mundo Java Clásico.
JAX-RS Client
A partir de la versión 2.0 del API de REST (JAX-RS) de Java EE se soporta el uso de un API a nivel de Cliente de tal forma que podamos trabajar de una forma cómoda con ella (JAX-RS Client) . Vamos a ver un ejemplo sencillo. Para ello lo primero que tendremos que hacer es construirnos un proyecto Maven con Eclipse y añadir las siguientes dependencias.
<dependency> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> <version>2.0</version> </dependency> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-client</artifactId> <version>2.12</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.11</version> </dependency> </dependencies>
Estamos añadiendo tres dependencias la primera el API de cliente de REST , la segunda las librerías que lo implementan y por ultimo las capacidades para trabajar con JSON a nivel de esta API . Una vez tenemos las dependencias definidas podemos construirnos un sencillo programa Java que accede a un servicio REST.
package com.arquitecturajava; import java.io.Serializable; public class Factura implements Serializable { private String id; private String concepto; private int importe; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getConcepto() { return concepto; } public void setConcepto(String concepto) { this.concepto = concepto; } public int getImporte() { return importe; } public void setImporte(int importe) { this.importe = importe; } }
package com.arquitecturajava; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.core.MediaType; public class Principal { public static void main(String[] args) { Client cliente = ClientBuilder.newClient(); Factura f = cliente.target("http://localhost:3000/mifactura") .request(MediaType.APPLICATION_JSON_TYPE).get(Factura.class); System.out.println(f.getId()); System.out.println(f.getConcepto()); System.out.println(f.getImporte()); } }  
De esta forma estaremos accediendo a la URL /mifactura de nuestro servidor que nos devolverá una sencilla factura en formato JSON .
Realizada esta operación simplemente sacamos por pantalla los datos:
Otros artículos relacionados:
Duda, hay algun curso que contenta consumos rest y soap ?
Solo tengo ahora mismo grabado un curso sobre Spring REST
Un saludo
Hola, me cuesta un poco de trabajo. ¿cómo envio parámetros?
https://mincong.io/2018/11/27/jax-rs-parameters/
Hola Cecilio, buen post. Una pregunta este ejemplo seria extrapolable a un servicio rest de tipo JWT (json web token) ? Habria alguna diferencia en la implementacion? por ejemplo la cabecera, etxc.
saludos
Depende mucho de como se genere el token , pero en principio puede venir como un objeto json normal
Buenas Cecilio, una inquietud:
Dado el caso que el response del servicio REST sea dinamico(cambia la estructura del JSON devuelto dependiendo de la petición) como se puede realizar el mapeo de este para poder procesar la respuesta.
Tendra que implicar un mapeo de cada una de las urls a varios métodos . Al final no es tan sencillo , tener diversas respuestas json completamente diferentes
[…] artículos relacionados : JAX-RS Client y Servicios REST , Java Security y anotaciones JAAS ,Java EE MicroServices con […]
Hola buen día, algún libro que recomiendes para aprender más sobre RestFul.
Saludos Cordiales
http://www.amazon.com/RESTful-Java-JAX-RS-Bill-Burke/dp/144936134X/ref=sr_1_sc_1?ie=UTF8&qid=1432550811&sr=8-1-spell&keywords=restfull+java Este me pareció que estaba bastante bien 🙂
Una duda Cecilio. Siempre sigo tus posts, pero con esto siempre tengo un eterno debate respecto a los servicios web SOAP, y es con el tema de la robustez y la seguridad, es decir si un web service REST puede llegar a ser tan seguro como un web service SOAP. Cual es tu opinión al respecto, o podrías hacer algun post que comprenda ese tópico.
Muchas Gracias por la recomendación Cecilio, al fin dejaré de usar clases hechizas y el benvido jayway.restassured.
saludos,
buenas, ya tengo el servicio en un proyecto web el cual es crear, actualizar, borrar, etc a una tabla de una base de datos pero no se como utilizar el servicio desde otro proyecto con html.
Puedes acceder a el usando AJAX o alguna libreria como JQuery con sus métodos $.get o $.post o $.ajax 🙂