I almost missed this goodie on Technology Radar -- not only is it shadowed by the popular Apache Spark name, it's reference was hidden in a Spring Boot summary... not my favorite family of XML-bloated tools. Spark is a lightweight web framework for Java 8. It has modest run-time dependencies -- Jetty and slf4j and four-line hello-world example -- including imports, but not close curly braces.
Let's go through a somewhat more complex conversation with Spark than "Hello, World" and set up a simple key-value store.
Create a Maven project. Spark has instructions for Intellij and Eclipse. You don't need an archetype; just make sure to select Java SDK 1.8.
We'll implement a simple REST dictionary so that we can show off our vocabulary, or our thesaurus skills, and because we're snooty, we'll "protect" our dictionary with a password.
OK, it's not as terse as Ruby or Node.js, but it's readable (similar to Express), statically-typed, and integrates with the rest of your JVM. The real beauty of Spark is in the route definitions and filters -- try approaching that level of conciseness with Spring... or even Jetty and annotations.
Spark provides before() and after() filters, presumably for authentication, logging, forwarding.... executed in the order applied in your code. Above, there's only an unsophisticated password check. I've not dug in to discover whether or not Spark exposes enough bells and whistles for Kerberos.
The Spark.get() methods provide conduits for REST into your application. Spark checks to see that the request parameters are present, returning 404 otherwise, and dispatches your registered handlers.
You can run and test drive the example
Neat! I've always been uneasy that Jetty's annotations aren't thoroughly checked by the compiler. DropWizard has loads of dependencies with versioning issues that have tripped me up.