Ya estuvimos hablando sobre como hacer microservicios con Spring Boot aquí. Hoy vamos ha hacerlo sobre Jersey. Jersey es una implementación open-source ( aunque nació dentro de Sun ) del estandar JAX-RS, que es la API de servicios REST. Una de las cualidades que tiene este framework es que es bastante liviano como podremos ver en el ejemplo.
En este post veremos como hacer un CRUD básico, sin conexión a base de datos. Pero nos servirá para ver como funciona y algunas de sus anotaciones.
Para empezar tenemos la anotación '@Path' para controlar a través de una clase donde vamos a tratar todas las llamadas que se hagan a un determinado recurso. Para este ejemplo crearemos y rellenaremos un mapa de valores que nos permita realizar las distintas operaciones.
@Path("/book") public class BookApi { private static Map<Integer, Book> bookMap; }
Lo primero será hacer las llamadas para obtener valores. Para ellos usaremos la operación '@GET' y a través de la anotación '@Produces' podremos indicar que tipo de salida produciremos.
A través de la anotación '@Path' podremos indicar que se filtren determinadas llamadas que cumplan con el. Y con '@PathParam' podremos acceder a los parametros incluidos en la URL.
Con '@DELETE' podremos gestionar las llamadas HTTP Delete. Y con el objeto 'Response' podremos configurar que tipo de respuesta vamos a devolver. Tanto su código de respuesta como su contenido.
A continuación veremos como hacer las operaciones de actualización con '@PUT' y creación a través de '@POST'.
Aparte de esto ya solo nos quedaría configurar nuestra aplicación a través del fichero web.xml y desplegar el proyecto en algún servidor. Nosotros para este ejemplo hemos usado jetty y lo lanzamos a través de gradle.
Por último indicar que aquí (JerseyExample) puedes encontrar el proyecto de ejemplo y dentro de src/test/resources podras ver una colleción de json con las llamadas de pruebas.
@GET @Produces(MediaType.APPLICATION_JSON) public Collection<Book> getAll() { return bookMap.values(); } // http://localhost:8080/JerseyExample/rest/book
A través de la anotación '@Path' podremos indicar que se filtren determinadas llamadas que cumplan con el. Y con '@PathParam' podremos acceder a los parametros incluidos en la URL.
@GET @Path("/{id}") @Produces(MediaType.APPLICATION_JSON) public Book getOne(@PathParam("id") final Integer id) { return bookMap.get(id); } // http://localhost:8080/JerseyExample/rest/book/2
Con '@DELETE' podremos gestionar las llamadas HTTP Delete. Y con el objeto 'Response' podremos configurar que tipo de respuesta vamos a devolver. Tanto su código de respuesta como su contenido.
@DELETE @Path("/{id}") @Produces(MediaType.APPLICATION_JSON) public Response deleteOne(@PathParam("id") final Integer id) { bookMap.remove(id); return Response.status(200).build(); } // http://localhost:8080/JerseyExample/rest/book/2
A continuación veremos como hacer las operaciones de actualización con '@PUT' y creación a través de '@POST'.
@PUT @Path("/{id}") @Produces(MediaType.APPLICATION_JSON) public Response updateOne(@PathParam("id") final Integer id, final Book book) { bookMap.put(id, book); return Response.status(200).build(); } // http://localhost:8080/JerseyExample/rest/book/2 . Body: {"id":4,"author":"Frederik Pohl","name":"Gateway"} @POST @Produces(MediaType.APPLICATION_JSON) public Response saveOne(final Book book) { bookMap.put(bookMap.size() + 1, book); return Response.status(200).build(); } // http://localhost:8080/JerseyExample/rest/book . Body: {"id":4,"author":"Frederik Pohl","name":"Gateway"}
Aparte de esto ya solo nos quedaría configurar nuestra aplicación a través del fichero web.xml y desplegar el proyecto en algún servidor. Nosotros para este ejemplo hemos usado jetty y lo lanzamos a través de gradle.
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Jersey Example</display-name> <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>es.home.example.api</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app>
Por último indicar que aquí (JerseyExample) puedes encontrar el proyecto de ejemplo y dentro de src/test/resources podras ver una colleción de json con las llamadas de pruebas.
No hay comentarios:
Publicar un comentario