6 ms·
Show HN: Javalin, a Java/Kotlin REST API Framework
- Zekio 9y agohow is this different from Spark Java aside from the name that is
- javalin 9y agoI should probably create a comparison chart, but in short: Javalin has no static API, and no concept of "Routes and Filters". In spark Routes have a return value, in Javalin you just have "Handlers" which operate on the request and response. Javalin can do automatic object-mapping to and from json, and has lifecycle events. Javalin has a built in mechanism for auth (AccessManager) Javalin has no WebSocket support, and doesn't do static file handling (it leaves this to the embedded server). Javalin runs before-handlers before static files, Spark does not. Javalin has a fluent api. Javalin is implemented as a servlet, not a filter. After-handlers are run after everything (even in case of exceptions), (Spark has after-after filters). There are many more small differences. I'm one of the maintainers of Sparkjava. Javalin is the result of using Spark daily for the past two years, fixing minor annoyances and including new concepts I would find myself implementing over and over again.
- romanovcode 9y agoIt looks like express so it's got to be hip.
- lorenzosnap 9y agoSo Javelin is written in Java, not in Kotlin. I don't mean to sound unfair but isn't it that saying "a Java/Kotlin blah blah" just a kind of marketing trick ? If I get Kotlin right every Java solution is also Kotlin compatible.
- javalin 9y agoThere's a difference between just being compatible and nice to work with. Javalin is being developed with Kotlin in mind. I'm a Java dev who wants to transition to writing Kotlin, but most companies are not very eager to make the switch. Javalin is intended to help ease this transition.
- lorenzosnap 9y agoOk, thanks that sounds fair.
- ptx 9y agoThe "Fully Fluent API" seems to be a style adopted as a workaround for the clumsiness of the Java language, as far as I can tell. In Kotlin it's not necessary and just looks a bit weird. This example in Java: Javalin app = Javalin.create() .port(7000) app.start() .awaitInitialization() .stop() .awaitTermination(); could be written more naturally in Kotlin: val app = Javalin.create().apply { port = 7000 } with(app) { start() awaitInitialization() stop() awaitTermination() } ...except that Javalin doesn't seem to implement the normal convention for getters and setters, so the apply block wouldn't work.
- javalin 9y agoThanks, this is good feedback. I'm still at the stage where I'm "writing Java in Kotlin".
- swsieber 9y agoIs "with" a keyword, or is it just convention - I haven't been able to find it documented anywhere. It seems like it's just doing a function with receiver under the hood.
- ptx 9y agoIt's an ordinary function: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/with.html https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/with.htm...
- swsieber 9y agoThank you - searching for the word with was unfruitful for me.
- pdpi 9y agoThis is a recurring theme with Kotlin: inline receiver functions with a lambda parameter are an amazingly versatile tool for building functions that implement what would be a language feature/syntactic sugar in other languages. `with` here is a good example, but `let` and `use` are other good examples of this in play (`use` gives you try-with-resource, let plays nicely with the ?. safe navigation operator to execute code on non-null objects `maybeNullObject?.let { doStuffWith(it) }`)
- relics443 9y agoThe Kotlin sample on the homepage isn't idiomatic, i.e. the handler should be written outside of the parentheses.
- javalin 9y agoThanks for spotting that, fixed.
- bollockitis 9y agoHow is this pronounced? Like it's spelled, or like "javelin?"
- javalin 9y agoGood question. I'm Norwegian, and I always pronounce it "ya-va-lin" when I talk about it in Norwegian. Let's say that's the official pronunciation.
- jarym 9y agoThis looks nice but so far I'm thrilled with ktor (which is very much in development). Some of the main draws are: - It supports multiple server hosts (Jetty, Netty, Tomcat as well as running as a servlet) - It's Kotlin done by the JetBrains guys so very much Kotlin to the core - It supports co-routines Not trying to throw water on your hard work, but what reasons would I want to consider Javalin?
- javalin 9y ago> but what reasons would I want to consider Javalin? I'm not really trying to convince devs whose main language is Kotlin to use Javalin, it's made more for Java devs and Java devs who are looking to switch to Kotlin. That being said..! Ktor Hello World example isn't very pretty, and I can't find the docs. All I found was a mostly empty wiki. Where are the official docs? By the way, pull-requests for other embedded servers would be very welcome in Javalin.