Javalin: لایبرری تحت وب برای زبان‌های جاوا و کاتلین

Javalin: لایبرری تحت وب برای زبان‌های جاوا و کاتلین

Javalin یک پلتفرم بسیار سبک برای زبان‌های برنامه‌نویسی Kotlin و Java است که بر اساس Sparkjava و koa.js پیاده‌سازی شده است. در اصل، جاوالین به زبان کاتلین نوشته شده است اما برخی از اینترفیس‌های آن به زبان جاوا هستند که این کار برای ایجاد یک تجربۀ لذت‌بخش و تقریباً ایده‌آل برای دولوپرهای جاوا و کاتلین بوده است.

جاوالین بیشتر از اینکه یک پلتفرم باشد، یک لایبرری است؛ به عبارت دیگر، نیازی به پیاده‌سازی چیزی نیست و کانسپت‌های بسیار کمی برای یادگیری از جانب دولوپر مورد نیاز هستند. برای مثال، برنامه‌ٔ معروف Hello World در جاوالین با زبان جاوا به صورت زیر است:

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

و در زبان کاتلین هم به شکل زیر است:

fun main(args: Array) {
    val app = Javalin.start(7000)
    app.get("/") { ctx -> ctx.result("Hello World") }
}

هماهنگی بین کاتلین و جاوا در Javalin
هماهنگی بین کاتلین و جاوا برای جاوالین بسیار ضروری است. وقتی یک پروژه را از جاوا به کاتلین منتقل می‌کنیم، نباید نیازی به تغییرات زیادی باشد. همان‌طور که در مثال بالا می‌بینید، تفاوت‌های بین جاوا و کاتلین بسیار جزئی و در حد چند پرانتز و سمیکالن هستند. در حقیقت، هدف این پروژه نیز حفظ این هماهنگی بین جاوا و کاتلین است.

ویژگی‌های اصلی Javalin
- سبک است و به آسانی می‌توانید آن را یاد بگیرید.
- API پایداری دارا است. تمام هندلرها و مپرها void هستند و بر روی کانتکست (ctx) اجرا می‌شوند.
- یک API تقریباً ایده‌آل هم برای جاوا و هم برای کاتلین است.
- بیشتر یک لایبرری است تا یک پلتفرم (نیازی به اکستند کردن چیزی ندارید).
- دارای یک سرور (jetty) با قابلیت شخصی‌سازی است.
- آبجکت مپینگ JSON (بوسیله Jackson) دارد.
- امکان Authentication با استفاده از AccessManager در هر URL دارا است.
- دارای فایل هندلینگ استایک و ساده است.
- ایونت‌های لایف‌سایکل دارد.
- CookieStore است. راهی آسان برای سریالی‌ کردن و ذخیره آبجکت‌ها در کوکی‌ها دارا است.
- از رندرینگ Template پشتیبانی می‌کند (Velocity ،Freemarker ،Thymeleaf ،Mustache)
- همچنین از رندرینگ Markdown پشتیبانی می‌کند.