Skip to content

Instantly share code, notes, and snippets.

@practice
Last active August 29, 2015 14:23
Show Gist options
  • Save practice/8c8bbec56f5538b9c665 to your computer and use it in GitHub Desktop.
Save practice/8c8bbec56f5538b9c665 to your computer and use it in GitHub Desktop.
clojure restful service
;; handler
(def app
(-> (routes
api-routes ;; for rest api
(wrap-routes home-routes middleware/wrap-csrf) ;; for regular web site
base-routes)
middleware/wrap-base))
;; middleware에 있는 wrap-base
(defn wrap-formats [handler]
(wrap-restful-format handler :formats [:json-kw :transit-json :transit-msgpack]))
;; 위 함수가 json body를 clojure의 keyword:value로 바꾸는거 아닌가요? ㅠㅠ
(defn wrap-base [handler]
(-> handler
wrap-dev
(wrap-idle-session-timeout
{:timeout (* 60 30)
:timeout-response (redirect "/")})
wrap-formats
(wrap-defaults
(-> site-defaults
(assoc-in [:security :anti-forgery] false)
(assoc-in [:session :store] (memory-store session/mem))))
wrap-servlet-context
wrap-internal-error))
;; 제가 만든 api-routes 구현
(defn validate-user [user]
(timbre/debug user)
(b/validate user
:username [[v/required :message "Username은 필수 입력입니다"]])) ;; 이 부분을 통과하지 못합니다. :username을 "username"으로 하면 됨.
(defn create-user [user]
(timbre/debug user)
(let [[errors _] (validate-user user)]
(if (empty? errors)
(do
(timbre/info "created a user:" user)
(response/created (apipath "/user/ddd")))
(->
(response/response errors)
(response/status 400)))))
(defroutes api-routes
(context "/api/v1" []
(POST "/users" [& form] (create-user form)))
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment