• 授权协议:MIT
  • 开发厂商:-
  • 软件语言:Clojure,HTML/CSS
  • 更新日期:2019-05-11
Ring

Ring 是一个 Clojure 的 Web 框架,它与 Python 的 WSGI 和 Ruby 的 Rake 非常类似。通过把 HTTP 的细节抽象为简单且模块化的 API,Ring 允许 Web 应用程序由模块化组件构成,这些组件可以在各种应用程序、Web 服务器和 Web 框架之间共享,用来构建类型广泛的应用。Ring 充分体现了函数式编程的思想 —— 通过一系列函数的组合形成了一个易于理解、扩展的 HTTP 处理链。| | |<-- request ----|

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。

Ring Clojure 的 Web 框架 评论内容