ring 과 compojure 를 이용해 http API 서버 만들기
(ns YOUR_PROJECT_NAME.handler
(:require [compojure.core :refer [defroutes GET POST PUT DELETE]]
[compojure.route :as route]
[ring.middleware.defaults :refer [wrap-defaults site-defaults api-defaults]]
[ring.middleware.json :as ring-json]
[ring.util.response :as rr]))
(defroutes app-routes
(GET "/" [] (do (println "someone comes in!")
(rr/response {:name "home" :status "good"})))
(GET "/cat/:name/profile" [name]
(rr/response
{:name name
:status :grinning}))
(GET "/db" []
(do (println (sql/query "postgresql://localhost:5432/testdb"
["select * from testing"]))
(str "wow" "<h1>hello!</h1>")))
(POST "/post" []
(rr/response {:name "post" :status "good"}))
(PUT "/put" []
(rr/response {:name "put" :status "good"}))
(DELETE "/delete" []
(rr/response {:name "delete" :status "good"}))
(route/not-found "Not Found"))
이때 ring wrapper를 site-defaults로 해두면 유효하지 않은 토큰 에러가 뜬다. api-defaults 로 변경하면 됨.
(def app
(-> app-routes
(ring-json/wrap-json-response)
(wrap-defaults api-defaults)))