これは、毎日Javaを使用している大多数のプログラマーにとって奇妙な質問だと思います。しません。私はJavaプロジェクトに取り組みましたが、Java-the-worldには取り組みませんでした。JavaでゼロからWebアプリを作成したことはありません。 Python、Ruby、どこに行くべきか(DjangoまたはRails)は知っていますが、ClojureでWebアプリケーションを作成したいのであれば、Javaの世界に住むことを強いられているからではありませんが、私はこの言語が好きで、試してみたいので、どのライブラリとフレームワークを使うべきでしょうか?
私がこれまでに出会った中で最高のClojure WebフレームワークはCompojureです: http://github.com/weavejester/compojure/tree/master
小さくても強力ですが、美しくエレガントな構文を持っています。 (フードの下でJettyを使用しますが、必要でない限りサーブレットAPIを非表示にします。そのURLでREADMEを見て、スナップショットをダウンロードして再生を開始します。
Compojureは、Webアプリケーションを開発するための完全なフレームワークではなくなりました。 0.4リリース以降、compojureはいくつかのプロジェクトに分割されました。
Ring は、HTTP要求および応答プロセスを抽象化することにより基盤を提供します。 Ringは、着信要求を解析し、uri、server-name、request-methodなどの要求のすべての部分を含むマップを生成します。その後、アプリケーションは要求を処理し、要求に基づいて応答を生成します。応答は、ステータス、ヘッダー、本文のキーを含むマップとして表されます。したがって、単純なアプリケーションは次のようになります。
(def app [req]
(if (= "/home" (:uri req))
{:status 200
:body "<h3>Welcome Home</h3>"}
{:status 200
:body "<a href='/home'>Go Home!</a>"}))
Ringのもう1つの部分は、ミドルウェアの概念です。これは、ハンドラーと着信要求および/または発信応答の間にあるコードです。ミドルウェアに組み込まれているものには、セッションとスタックトレースが含まれます。セッションミドルウェアは、リクエストを行うユーザーのすべてのセッション情報を含む:sessionキーをリクエストマップに追加します。応答マップに:sessionキーが存在する場合、現在のユーザーが行った次の要求のために保存されます。スタックトレースミドルウェアは、要求の処理中に発生する例外をキャプチャし、例外が発生した場合に応答として返されるスタックトレースを生成します。
リングを直接操作するのは面倒なので、詳細を抽象化するリングの上に Compojure を構築します。アプリケーションをルーティングの観点から表現できるようになったので、次のようなことができます。
(defroutes my-routes
(GET "/" [] "<h1>Hello all!</h1>")
(GET "/user/:id" [id] (str "<h1>Hello " id "</h1>")))
Compojureはリクエスト/レスポンスマップを引き続き使用しているため、必要に応じていつでもアクセスできます。
(defroutes my-routes
(GET "*" {uri :uri}
{:staus 200 :body (str "The uri of the current page is: " uri)}))
この場合、{uri:uri}部分は要求マップの:uriキーにアクセスし、uriをその値に設定します。
最後のコンポーネントは Hiccup です。これにより、htmlの生成が容易になります。さまざまなhtmlタグは、最初の要素がタグ名を表し、残りがタグの本文であるベクターとして表されます。 "<h2>A header</h2>"
は[:h2 "A Header"]
になります。タグの属性はオプションのマップにあります。 "<a href='/login'>Log In Page</a>"
は[:a {:href "/login"} "Log In Page"]
になります。テンプレートを使用してhtmlを生成する小さな例を次に示します。
(defn layout [title & body]
(html
[:head [:title title]]
[:body [:h1.header title] body]))
(defn say-hello [name]
(layout "Welcome Page" [:h3 (str "Hello " name)]))
(defn hiccup-routes
(GET "/user/:name" [name] (say-hello name)))
Compojureの作者によって現在書かれているいくつかのドキュメントの大まかなドラフトへのリンクがあります。これはあなたが役に立つと思うかもしれません: Compojure Doc
「ノワール」( http://www.webnoir.org/ )もあります。これは新しいClojure Webフレームワークです(新しいドキュメントはまだありません)。 Django/Railsから来た私は、シンプルでわかりやすい構文を掘り下げましたが、かなり無駄がありません。
Luminus web framework を検討してください。私は所属していませんが、尊敬する友人から良いことを聞きました。
現在のWebライブラリは yada です。
始めたばかりの場合、導入サーバーは Compojure
です。 Clojureの世界のWebサーバーのApache
(この場合、yada/alephはnginxになります)と考えています。 Luminus
をテンプレートとして使用できます。 compojure-api
。
私はou Pedestal
を試しましたが、グローバルに満足していました。私はそれを習得したと主張していませんが、心地よい構文を持ち、非常にまとまりがあり、素晴らしいパフォーマンスを持っているように見えます。また、Cognitect
(Rich Hickeyが働いているClojure/Datomic社)によって支援されています。
Aleph
を見つけて興味深い抽象化を提示し、組み込みのバックプレッシャーは興味深いように見えます。私はまだ使っていませんが、間違いなく私のリストに載っています。
さまざまなWebサーバーで少し遊んだ後、ここに簡単なPro/Consリストを示します。
簡単な答え: Luminus を見て、すぐに始めましょう。必要に応じて何か他のものに移りましょう(矢田)。
長所(1):
短所(2):
長所(3):
短所(4):
プロ(3):
短所(1):
プロ(3):
短所(1):
プロ(2):
短所(2):
注:主にドキュメントが不足しているため、私はそれで遊んでいません。それは面白いように見えますが、非常に高性能です。
長所(2):
短所(1):
注:私はそれで遊んでいません。
長所:
短所:
注:ドキュメントは素晴らしいように見えますが、私はそれで遊んでいません。私はおそらく次に試してみるつもりです。おもしろそうなチャットプロジェクトの例がありますが、プロトコルを多用していると、最初は初心者のClojure開発者として私を先送りにしました。
長所(6):
短所(2):
注: Clojure Webサーバーのベンチマーク は、生のパフォーマンスが重要な場合に使用できます。
Webjure 、ClojureのWebプログラミングフレームワーク。
機能:ディスパッチサーブレットはClojure関数を呼び出します。ダイナミックHTML生成。 SQLクエリインターフェイス(JDBC経由)。
この回答は、Webjure情報のプレースホルダーを意味します。
Compojureは、小さなブログアプリケーションを構築するために使用したものです。これは、Ruby用の最小限の軽量WebフレームワークであるSinatraをモデルにしています。私は主にルーティングを使用しましたが、これはシナトラのようなものです。次のようになります。
(GET "/post/:id/:slug"
(some-function-that-returns-html :id :slug))
ORMやテンプレートライブラリはありませんが、ベクターをHTMLに変換する関数があります。
また、これらのフレームワークを見ることができます( disclojure/projects から取得):
スタックオーバーフローに関するもう1つの関連する質問もあります。 Mature Clojure Webフレームワーク?
免責事項:私は著者です。
Luminuswebと栗のテンプレートを組み合わせたラインニンゲンテンプレートを作成しました。したがって、clojureコードをビルドできるものと、フロントエンドおよびバックエンド用のclojurescriptコードを取得できます。
さらに、ユーザー管理に加えて、いくつかのシンプルなCRUD生成と、いくつかの小さなニースを用意しています: https://github.com/sveri/closp
Compojure and Ringのメンテナーである @ weavejester からも Duct に2セントを投入します。
コアでは、 コンポーネント とリングルーターを1つの屋根の下にもたらします。ダクトを使用する理由:
主な機能:
注:言うまでもありませんが、ほとんどのClojureyのように、Web開発の新参者のために、DuctはClojure言語をしっかりと把握する必要があります。また、最初にコンポーネントについて読むことをお勧めします。
別の個人的な注意として、私は1年以上にわたっていくつかの生産アプリケーションでDuctを使用してきましたが、非常に満足しています。
コイルでClojureを試すこともできます http://github.com/zubairq/coils -免責事項:私は著者です
もう1つの興味深いWebサーバーは、 Http-kit です。優れたパフォーマンスがあり、リングに準拠しており、WebSocketもサポートしています。ほとんどがclojureで作成されており、Jetty/Tomcatには奇妙なものがいくつかあります。
それをいじるのは簡単です。
Reframeとom.nextはおそらくあなたが探しているものです。
Arachne は新しいWebフレームワークです。サイトの説明を引用:
Arachneは、Clojure用の完全で高度にモジュール化されたWeb開発フレームワークです。使いやすさ、シンプルさ、堅牢でスケーラブルなデザインを強調しています。
kickstarterキャンペーン Railsに似た「開始」エクスペリエンスを提供すると主張しています。 Cognitectによって開発されました。
ここ は、Luminus(yogthos)の著者との良い議論です。
私は Liberator を本番環境でしばらく使用しています。必要なものだけが必要な場合は、すばらしいフレームワークです。 RESTful Webサービスなどを構築している場合。それは本質的にリングとコンポジュアのラッパーであり、着信リクエストを検証するときに決定グラフを提供します。また、他のよりかさばるWebフレームワークに比べて非常に高速です。どこかで早く始めてゆっくりと構築したい場合は、Liberatorが最適です。