Skip to content

Show HN: Kog, a simple kotlin server inspired by clojure's ring (just for fun)

github.com/danneu
4 pointsdanneu1 comment
On HN

Comments

    val handler = Router {
        get("/", fun(): Handler = {
            Response().text("Hello, world")
        })
        get("/<a>/<b>/<c>", fun(a: Int, b: Int, c: Int): Handler = {
            Response().json(J.obj("sum" to J.num(a + b + c)))
        })
    }.handler()

    Server(handler).listen(3000)

It has a lot of features half-stubbed out to a hobbyware level from a type-safe router to content negotiation to JSON decoder combinators.

I was in the market for a statically-typed language to use on the server and gave Kotlin a shot.

After rewriting an old, large log-parsing program, I was impressed with Kotlin's mix of simplicity and expressiveness. The designers definitely spent some quality hammock time.

I wrapped Jetty's `(Request, Response) -> Unit` signature in a `(Request) -> Response` signature which I always liked because it's easier to test and it means middleware becomes a higher-order function `((Req) -> Res) -> ((Req) -> Res)`.

It has some goofy abstractions, too, and plenty of `// TODO:`'s in the code. I couldn't even figure out how to get it working with jRebel much less roll my own hot reload.

But I think I got it to a point where it might be interesting to other weekend-ware warriors.

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.