sábado, 25 de abril de 2020

Crear servicios REST en Java en 10 minutos

Esta es una guía practica para crear un par de servicios RESTful, si deseas conocer los conceptos teóricos de este estilo de arquitectura te recomiendo leer los siguientes enlaces.




Por allá en el 2013 tuve un tímido acercamiento a la plataforma Java EE, todavía era una plataforma compleja. Para implementar unos servicios REST era necesario implementar interfaces, extender clases abstractas y configurar archivos XML. La plataforma ha evolucionado con el tiempo para bien, haciendo más facil el desarrollo de los servicios REST gracias a las anotaciones las cuales reemplazan las configuraciones de archivos XML. Gracias a estas mejoras podemos crear un par de servicios REST en 10 minutos o menos. Vamos a por ello!!

Requerimientos

Java 8
Wildfly 12
Netbeans 8.2 con Maven y soporte para Java EE


Presentación de los servicios a crear
Vamos a crear dos servicios, uno para persistir la información de una persona y otro para consultar la información de una persona. En ambos servicios usaremos JSon para representar los datos de una persona.

1.- Crear el proyecto web demo-rest
Nuevo Projecto → Maven → Web Application
En project name ingresar demo-rest
En package ingresar demo.rest


2.- Creamos la clase Persona para encapsular los datos de un objeto persona




  1. La clase Persona implementa a la interface Serializable
  2. La clase Persona tiene un constructor sin parametros


3.- Creamos la clase de los servicios POST y GET para el recurso Persona



Como podrás observar, esta es una clase común y corriente pero que tiene algunas anotaciones propias para el soporte de REST javax.ws.rs.*, las cuales serán reconocidas por el servidor de aplicaciones para finalmente exponer el servicio, analicemos para que esta cada una de ellas.

La anotación @Path indica la URL en la cual responderá este servicio, cabe mencionar que esta anotación se puede poner a nivel de clase y método, en este caso, al estar a nivel de clase, afecta a todos los servicios que definamos.

La anotación @Context permite inyectar un objeto de la clase UriInfo
Las anotaciones @Consumes y @Produces son para indicar que tipo de mensaje esperamos como entrada (consumes) y que tipo de mensaje vamos a responder (produces). En este caso, estamos indicando que esperamos JSON como entrada y que vamos a responder igualmente con JSON. La plataforma REST se encargar de parsear el mensaje JSon a objeto y viceversa.

La anotación @POST indica que nuestro método addPersona va a procesar las peticiones POST y la anotación @GET inicia que nuestro método getPersona va a procesar las peticiones GET.
El método getPersona devuelve la información de una persona en formato JSon
La anotación @Path("/{id}") y @PathParam("id") están relacionadas, nos permite obtener el id de la URL como un parámetro para nuestro método getPersona

4.- Extendemos la clase Abstracta ApplicationInfo



Debemos extender la clase javax.ws.rs.core.Application para registrar nuestra clase que implementa nuestros servicios REST.
Observar que esta clase también tiene la anotación @javax.ws.rs.ApplicationPath("rest") donde rest formará parte de la URL http://localhost:8080/demo-rest-1.0-SNAPSHOT/rest/persona de nuestro servicio.
5.- Clean and Build
Hacemos un Clean Build y Ejecutamos. Netbeans se encarga de desplegar nuestra aplicación web e iniciar el servidor WildFly

6.- Probar los servicios
Para probar nuestros servicios yo utilizo RestClient https://github.com/wiztools/rest-client/releases la versión GUI, restclient-ui-fat-3.7.1.jar
Las URL de nuestro servicio es http://localhost:8080/demo-rest-1.0-SNAPSHOT/rest/persona/ el cual se construye a partir de http://localhost:8080/{nombre_aplicacion}/rest/persona/


Observar que he seleccionado String body como tipo de contenido y application/json como formato y UTF-8 como codificación.



Puedes descargar el código fuente desde mi repositorio en GitHub 

viernes, 10 de abril de 2020

¿Se nace inteligente o nos hacemos inteligentes?

Crecí en un ambiente complejo, en donde se te catalogaba sólo en dos grupos, o eras inteligente o eras tonto. En esos años se desconocía la existencia de múltiples tipos de inteligencia y desde pequeños se nos insertaba la creencia errónea de que quizás no eramos inteligentes y no había nada que hacer para cambiar nuestra realidad, los desafortunados de caer en el grupo de tontos estaban condenados. Cuanto daño ha hecho esta creencia errónea.
Desde luego, los niños afortunados que escucharon un !Que inteligente eres! se quedaron con esa idea, crecieron con la creencia de que son inteligentes, una creencia justificada o no justificada lo cual es irrelevante.
Soy un hombre de hechos, como ingeniero me gusta buscarle indicadores a todo, para así poder medirlo, la inteligencia puede ser subjetiva. De vez en cuando me encuentro con personas que me preguntan si me considero inteligente, mi respuesta siempre es: Mi coeficiente intelectual es de xxx IQ. Y dejo que sea la persona la que determine si me considera o no inteligente. Sin embargo, os confieso que admiro a aquellas personas que responden con total seguridad Si, soy muy inteligente, sin dudarlo, sin hacer un test de coeficiente intelectual.
Y...  me quedé pensando, me he preguntado ¿Acaso también en esto la vida es injusta? ¿Algunas personas fueron privilegiadas con una inteligencia superior? Y pasa que en la sociedad en la que vivimos, lo inteligente suele ser admirado, deseado, valorado y recompensado. Hoy dedique unas horas en reflexionar sobre la pregunta del titulo y les comparto mi reflexión.

¿Que es la inteligencia?
Definir el concepto de inteligencia puede ser complejo y no es la intención de esta entrada. Hoy sabemos que existen múltiples tipos de inteligencia, es importante conocernos y determinar  con cual tipo de inteligencia nos identificamos más. Pero una definición general que a mi me gusta mucho, define la inteligencia como "La capacidad mental o cognitiva para entender, recordar y emplear de un modo práctico y constructivo, los conocimientos en situaciones nuevas".
Los tipos de inteligencias son:

9 Tipos de Inteligencia según Gardner y Ejemplos - Infografía

Como escribí al inicio, en nuestra sociedad lo inteligente es deseado, es valorado, es admirado, de ahí la inquietud de conocer si uno nace o no con cierto grado de inteligencia y si es posible desarrollarla. Se ha hecho mucha investigación sobre el tema, algunos son partidarios de que la inteligencia es innata y se hereda mientras que otros opinan que la inteligencia se desarrolla según el ambiente donde el niño crece. Estudios han demostrado que efectivamente, nacemos con cierto grado de inteligencia, algunos en mayor medida que otros, sin embargo, pero este grado de inteligencia no es definitivo, el desarrollo de la inteligencia es continuo, somos capaces de aprender durante toda nuestra vida. El ambiente donde el niño crece tiene una influencia muy fuerte en el desarrollo de su inteligencia. Por ambiente me refiero a la cultura, al acceso de la información (libros, Internet, enciclopedias), la guía y motivación de los padres, la posibilidad de experimentar, la alimentación y el poder vivir correctamente cada etapa de la vida.

Mi respuesta personal en base a mi experiencia, es un rotundo Por supuesto que la inteligencia se puede desarrollar pero hay que cultivarla, todos los días destinar un tiempo para ser más inteligentes que ayer. Quizás no logremos superar a aquellos que tienen una super inteligencia innata, pero si llegaremos a sentirnos más realizados, llegaremos a sentir que aportamos más valor a la sociedad y eso nos ayudará a ser más felices.

El desarrollo de la inteligencia influye en la enorme desigualdad que hay en nuestro mundo, hay poblaciones en donde el niño tiene que trabajar, tiene mala alimentación, no tiene la guía y motivación de sus padres. ¿Que podemos esperar de estos niños? ¿Como se van a enfrentar a un mundo competitivo?

Como sociedad aun tenemos un reto enorme.

Tengo la dicha de ser Tío de dos sobrinos maravillosos y me siento responsable en su educación, voy a guiarlos en descubrir que tipo de inteligencia tienen, motivarlos y enseñarles como seguir desarrollando esa inteligencia. Creo es lo mínimo que puedo hacer para contribuir en crear una mejor sociedad.

Referencia

https://www.lavanguardia.com/vivo/psicologia/20161102/411487509406/nacemos-o-nos-hacemos-inteligentes.html