Clojure 的 Web 框架 Ring

MIT
跨平台
2019-05-21
局长

Ring 是一个 Clojure 的 Web 框架,它与 Python 的 WSGI 和 Ruby 的 Rake 非常类似。通过把 HTTP 的细节抽象为简单且模块化的 API,Ring 允许 Web 应用程序由模块化组件构成,这些组件可以在各种应用程序、Web 服务器和 Web 框架之间共享,用来构建类型广泛的应用。

Ring 充分体现了函数式编程的思想 —— 通过一系列函数的组合形成了一个易于理解、扩展的 HTTP 处理链。

Ring 规范里面有如下5个核心概念:

  1. handlers,应用逻辑处理的主要单元,由一个普通的 Clojure 函数实现
  2. middleware,为 handler 增加额外功能
  3. adapter,将 HTTP 请求转为 Clojure 里的 map,将 Clojure 里的 map 转为 HTTP 相应
  4. request map,HTTP 请求的 map 表示
  5. 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。

的码云指数为
超过 的项目
加载中
此软件有 14 条评论,请先登录后再查看。

暂无资讯

暂无问答

Ring

A ring is a continuous, high-speed acquisition to multiple buffers in memory.

2014/11/26 12:35
37
0
ring buffer

1. 有关ring buffer的理解 1) ring buffer位首尾相接的buffer,即类似生活中的圆形跑道; 2) 空闲空间+数据空间=ring buffer大小 3) ring buffer的读写,类似生活中在圆形跑道上的追赶游戏,...

2015/07/05 17:15
91
0
[HDU2296]Ring

vjudge ###Description For the hope of a forever love, Steven is planning to send a ring to Jane with a romantic string engraved on. The string's length should not exceed N. The ...

2018/01/26 12:34
9
0
BZOJ3457 : Ring

根据Polya定理: \[ans=\frac{\sum_{d|n}\varphi(d)cal(\frac{n}{d})}{n}\] 其中$cal(n)$表示长度为$n$的无限循环后包含$S$的串的数量。 对于$cal(n)$的计算,考虑用总方案数$2^n$减去单次循...

2018/03/11 03:05
27
0
A Survey on Ring Signature

0x00 写在前面 研究门罗币有段时间了,之前对其中的基本技术做了一些简单的介绍,今天来对其中的环签名做详细的解释,包括起源、发展和最新的进展,算是一个详细的科普文。环签名,区别于一般...

06/25 22:05
11
0
CPU的Ring等级

Intel的x86处理器是通过Ring级别来进行访问控制的,级别共分4层,RING0,RING1,RING2,RING3。 RING0层拥有最高的权限,RING3层拥有最低的权限。 Windows只使用其中的两个级别RING0和RING3。按...

2019/07/05 16:32
0
0
PF_RING 上头

PF_RING

2016/04/10 00:08
36
1
【DPDK】【ring】从DPDK的ring来看x86无锁队列的实现

【前言】   队列是众多数据结构中最常见的一种之一。曾经有人和我说过这么一句话,叫做“程序等于数据结构+算法”。因此在设计模块、写代码时,队列常常作为一个很常见的结构出现在模块设计...

01/18 14:33
58
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部