La creación de aplicaciones que expongan datos en la Web para ser consumidos por otras aplicaciones, constituyen uno de los desarrollos más habituales a los que se enfrentan los programadores.
Para desarrollar este tipo de aplicaciones, conocidas como servicios Web, existen dos tipos de aproximaciones:
- Servicios Web SOAP. Exponen una serie de operaciones a las que se accede enviando un documento XML en el cuerpo de la petición HTTP. El servicio responde a la aplicación cliente con otro documento XML que envuelve el resultado de la llamada. Tanto el documento de entrada como el de salida deben tener una determinada estructura, definida por un estándar conocido como SOAP (Simple Object Access Protocol).
- Servicios Web REST. En este caso, el servicio expone una serie de recursos, a los que se accede con una simple petición HTTP. Tanto los datos enviados en la llamada como los generados en la respuesta, pueden estar en cualquier formato, siendo JSON el más habitual.
Debido a su flexibilidad y sencillez, la aproximación REST es la más utilizada actualmente en la creación de servicios Web.
Manual Arquitectura Microservicios
Spring boot
Spring es sin duda alguna el framework más popular para la creación de aplicaciones basadas en Java. La variedad de módulos que incluye y la simplificación de código, hacen de Spring la opción ideal para la implementación de todas las capas de una aplicación. Sin embargo, uno de los problemas que ha ido arrastrando Spring desde su creación es la gran cantidad de tareas de configuración que lleva consigo, por no mencionar el hecho de que toda aplicación Spring debe ser lanzada de forma externa para poder ejecutarse.
En este contexto, hace unos años apareció Spring Boot, que es una aplicación del framework destinada a simplificar enormemente el proceso de configuración, lanzamiento y ejecución de aplicaciones. De hecho, son tres las capacidades que proporciona Spring boot a la hora de crear aplicaciones:
- Autoconfiguración. Se asumen una serie de configuraciones por defecto, de modo que el desarrollador no tiene que tratar con los complejos archivos XML del Spring tradicional.
- Autoejecutable. Las aplicaciones Spring boot se inician solas, no necesitan de ningún otro componente externo que se encargue de iniciar el framework.
- Autodesplegables. Spring Boot proporciona un entorno de ejecución para las aplicaciones, eliminando el proceso de despliegue, que en el caso de las aplicaciones Web siempre hay que realizar. Esto es especialmente interesante para el caso de que tengamos que desarrollar servicios Web, ya que un servicio creado con Spring Boot incluye todo lo necesario para su despliegue y puesta en ejecución, sin necesidad de depender de un servidor de aplicaciones externo.
Configuración del entorno
Para crear aplicaciones con Spring Boot, utilizaremos el clásico entorno de desarrollo para Java eclipse, al que añadiremos un plugin que nos facilitará la creación de proyectos para Spring boot.
La instalación de dicho plugin la llevamos a cabo a través del eclipse marketplace, al que accedemos a través de la opción de menú Help->Eclipse Marketplace. En la caja de texto de búsqueda, introduciremos spring boot y pulsaremos la tecla intro para comenzar la búsqueda. En las opciones que nos aparecen, elegiremos Spring Tools 4- for Spring Boot, que es la adaptación de las clásicas Spring Tools de eclipse para la creación de aplicaciones Spring.
Una vez pulsamos el botón Install, aceptaremos todas las opciones que vengan marcadas por defecto y comenzará el proceso de instalación del plugin, tras el cual se nos pedirá que reiniciemos eclipse.
Creación de un servicio Rest con Spring Boot
A continuación, analizaremos la creación de un sencillo servicio Rest utilizando Spring Boot.
El proyecto eclipse
Lo primero será crear en eclipse un proyecto Spring Boot. Una vez instalado el plugin anterior en el IDE, nos iremos a la opción de menú File->New->Other y en el cuadro de diálogo que aparece a continuación buscaremos la categoría Spring Boot.
Dentro de la categoría Spring Boot, elegiremos «Spring Stared Project».
En el siguiente cuadro de diálogo, le daremos un nombre a nuestro proyecto (por ejemplo «BootExample») y dejaremos el resto de opciones con los valores por defecto.
En el siguiente cuadro de diálogo del asistente, nos indica la versión Spring Boot a utilizar y nos pregunta si queremos agregar alguna librería adicional, como acceso a datos, aplicaciones Web.
Como vamos a desarrollar una aplicación Web, escribiremos Web en el cuadro de búsqueda y elegiremos esa misma opción una vez que aparezcan los resultados de la búsqueda.
A continuación, pulsaremos el botón «Finish» y se habrá completado la creación del proyecto con el asistente.
Como podemos comprobar, en la carpeta src/main/java, se ha creado una clase cuyo código se muestra en el siguiente listado:
Se trata de una clase estándar Java con su método main, el cual es el encargado de iniciar la aplicación Spring Boot. Esta clase está anotada con @SpringBootConfiguration, que es lo único que necesitamos para que nuestra aplicación asuma las configuraciones por defecto. Esta anotación por si sola proporciona la funcionalidad de otras tres anotaciones:
- @Configuration. Indica que la clase puede incluir configuración de objetos Spring.
- @EnableAutoConfiguration. Asume una serie de configuraciones por defecto en el contexto de aplicación de Spring.
- @ComponentScan. Permite que Spring pueda crear instancias de clases localizadas en ciertos paquetes.
De este modo, solamente tendremos que preocuparnos por la implementación de nuestro servicio.
Implementación del servicio
En este ejemplo, vamos a crear un servicio que genere una estructura JSON con los datos de temperatura de una serie de ciudades, algo similar a esto:
[{«ciudad»:»Madrid», «temperatura»:24.7},{«ciudad»:»Sevilla», «temperatura»:29.3},{«ciudad»:»Caceres», «temperatura»:21.0},…]
Lo primero será crear la clase Ciudad que encapsula ambos datos. El aspecto de dicha clase será el siguiente:
En cuanto al servicio, será implementado mediante una clase POJO utilizando las anotaciones de Spring REST. Para que el servicio devuelva un array JSON con los datos de las ciudades al recibir una petición GET, implementaremos un método en la clase que devolverá una lista de de objetos Ciudad. Este será el código de la clase del servicio:
Ejecución y testing
Pues ya está todo, ahora solamente tenemos que empaquetar el servicio y desplegarlo, tarea que, como hemos indicado anteriormente, es realizada automáticamente por Spring Boot. Para ello, lo único que tenemos que hacer es lo que haríamos con cualquier aplicación Java Standar, ejecutar la clase principal eligiendo la opción Run As->Java Application o Run As->Spring Boot Application:
Al ejecutarse la aplicación, podemos ver en la consola de eclipse como aparece un mensaje en el que nos informa que la aplicación ha sido desplegada en Tomcat y que está disponible por el puerto 8080:
Si cogemos un navegador y escribimos la dirección http://localhost:8080/datos, estaremos lanzando una petición GET a la dirección asociada a nuestro servicio, obteniendo como resultado en el navegador el array de objetos JSON indicado anteriormente.
Conclusión
Como hemos podido comprobar, Spring Boot nos simplifica la creación de servicios REST al permitir centrarnos en la implementación del servicio, dejando todos los aspectos de configuración al propio framework. Los servicios creados con Spring Boot incluyen un servidor de aplicaciones Embebido para que puedan ejecutarse sin depender de ningún software adicional ni requerir ningún proceso de despliegue de la aplicación, tan solo tendremos que lanzar la clase principal para que el servicio esté disponible para su utilización.
Descubre más sobre el tema con nuestro Curso de Spring Boot.