java - 如何使web开发更简单?(clojure web dev)
大家讲道理
大家讲道理 2017-04-17 13:20:55
0
2
409

最近研究了下clojure语言,和该语言的一些web库框架,ring,compujure做了一个简单的框架Road:

(defn render-test [ret tmt]
  (-> (resp/response "------render----test------") 
    (#(resp/content-type %1 "text/plain"))))

(defn foo
  "I don't do a whole lot."
  [x]
  (str "来自源码目录的参数:" x))

(defn handler [^Integer x]
    {:$r render-test :text (str "hello world, road goes sucess!" (foo x))})

(defn home [req content ^Integer num]
    {:hiccup "home.clj" :content (str "home" content) :num num})

(defroad road (GET "/web-test-0.1.0-SNAPSHOT-standalone/main" handler) 
              (GET "/web-test-0.1.0-SNAPSHOT-standalone/home/:num{\\d+}" home))

(defn -main [& args]
  (log/info "---------log4j test-------")
  (jetty/run-jetty road {:port 3000}))

https://github.com/zhujinxian/road

框架可以把URI直接映射为一个函数,函数的参数名字对应http传过来的参数的key对应的值,类型用tag修饰。默认string, 函数返回一个map该map被渲染器渲染后返回给浏览器。

可以直接达成jar包独立运行或放在nginx-clojure里跑,或者打包为war放在tomcat里。

这个框架是否足够简单,足够快速,给些建议和改进措施?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(2)
刘奇

從你的標題來看,將 ring, compojure 並列,似乎並沒有完全理解 ring 以及 compojure 這些框架的設計意圖:

  • ring 的設計思想是僅僅處理核心的 request, response 映射問題(其 session, cookie 等實現都可以隨意替換),compojure 這樣的 url 解析框架是 ring 有意留空的領域。換句話說,ring 的設計想法是有其他補充性的函式庫來讓其變得更易用。正因為如此,它成為了所有 clojure web 框架的基礎(目前 manifold 打算補充 ring 語義對非同步處理的遺漏,但總的思想仍然與 ring 相容)。用 ring 作者的話說:one ring to bind them all。這個魔戒之王統率其他 url 解析、加密解密、web 伺服器相容等各層其他函式庫。

  • 這個思路上可以生長出非常繁盛的生態系。例如,對於 url 解析就有 compojure, bidi, silk, mastache 等許多函式庫,其目標接近,手段互不相同;對於顯示層生成有 enlive, laser, hiccup, selmar 等多種生成技術。這種創造力對於初涉者往往看起來難以掌握,但它類似 unix 命令行,威力在於互相結合,但有較陡峭的學習曲線。

題主自行設計的 road 似乎是希望結合上述多種能力,而這恰恰是以 ring 為基礎的 clojure web 生態系統所希望分工完成的。這是你多處發文推廣但回應寥寥的原因。

左手右手慢动作

感覺你需要這個RESTful API 設計最佳實務

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板