Spark Framework

2
12014

En este tutorial te invito a que conozcas este nuevo framework que aseguro te sorprenderá por su sencillez, su ligereza y su potencia.

spark-logo

Índice de contenidos.


1. Introducción

En el tutorial de hoy, os quiero hablar sobre un framework Java que acabo de conocer. Dicho Framework es Spark y no, no es el Spark relacionado con Big Data. Aun así, si no esperabas esto, te invito a que te quedes a leer éste y conozcas este nuevo framework que aseguro te sorprenderá por su sencillez, su ligereza y su potencia.

En el siguiente enlace podéis descargar el código fuente con el ejemplo usado en este tutorial. Para descargar pulsa aquí.


2. Spark

Como he comentado en el punto anterior, Spark es un framework Java que te permitirá desarrollar aplicaciones web. Se caracteriza por ser super sencillo y muy ligero, lo que permitirá desarrollar aplicaciones web de una manera muy rápida.

Está construido basado en el desarrollo Lambdas de Java 8. Lo que hará que el código de nuestras aplicaciones sea mucho menor y más sencillo.

Si no tienes conocimiento sobre Lambdas te recomiendo que primero eches un ojo al siguiente tutorial: Expresiones Lambda con Java 8

El objetivo principal que persigue este framework es eliminar la gran cantidad de ficheros de configuración, que acaban generándose en cualquier aplicación, centrandose en el desarrollo rápido de la aplicación.

Otra diferencia es que el paradigma de programación cambia totalmente. Empezarán a desaparecer esa gran cantidad de anotaciones que cada vez empiezan a sobrecargar aun más el código. Por lo que no te preocupes si al principio echas de menos el uso de anotaciones. Te aseguro que con Spark es posible programar sin anotaciones.

Decir que ya que están tan de moda los microservicios, Spark será una gran opción para desarrollar tus microservicios debido a su sencillez y ligereza. Es más, te aseguro que podrás montar tu API REST en tan solo 5 minutos o menos…


3. Usando Spark por primera vez.

Para usar Spark tan solo tendrás que añadir la dependencia en el pom.xml de tu proyecto maven:

<dependency>
    <groupId>com.sparkjava</groupId>
    <artifactId>spark-core</artifactId>
    <version>2.5.4</version>
</dependency>

Y una vez añadida la dependencia…úsalo! En el siguiente ejemplo vamos a crear el típico recurso de API «Hola mundo»:

package com.autentia.spark.rest.spark.rest;

import static spark.Spark.get;

public class HelloWorldResource {
	public static void main(String[] args) {
		get("/helloworld", (req, res) -> "Hello World");
	}	
}

Y ya está! acabamos de crear nuestro primer recurso de API con Spark. Arranca el main() de tu aplicacióin, entra en la siguiente URL http://localhost:4567/helloworld y comprueba el resultado:

spark-helloworld

Si te das cuenta no hemos usado ningún tipo de anotación y hemos sido capaces de crear nuestro primer API REST. Olvídate de cualquier tipo de anotación y céntrate en lo que te interesa, en desarrollar tu aplicación.

Lo que Spark hace internamente para servir nuestro API es levantar un server Jetty que está embebido dentro de nuestra aplicación.

El puerto por defecto en el que Jetty se levanta es el 4567, pero, perfectamente podemos cambiarlo haciendo uso de ‘port()’:

package com.autentia.spark.rest.spark.rest;

import static spark.Spark.get;
import static spark.Spark.port;

public class HelloWorldResource {
	public static void main(String[] args) {
		port(8080);
		get("/helloworld", (req, res) -> "Hello World");
	}	
}

Si nos fijamos, el método ‘get()’ está recibiendo todas las llamadas de tipo get al recurso ‘/helloworld’ y el procesado se lleva a cabo a través de una función lambda.

Dicha función recibe por parámetro dos objetos:

  • req: que contendrá información de la petición
  • res: que contendrá información sobre la respuesta del server

Pues bien, haciendo uso de dichos objetos podemos enriquecer nuestro recurso aun más.

Vamos a hacer que reciba por la URL un parámetro con el nombre de la persona a quien saludar:

package com.autentia.spark.rest.spark.rest;

import static spark.Spark.get;
import static spark.Spark.port;

public class HelloWorldResource {
	public static void main(String[] args) {
		port(8080);
		get("/helloworld", (req, res) -> "Hello " + req.queryParams("name"));
	}	
}

Volvemos a entrar en nuestra aplicación y comprobamos el resultado:

spark-hello-ismael


4. Devolviendo JSON en mi aplicación.

Hoy en día hay multitud de aplicaciones que están compuestas por una parte FRONT, desarrollada con algún framework javascript, que lo que hace es atacar a un endpoint que contendrá todos los servicios de dicha aplicación.

Uno de los estándares de intercambio de datos más usados entre dichos sistemas es JSON.

Pues bien, Spark nos permite perfectamente indicar que tipo de dato devolver. En este caso basta con indicar el tipo de content-type que vamos (en este caso ‘application/json’), a devolver y construir el json de vuelta.

Aprovechando el ejemplo, también devolveremos el código HTTP 200 de respuesta indicando que todo ha ido bien:

package com.autentia.spark.rest.spark.rest;

import static spark.Spark.get;
import static spark.Spark.port;

public class HelloWorldResource {
	public static void main(String[] args) {
		port(8080);
		get("/helloworld", (req, res) ->
		{		
			res.status(200);
			res.type("application/json");
			return "{message: 'Hello " + req.queryParams("name") + "'}";
		});
		
	}	
}

Volvemos a entrar en nuestra aplicación y comprobamos el resultado:

spark-helloworld-json


5. Conclusiones

Como hemos podido ver, montar un API REST con Spark es muy sencillo y arrancar nuestro primer ejemplo será cuestión de 5 minutos.

En la actualidad están muy extendidos los desarrollos de microservicios. Pues bien, Spark, debido a su ligereza y sencillez es una muy buena opción como para tenerlo en cuenta en nuestros desarrollos.

Que duda cabe, que en este tutorial se ha hecho una muy pequeña introducción al Framework. En tutoriales futuros ampliaré más los ejemplos integrando éste potente framework con librerías como Jackson para manejar de una forma más sencilla los objetos JSON, construiremos un API más rico y hablaremos sobre como desarrollar tests unitarios del API.

2 COMENTARIOS

  1. Buen articulo y mu informativo.
    Sin embargo hay una omision cuando se espeifico la url para el ejmeplo con el nombre. Donde dice

    get(«/helloworld», (req, res) -> «Hello » + req.queryParams(«name»));

    deberia ser

    get(«/helloworld/:name», (req, res) -> «Hello » + req.queryParams(«name»));

  2. HOla, esta librería es reactiva? Qué alternativas podemos usar en lugar de usar Spark, pues esta librería le falta ya mucho mantenimiento y presenta problemas de seguridad en la actualidad.
    Gracias.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad