ring + compojure + clj-json を使ってみる

プログラミング Clojure を読む以外はほとんど Clojure 触れていなかったので、気分転換に触ってみることにしました。

コードをほとんど書かずにひたすら本を読んでいただけなので、やっとこさのコードです。

やりたいことを広げると失敗するので、Ring を使ったウェブアプリに限定してみます。

ただし、テンプレート周りは面倒だし、現実的ではないので JSON API のみにしぼる。

そうなると使いそうなライブラリは限定されてくるのでライブラリのラーニングコストが下がる。

ということで、適当に書いてみました。

project.clj

(defproject clj-snowflake "1.0.0-SNAPSHOT"
  :description "snowflake"
  :dependencies [[org.clojure/clojure "1.3.0"]
                 [ring "1.0.0-RC2"]
                 [compojure "1.0.0-SNAPSHOT"]
                 [clj-json "0.4.3"]
                 [clj-time "0.3.3"]]
  :dev-dependencies [[lein-ring "0.4.6"]]
  :ring {:handler snowflake.core/app})

core.clj

(ns snowflake.core
  (:use [compojure.core])
  (:require [clj-json.core :as json]
            [compojure.route :as route]
            [compojure.handler :as handler]))

(defroutes main-routes
  (GET "/" [] (json/generate-string {"はろー" "わーるど"}))
  (route/resources "/")
  (route/not-found "Page not found"))

(def app (handler/site main-routes))

あとは lein deps したら lein ring server でページに JSON が日本語で表示されれば問題なし。

次はデータベースとの接続ですかね、一番ややこしそう。