Dropwizard es un framework para construir servicios web RESTful en Java de forma rápida y eficiente. Este marco combina varias bibliotecas maduras como Jetty, Jersey, Jackson y Metrics en un único paquete cohesivo, eliminando la complejidad de configuraciones manuales.
¿Por qué usar Dropwizard?
- Configuración Simplificada: Usa una estructura de proyecto preconfigurada.
- Eficiencia: Basado en Jetty, ofrece un servidor web de alto rendimiento.
- Monitorización: Incluye herramientas para métricas y monitoreo listas para usar.
- Integración: Compatible con Jersey para manejar endpoints RESTful y Jackson para JSON.
- Producción-Ready: Diseñado para entornos de producción con soporte para configuración YAML y validaciones.
Para comenzar, necesitas agregar Dropwizard a tu proyecto Maven:
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-core</artifactId>
<version>2.1.4</version>
</dependency>
Un proyecto típico de Dropwizard tiene tres componentes principales:
- Aplicación (`MyApplication`): Configura el servicio y los recursos.
- Configuración (`MyConfiguration`): Define las opciones de configuración en YAML.
- Recursos (`MyResource`): Implementa los endpoints RESTful.
Veamos un ejemplo, primero empezamos configurando:
import io.dropwizard.Application;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
public class HelloWorldApplication extends Application<HelloWorldConfiguration> {
public static void main(String[] args) throws Exception {
new HelloWorldApplication().run(args);
}
@Override
public void initialize(Bootstrap<HelloWorldConfiguration> bootstrap) {
// Inicialización si es necesaria
}
@Override
public void run(HelloWorldConfiguration configuration, Environment environment) {
final HelloWorldResource resource = new HelloWorldResource(configuration.getDefaultName());
environment.jersey().register(resource);
}
}
Crea un archivo config.yml:
defaultName: "Mundo"
server:
applicationConnectors:
- type: http
port: 8080
adminConnectors:
- type: http
port: 8081
Por ultimo hacemos nuestros servicios:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
@Produces(MediaType.APPLICATION_JSON)
public class HelloWorldResource {
private final String defaultName;
public HelloWorldResource(String defaultName) {
this.defaultName = defaultName;
}
@GET
public String sayHello() {
return String.format("Hola, %s!", defaultName);
}
}
Y la configuración va ser:
import io.dropwizard.Configuration;
import com.fasterxml.jackson.annotation.JsonProperty;
import javax.validation.constraints.NotEmpty;
public class HelloWorldConfiguration extends Configuration {
@NotEmpty
private String defaultName;
@JsonProperty
public String getDefaultName() {
return defaultName;
}
@JsonProperty
public void setDefaultName(String defaultName) {
this.defaultName = defaultName;
}
}
Y luego levantamos el server y vamos a http://localhost:8080/hello donde veremos nuestro "hello!"
Dropwizard es una opción excelente para construir servicios RESTful en Java con un enfoque minimalista. La verdad no me queda claro porque eligiría dropwizard y no spring boot. Si alguien sabe escriba en los comentarios.
Dejo link: https://www.dropwizard.io/en/stable/