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

最近研究了下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 设计最佳实践

      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿
      회사 소개 부인 성명 Sitemap
      PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!