5
compojureルートの背後にある「大きなアイデア」とは何ですか?
私はClojureを初めて使用し、Compojureを使用して基本的なWebアプリケーションを作成しています。defroutesしかし、私はCompojureの構文で壁にぶつかっています。その背後にある「方法」と「理由」の両方を理解する必要があると思います。 リングスタイルのアプリケーションは、HTTPリクエストマップで始まり、リクエストがレスポンスマップに変換されてブラウザに返されるまで、一連のミドルウェア関数を介してリクエストを渡しているようです。このスタイルは開発者にとって「低レベル」であると思われるため、Compojureなどのツールが必要です。他のソフトウェアエコシステム、特にPythonのWSGIでも、より多くの抽象化が必要であることがわかります。 問題は、Compojureのアプローチが理解できないことです。次のdefroutesS式を見てみましょう。 (defroutes main-routes (GET "/" [] (workbench)) (POST "/save" {form-params :form-params} (str form-params)) (GET "/test" [& more] (str "<pre>" more "</pre>")) (GET ["/:filename" :filename #".*"] [filename] (response/file-response filename {:root "./static"})) (ANY "*" [] "<h1>Page not found.</h1>")) これらすべてを理解するための鍵はいくつかのマクロブードゥー内にあることは知っていますが、マクロを完全には理解していません(まだ)。私はdefroutes長い間ソースを見つめてきましたが、それを理解しないでください!何が起きてる?「ビッグアイデア」を理解することは、おそらくこれらの特定の質問に答えるのに役立ちます。 ルーティングされた関数(workbench関数など)内からリング環境にアクセスするにはどうすればよいですか?たとえば、HTTP_ACCEPTヘッダーまたはリクエスト/ミドルウェアの他の部分にアクセスしたいとしますか? 破壊({form-params :form-params})との取り決めは何ですか?解体するときに使用できるキーワードは何ですか? Clojureは本当に好きですが、とても困惑しています。