×

Ring Clojure的Web框架

消耗积分:2 | 格式:zip | 大小:0.11 MB | 2022-06-13

郭大

分享资料个

授权协议 MIT
开发语言 Clojure HTML/CSS
操作系统 跨平台
软件类型 开源软件
所属分类 服务器软件HTTP服务器

软件简介

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。

 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !