轻量级前端框架在提升开发效率与用户体验中的重要作用
920
2022-10-14
Ring- Clojure 的 Web 框架
Ring 是一个 Clojure 的 Web 框架,它与 Python 的 WSGI 和 Ruby 的 Rake 非常类似。通过把 HTTP的细节抽象为简单且模块化的 API,Ring 允许 Web 应用程序由模块化组件构成,这些组件可以在各种应用程序、Web 服务器和 Web框架之间共享,用来构建类型广泛的应用。
Ring 充分体现了函数式编程的思想 —— 通过一系列函数的组合形成了一个易于理解、扩展的 HTTP 处理链。
Ring 规范里面有如下5个核心概念:
handlers,应用逻辑处理的主要单元,由一个普通的 Clojure 函数实现middleware,为 handler 增加额外功能adapter,将 HTTP 请求转为 Clojure 里的 map,将 Clojure 里的 map 转为 HTTP 相应request map,HTTP 请求的 map 表示response map,HTTP 相应的 map 表示
这5个组件的关系可用下图表示(By Ring 作者):
+---------------+ | Middleware | | +---------+ | +---------+ +--------+ | | |<-- request ----| | | | | | Handler | | | Adapter |<---->| Client | | | |--- response -->| | | | | +---------+ | +---------+ +--------+ +---------------+
Hello World
(ns learn-ring.core (:require [ring.adapter.jetty :refer [run-jetty]]))(defn handler [req] {:headers {} :status 200 :body "Hello World"})(defn middleware [handler] "Audit a log per request" (fn [req] (println (:uri req)) (handler req)))(def app (-> handler middleware))(defn -main [& _] (run-jetty app {:port 3000}))
运行上面的程序,就可以启动一个 Web 应用,然后在浏览器访问就可以返回Hello World,同时在控制台里面会打印出请求的 uri。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~