驴Qu茅 es Javalin?

Logo del framework Javalin para trabajar de forma sencilla junto a Java y Kotlin

Javalin es un framework web liviano para Kotlin y Java dise帽ado para ser simple y bloqueador de forma predeterminada, admitiendo WebSockets, HTTP2 y solicitudes as铆ncronas. Javalin comenz贸 como una bifurcaci贸n del framework de SparkJava, pero r谩pidamente se convirti贸 en una reescritura desde cero influenciada por el framework de JavaScript koa.js.

Javalin est谩 construido sobre Jetty y su rendimiento es equivalente al c贸digo de Jetty sin procesar. Adem谩s, los desarrolladores no necesitan extender ninguna clase, usar @Annotations o incluso descargar una versi贸n diferente de Javalin para Java y otra para Kotlin.

驴Por qu茅 usar Javalin?

Comparar Javalin con alg煤n otro framework de Java, como por ejemplo Spring, es como comparar una cuchilla de afeitar con una navaja suiza; pero Javalin hace lo que se supone que debe hacer. Si deseas agregar r谩pidamente un punto REST final para una demostraci贸n r谩pida o si solo necesitas un framework web simple sin apartados adicionales como Inyecci贸nes de dependencias o Mapeos relacionales de objetos, considera Javalin como una opci贸n; puesto que es f谩cil de aprender y m谩s ligero a la hora de ponerlo en marcha.

Caracter铆sticas de Javalin

Javalin ofrece una serie de muy interesantes caracter铆sticas, que son las siguientes:

  • Simple: A diferencia de otros frameworks web Java y Kotlin, Javalin tiene muy pocos conceptos que necesita aprender. Nunca ampl铆as las clases y rara vez implementas interfaces.
  • Ligero: Javalin ocupa solamente unas pocas miles de l铆neas de c贸digo sobre Jetty, y su rendimiento es equivalente al c贸digo de Jetty sin procesar. Debido a su tama帽o, es muy f谩cil trabajar sobre el c贸digo fuente.
  • Interoperable: Otros frameworks web de Java y Kotlin suelen ofrecer versiones separadas para cada idioma. Javalin se est谩 desarrollando teniendo en cuenta la interoperabilidad, por lo que las aplicaciones se crean de la misma manera para Java y Kotlin.
  • Flexible: Javalin est谩 dise帽ado para ser simple y bloqueador, ya que este es el modelo de programaci贸n m谩s f谩cil de razonar. Sin embargo, si establece un Future como resultado, Javalin cambia al modo asincr贸nico.
  • Educativo: Visite nuestra p谩gina de educadores si est谩 ense帽ando programaci贸n web y est谩 buscando un framework web que se salga de su camino y le permita concentrarse en los conceptos centrales de su plan de estudios.
  • Integraci贸n OpenAPI: Muchos frameworks web ligeros de Java y Kotlin no son compatibles con OpenAPI, pero Javalin tiene una integraci贸n completa, que incluye Swagger UI y redoc para mostrar los documentos generados. Obtenga m谩s informaci贸n en la p谩gina dedicada del complemento OpenAPI.

鈻 Web Oficial de Javalin 馃巵 Visita Nuestra Tienda 馃巵

馃敟 Seguro tambi茅n te interesa: mejores libros de programaci贸n聽禄 programas para desarrolladores聽禄 mejores lenguajes de programaci贸n聽禄 mejores auriculares para programadores聽禄 ratones verticales para trabajar聽禄 componentes de PC para programadores聽禄 mejores regalos 1 - 馃摝聽禄 mejores regalos 2 - 馃巵

Comenzando con Javalin

Para comenzar a usar Javalin con Java, los desarrolladores solo necesitan public static void main y posteriormente:

public static void main(String[] args) {
    var app = Javalin.create().start(7000);
    app.get("/", ctx -> ctx.result("Hello World"));
}

Veamos un fragmento con alguna configuraci贸n:

var app = Javalin.create(config -> {
    config.defaultContentType = "application/json";
    config.autogenerateEtags = true;
    config.addStaticFiles("/public");
    config.asyncRequestTimeout = 10_000L;
    config.dynamicGzip = true;
    config.enforceSsl = true;
}).routes(() -> {
    path("users", () -> {
        get(UserController::getAll);
        post(UserController::create);
        path(":user-id"(() -> {
            get(UserController::getOne);
            patch(UserController::update);
            delete(UserController::delete);
        });
        ws("events", userController::webSocketEvents);
    });
}).start(port);

Es bastante simple validar par谩metros como par谩metros de ruta, par谩metros de consulta y par谩metros de formulario en Javalin:

var myQpStr = ctx.queryParam("my-qp"); // no validation, returns String or null
var myQpInt = ctx.pathParam("my-qp", Integer.class).get(); // returns an Integer or throws
var myQpInt = ctx.formParam("my-qp", Integer.class).check(i -> i > 4).get(); // Integer > 4

// validate two dependent query parameters:
var fromDate = ctx.queryParam("from", Instant.class).get();
var toDate = ctx.queryParam("to", Instant.class)
        .check(it -> it.isAfter(fromDate), "'to' has to be after 'from'")
        .get();

// validate a json body:
var myObject = ctx.bodyValidator(MyObject.class)
        .check(obj -> obj.myObjectProperty == someValue)
        .get();

Otra caracter铆stica interesante de Javalin que existe en otros frameworks, son los controladores. Javalin trae controladores anteriores, controladores de punto final, controladores posteriores, controladores de excepciones y controladores de errores.

//before handlers
app.before(ctx -> {
    // runs before all requests
});
app.before("/path/*", ctx -> {
    // runs before request to /path/*
});

//endpoint handlers
app.get("/", ctx -> {
    // some code
    ctx.json(object);
});

app.get("/hello/*, ctx -> {
    // capture all request to sub-paths of /hello/
});

//after handlers
app.after(ctx -> {
    // run after all requests
});
app.after("/path/*", ctx -> {
    // runs after request to /path/*
});

Para manejar la autenticaci贸n / autorizaci贸n, Javalin trae la interfaz funcional AccessManager, donde los desarrolladores pueden implementar su propio administrador de acceso como quieran.

// Set the access-manager that Javalin should use:
app.accessManager((handler, ctx, permittedRoles) -> {
    MyRole userRole = getUserRole(ctx);
    if (permittedRoles.contains(userRole)) {
        handler.handle(ctx);
    } else {
        ctx.status(401).result("Unauthorized");
    }
});

Role getUserRole(Context ctx) {
    // determine user role based on request
    // typically done by inspecting headers
}

enum MyRole implements Role {
    ANYONE, ROLE_ONE, ROLE_TWO, ROLE_THREE;
}

app.routes(() -> {
    get("/un-secured",   ctx -> ctx.result("Hello"),   roles(ANYONE));
    get("/secured",      ctx -> ctx.result("Hello"),   roles(ROLE_ONE));
});

A partir de la versi贸n 3.0, Javalin tambi茅n trae un complemento OpenAPI (Swagger). La implementaci贸n completa de la especificaci贸n OpenAPI 3.0 est谩 disponible tanto como DSL como como anotaciones.

OpenAPI DSL:

val addUserDocs = document()
        .body()
        .result("400")
        .result("204")

fun addUserHandler(ctx: Context) {
    val user = ctx.body()
    UserRepository.addUser(user)
    ctx.status(204)
}

Anotaciones de OpenAPI:

@OpenApi(
    requestBody = OpenApiRequestBody(User::class),
    responses = [
        OpenApiResponse("400", Unit::class),
        OpenApiResponse("201", Unit::class)
    ]
)
fun addUserHandler(ctx: Context) {
    val user = ctx.body()
    UserRepository.createUser(user)
    ctx.status(201)
}

Para implementar una aplicaci贸n Javalin, los desarrolladores solo necesitan crear un jar con dependencias (usando maven-assembly-plugin), luego lanzar el jar con java -jar filename.jar. Javalin tiene un servidor integrado Jetty, por lo que no es necesario ning煤n servidor de aplicaciones.

Javalin tambi茅n tiene una p谩gina dedicada exclusivamente a los educadores, donde enfatizan que los estudiantes pueden beneficiarse de Javalin ya que no se requiere una configuraci贸n de Servlet Container / Application Server para comenzar a codificar, puesto que ya se incluye el servidor Jetty incorporado en Javalin.

Hay una serie de tutoriales disponibles, como Running on GraalVM y Kotlin CRUD REST API. La lista completa se puede encontrar en la p谩gina de tutoriales.

Puede encontrar m谩s detalles sobre Javalin en la p谩gina de documentaci贸n. Los usuarios pueden descargar Javalin a trav茅s de Maven o manualmente desde la Central de Maven.

馃巵 Visita Nuestra Tienda 馃巵

Relacionados

馃 Los 14 mejores framework de desarrollo de aplicaciones web y m贸viles para 2020 馃懆鈥嶐煉

馃懆鈥嶐煉 Los 10 + 10 mejores frameworks Java en 2020

馃殌 鈻 Lanzamiento de las extensiones de Firebase para Kotlin

馃捇 鈻 Segunda actualizaci贸n de Java para Visual Studio Code en 2020

馃搫 鈻 Deep Java Library: nuevo kit de herramientas de aprendizaje profundo para desarrolladores de Java

馃懆鈥嶐煄 Palabras m谩s usadas en cada lenguaje de programaci贸n

馃 鈻 C贸mo APRENDER a Programar GRATIS en 2020: Mejores libros recomendados para programadores

馃 鈻 Las 15 Mejores Lenguajes de Programaci贸n 馃懆鈥嶐煉 para Aprender en 2020

馃敟 Seguro tambi茅n te interesa: C贸mo aprender Python en 2020, 馃 鈻 C贸mo aprender aprendizaje autom谩tico o machine learning en 2020 馃, 鈻 M谩s de 200 de los mejores tutoriales de aprendizaje autom谩tico, PNL y Python