Ring周りについて頭を整理

Clojure(Compojure)で作成したWEBアプリをGlassFishにデプロイ - oknknicの日記」に続き、ClojureによるWebアプリネタ。
デファクトである Ring について、頭を整理しておく。

Ring

  • PythonWSGIRubyのRackにインスパイアされたWebアプリケーションライブラリ
  • HTTPの詳細を抽象化するユニファイドAPIを提供
  • Ringを用いて記述されたClojure Web Applicationは、Java Servletコンパイルできる
  • war ファイルへのパッケージングもできる
  • 多彩なミドルウェア(後述)が提供される
構成

 リクエストの流れ:クライアント -> アダプタ -> ミドルウェア -> ハンドラ
 レスポンスの流れ:ハンドラ -> ミドルウェア -> アダプタ -> クライアント

アダプタ
  • RingはJava Servletのアダプタを組み込みでもっている。これにより、Java WAS にデプロイできる Java Servletへのコンパイルが可能になっている
  • Ringは組み込みのJettyを用いるアダプタ(ring-jetty-adapter)も組み込みでもっている

 などなど

Ring関連サードパーティライブラリ

→Compojureはこの位置づけ

Compojure

  • Ringのハンドラの記述に特化したDSL
    • MVCでいうところのコントローラ部分(リクエストのルーティング部分)を補助するライブラリ
  • RubySinatraにインスパイアされた

参考

Clojure Programming: Practical Lisp for the Java World (English Edition)

Clojure Programming: Practical Lisp for the Java World (English Edition)

Clojure in Action: Elegant Applications on the JVM

Clojure in Action: Elegant Applications on the JVM