Qué es Quarkus y cómo crear un proyecto

Quarkus es un framework Java para crear aplicaciones web orientadas fundamentalmente al modelo de microservicio. Compila a nativo con GraalVM y permite crear aplicaciones compactas de arranque rápido y ligeras, listas para llevar a la nube. Está basado en MicroProfile, una alternativa que ha surgido en los últimos años a Spring y que no es más que el Java EE de siempre pero manteniendo únicamente las bibliotecas más interesantes para crear aplicaciones ligeras. A lo largo de este tutorial iré mostrando los pasos para desarrollar una API REST con Quarkus.

Quarkus es un framework para Java EE alternativo a Spring con el que podemos realizar aplicaciones web de grado empresarial utilizando Java o Kotlin. Sin embargo, pese a que típicamente asociamos Java con un lenguaje de programación monolítico y pesado, Quarkus implementa el estandar MicroProfile, lo que significa que es un framework pensado para el desarrollo de microservicios.

De hecho, con Quarkus vamos a poder fabricar aplicaciones que se puedan dockerizar y que incluso puedan desplegarse en entornos cloud con Kubernetes. Para poder hacer la aplicación tan compacta, se puede utilizar GraalVM, una tecnología que permite convertir el código Java a código nativo, quitándose de encima la máquina virtual de Java y así reduciendo el tamaño en memoria de la aplicación una vez que se despliega.

Quarkus está basado en MicroProfile. Se trata de un nuevo conjunto de tecnologías que ha empezado a adquirir cierto interés en los últimos años. Está basado en Jakarta EE, y de hecho muchas de las tecnologías que conforman MicroProfile vienen de ahí, como JAX-RS o JPA. Sin embargo, MicroProfile se quita de encima los estándares que no son útiles en entornos cloud y deja un conjunto limitado y por lo tanto mucho más fácil de utilizar, además de incorporar nuevas tecnologías más adecuadas a los tiempos que corren, como el soporte para OpenAPI o la capacidad de incorporar healthchecks. Quarkus, al igual que otras implementaciones de MicroProfile, acaba permitiendo crear APIs utilizando, en la mayoría de casos, clases e interfaces que hacen uso de las anotaciones para permitir tener una API más fácil de mantener y alejada de los días donde había que declarar servlets en un XML.

Cómo crear un proyecto de Quarkus

Existen varias maneras de crear un proyecto de Quarkus. La forma más simple y sin dependencias es hacer uso del generador de proyectos de Quarkus, disponible en https://code.quarkus.io. Con esta herramienta web podemos rellenar la información del proyecto, elegir las dependencias y pulsar el botón Generar para descargar el proyecto como un archivo .zip que luego podemos compilar y desarrollar mediante Maven o Gradle.

Creador de proyectos de Quarkus Creación de un proyecto desde la herramienta online de Quarkus

Otras alternativas son el uso de la quarkus-cli, una herramienta de línea de comandos que facilita interactuar con proyectos de Quarkus, por ejemplo permitiendo crear proyectos nuevos a golpe de plantilla o hacer operaciones comunes como lanzar el servidor de desarrollo, iniciar tests o compilar y empaquetar un proyecto. Para instalar la quarkus-cli podemos usar sdkman u otros gestores de paquetes similares. Por ejemplo, con sdkman se haría del siguiente modo:

sdk install quarkus

Mientras que para hacerlo manualmente podríamos usar los siguientes comandos de PowerShell.

iex "& { $(iwr https://ps.jbang.dev) } trust add https://repo1.maven.org/maven2/io/quarkus/quarkus-cli/"
iex "& { $(iwr https://ps.jbang.dev) } app install --fresh --force quarkus@quarkusio"

Extensiones

Una cosa a tener en cuenta cuando creemos proyectos de Quarkus es su amplio repositorio de extensiones. La razón por la que Quarkus tiene tantas extensiones es porque es compatible con un montón de tecnologías, pero las tienes que incorporar a mano porque inicialmente el generador de proyectos no sabe qué tienes en mente para crear hoy. Es importante, por lo tanto, que cuando creemos un proyecto marquemos las extensiones que nos vayan a hacer falta. He aquí algunos ejemplos.

Si pretendemos trabajar con JSON, es más que probable que nos interese activar alguna extensión como Reactive Jackson o Reactive JSON-B. Con estas extensiones podremos serializar y deserializar a JSON. Se trata de una de las características más interesantes para hacer APIs de manera rápida en el lenguaje de programación Java. Jackson es capaz de tomar una clase, como por ejemplo:

public class Libro {
  public String isbn;
  public String titulo;
  public String autor;
}

Y convertir instancias de esa clase a un JSON, sin necesidad de anotar nada, únicamente usando reflexión y dejando que mire los campos:

{
  "isbn": "12341234",
  "titulo": "Mi libro bonito",
  "autor": "Foo Bar"
}

Si pretendemos trabajar con bases de datos, casi seguramente que nos interesará activar una extensión como Hibernate-ORM o como Hibernate-Panache, así como algún driver JDBC, como el de PostgreSQL, MySQL o MariaDB. Hibernate ORM es una implementación de JPA, que permite trabajar con ORMs en Java. Esencialmente, el propósito de un ORM es facilitar la conversión entre una clase Java orientada a objetos y las peticiones SQL que permitirían insertar, consultar, actualizar o borrar registros de una tabla.

Son solo algunos ejemplos. Tenemos todo tipo de extensiones. Por ejemplo, si queremos hacer una aplicación que dependa de la cola de mensajes de AWS SQS o que mande notificaciones mediante AWS SNS, entonces podríamos usar alguna de las integraciones de Quarkus que nos permiten interactuar con el SDK de AWS. Lo mismo se puede decir de proveedores cloud como Microsoft Azure. Deberíamos mirar en el repositorio para ver si hay alguna integración que pueda ser de interés.

Cómo ejecutar un servidor de Quarkus

Cuando creamos un proyecto de Quarkus podemos elegir si usar Maven o Gradle. Al margen de lo que seleccionemos, se instalará el plugin de Quarkus para esa plataforma, lo que nos va a permitir lanzar cómodamente invocaciones para interactuar con el proyecto de Quarkus. Por ejemplo, si queremos lanzar el servidor HTTP de desarrollo de Quarkus para probar nuestro trabajo en el navegador web, tenemos las tres formas equivalentes:

  • mvn quarkus:dev (o ./mvnw quarkus:dev si estamos usando el wrapper), para lanzarlo mediante Maven.
  • gradle quarkus:dev (o ./gradlew quarkus:dev si estamos usando el wrapper), para lanzarlo mediante Gradle.
  • quarkus dev, que generalmente lanza alguno de los comandos anteriores según si detecta que es un proyecto de Maven o de Gradle.
Lista de reproducción
  1. 1
    Qué es Quarkus y cómo crear un proyecto
    8 minutos
  2. 2
    ¿Cómo crear endpoints en Quarkus?
    7 minutos
  3. 3
    Paso de parámetros con PathParam y QueryParam
    8 minutos
  4. 4
    Retorno de objetos JSON
    7 minutos
  5. 5
    Definir un endpoint POST
    7 minutos
  6. 6
    Servicios e inyección de dependencia
    8 minutos
  7. 7
    Response y ResponseBuilder
    8 minutos
  8. 8
    ExceptionMapper y tratamiento de errores
    9 minutos