2

Ser ágil con Java ¡es posible!

95Puntos

hace 6 años

A pesar de haber trabajado casi toda mi vida profesional (y de estudiante) con Java, no soy el más grande aficionado del lenguaje, sin embargo, tampoco soy su mayor detractor.

Reconozco por ejemplo sin ningún problema la alegría que me da poder hacer npm install + npm start y tener un API REST listo en segundos. Así como también puedo hablar de los posibles dolores de cabeza que da mantener una base grande de código dinámico y sin tipos en el Backend.

Para que tengan una idea de cómo mi trabajo con Java ha cambiado, hace varios años abandoné por completo la práctica de usar Java en aplicaciones monolíticas MVC que hacen de todo. Desde accesar a la base de datos hasta responder HTML al servidor.

Creo que ese modelo no tiene más sentido, principalmente porque JavaScript y frameworks como por ejemplo react, angular, ember o incluso backbone, están dictando la tendencia de desarrollar aplicaciones para el navegador que consumen servicios de backend (que deberían ser REST APIs para quien quiere dormir tranquilo) y que pueden evolucionar rápidamente sin dependencias gigantes de librerías y código que no tienen nada que ver con el visual de una aplicación web.

Aquellos APIs REST consumidos por las aplicaciones Front-end, a pesar de poder ser también desarrollados usando cualquier tecnología como por ejemplo Node.js, tienden a ser aquellos que más importancia tienen para el negocio y sin duda habrá ocasiones en que un lenguaje como Java, con tipos fuertes, compilado en lugar de interpretado, y corriendo en una máquina virtual altamente popular y extensamente probada como la JVM serán opciones sabias para adoptar.

Con este post quiero demostrar que cuando ese momento llegue, programar en Java no sólo es “seguro” sino que también puede ser rápido y más que agradable gracias a frameworks y librerías que le han dado un fuerte empujón en donde más recibe críticas, la agilidad de desarrollo.

Vamos a ver cómo crear un muy simple REST API usando Spring Boot y evitando todo el código “boilerplate” con el que Java y sus frameworks son, normalmente, negativamente asociados.

Hello Platzi!

Para este ejemplo, sólo porque vamos a usar un POJO muy simple, necesitamos 4 archivos:

  • build.gradle - Archivo de configuración gradle
  • src/main/java/platzi/Message.java - Objeto simple que representa un mensaje y su tamaño
  • src/main/java/platzi/PlatziMessageController.java - Nuestro controlador REST @RestController
  • src/main/java/platzi/Application.java - Nuestro @SpringBootApplication. Permite correr el API de modo standalone de manera muy rápida

build.gradle [java] buildscript { repositories { mavenCentral() } dependencies { classpath(“org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE”) } } apply plugin: ‘java’ apply plugin: ‘spring-boot’ repositories { mavenCentral() } sourceCompatibility = 1.8 targetCompatibility = 1.8 dependencies { compile(“org.springframework.boot:spring-boot-starter-web”) } [/java] Este es un típico archivo de build de Gradle. No hay mucho misterio aquí. Se aplica el plugin Java que compila la aplicación y el plugin spring-boot, encargado de ejecutarla. src/main/java/platzi/Message.java [java] package platzi; public class Message { private final long size; private final String message; public Message(String message) { this.size = message.length(); this.message = message; } public long getSize() { return size; } public String getMessage() { return message; } } [/java] src/main/java/platzi/PlatziMessageController.java [java] package platzi; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class PlatziMessageController { @RequestMapping("/mensaje") public Message message() { return new Message(“Hello Platzi!”); } } [/java] Esta es una simple clase @RestController de Spring. Con la anotación le decimos a Spring que convierta la respuesta del método a JSON y lo escriba directo en el response. Con @RequestMapping estamos asociando el método message() con el recurso /mensaje. Por default, (sin especificar) la asociación se hace al método GET HTTP. Finalmente, la clase src/main/java/platzi/Application.java [java] package platzi; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } [/java] Es la encargada de liberar la magia de Spring Boot. @SpringBootApplication es una anotación que configura la aplicación web adicionando automáticamente todas las configuraciones de Spring y JEE que normalmente tendrían que hacerse manualmente. ¡Y esto es todo lo que se necesita para tener un simple servicio REST usando Java y Spring Boot!

Ejecutando

Para correr nuestro ejemplo sólo tenemos que ejecutar: [java] gradle bootRun [/java] Con este comando, Gradle sube un tomcat con la aplicación, haciéndola inmediatamente disponible sin mayor sufrimiento. Es importante mencionar que la primera vez que corras este comando, se bajarán muchas cosas y parecerá que prácticamente todo el internet llega a tu computador. Pero no es tan diferente de npm install ¿verdad? Te reto a instalar LoopBack, por ejemplo, y contarme en los comentarios si fue muy distinto. La segunda vez que lo corras será simplemente verás algo como esto: [java] 2015-09-17 18:11:17.242 INFO 9699 — [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2015-09-17 18:11:17.299 INFO 9699 — [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2015-09-17 18:11:17.301 INFO 9699 — [ main] platzi.Application : Started Application in 2.41 seconds (JVM running for 2.698) [/java] 2.41 segundos para subir un REST API hecho en Java, no está nada mal ¿verdad? Ahora accede a http://localhost:8080/mensaje y verás una simple respuesta en representación JSON del recurso Message con “Hello Platzi!”. También puedes ver el código de este ejemplo en GitHub. [java] { size: 13, message: “Hello Platzi!” } [/java] Este ejemplo demuestra que trabajar con Java no tiene por qué ser algo malo o doloroso. Nunca lo fue para mi. Cada lenguaje tiene su lugar en esta tierra por una razón y creo firmemente en ser políglotas a la hora de programar.

Si Java parece ser una buena opción para un API que estén desarrollando o si su compañía usa mucho y confía extensivamente en Java, existen formas de ser muy rápidos y agilizar el desarrollo con Java.

Espero con este artículo motivarlos por lo menos un poco a ponerlas en práctica y a desafiar los preconceptos. Ahora, si hubiese usado Spring Boot CLI y Groovy, habría podido hacer esto con sólo la anotación @RestController y unas dos líneas de código. Pero bueno, eso es material para otra oportunidad 😃.

Y si estás trabajando con Java o tienes pensado hacerlo, no te pierdas el curso profesional de Java en Platzi. Aprenderás a escribir código en Java 8, Spring, Java Enterprise Edition y todos los elementos que necesitas para desarrollar tu expertise en Java. Entrar al curso Sketch

Código disponible en: https://github.com/obernal/java-hello-platzi

Oscar
Oscar
obernal

95Puntos

hace 6 años

Todas sus entradas
Escribe tu comentario
+ 2