Compojure n'est plus un framework complet pour le développement d'applications web. Depuis la version 0.4, Compojure a été scindé en plusieurs projets.
Bague fournit la base en faisant abstraction du processus de demande et de réponse HTTP. Ring analysera la demande entrante et générera une carte contenant toutes les parties de la demande telles que l'uri, le nom du serveur et la méthode de demande. L'application va ensuite traiter la demande et, en fonction de celle-ci, générer une réponse. Une réponse est représentée par une carte contenant les clés suivantes : status, headers, et body. Ainsi, une application simple ressemblerait à ceci
(def app [req]
(if (= "/home" (:uri req))
{:status 200
:body "<h3>Welcome Home</h3>"}
{:status 200
:body "<a href='http://stackoverflow.com/home'>Go Home!</a>"}))
Une autre partie de Ring est le concept d'intergiciel. Il s'agit du code qui se situe entre le gestionnaire et la demande entrante et/ou la réponse sortante. Parmi les intergiciels intégrés, citons les sessions et le suivi de pile. L'intergiciel de session ajoute une clé :session à la carte de requête, qui contient toutes les informations de session de l'utilisateur effectuant la requête. Si la clé :session est présente dans la carte de réponse, elle sera stockée pour la prochaine demande effectuée par l'utilisateur actuel. L'intergiciel de suivi de la pile capture toutes les exceptions qui se produisent pendant le traitement de la demande et génère un suivi de la pile qui est renvoyé en réponse si des exceptions se produisent.
Travailler directement avec Ring peut être fastidieux, alors Compojure est construit au-dessus de Ring en faisant abstraction des détails. L'application peut maintenant être exprimée en termes de routage, ce qui donne quelque chose comme ceci :
(defroutes my-routes
(GET "/" [] "<h1>Hello all!</h1>")
(GET "/user/:id" [id] (str "<h1>Hello " id "</h1>")))
Compojure travaille toujours avec les cartes de demande/réponse afin que vous puissiez toujours y accéder si nécessaire :
(defroutes my-routes
(GET "*" {uri :uri}
{:staus 200 :body (str "The uri of the current page is: " uri)}))
Dans ce cas, la partie {uri :uri} accède à la clé :uri dans la carte des requêtes et définit uri à cette valeur.
Le dernier composant est Hiccup ce qui facilite la génération du html. Les différentes balises html sont représentées sous forme de vecteurs, le premier élément représentant le nom de la balise et le reste étant le corps de la balise. "<h2>A header</h2>"
devient [:h2 "A Header"]
. Les attributs d'une balise se trouvent dans une carte facultative. "<a href='http://stackoverflow.com/login'>Log In Page</a>"
devient [:a {:href "/login"} "Log In Page"]
. Voici un petit exemple utilisant un modèle pour générer le 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)))
Voici un lien vers un brouillon de documentation en cours d'écriture par l'auteur de compojure qui pourrait vous être utile : Compojure Doc
1 votes
Je me demandais si vous souhaitiez utiliser les API natives de Java ou celles de Clojure ?
0 votes
Ande : Je ne suis vraiment pas sûr, car je connais très peu le monde Java à cet égard (mais j'utilise Java, le langage, depuis un certain temps déjà au travail).
0 votes
Je pense que ce serait bien si cette question se terminait par une liste de frameworks web Clojure, avec une réponse chacun, et que chacun puisse voter pour son préféré. Je pense que la réponse de Meredydd est définitivement celle de Compojure. Je vais en ajouter une pour Webjure et ce serait bien d'avoir une comparaison.
0 votes
Pupeno ! Je suis arrivé ici en cherchant "applications web avec clojure". Cette page était le premier résultat dans Google.
2 votes
Voir aussi la question connexe stackoverflow.com/questions/3325033/
0 votes
Notepad(emacs) : fait . Pas de rasage : fait . Manmode : ON
0 votes
@AdamArold : avez-vous sérieusement comparer Emacs à Notepad ? Comme, vraiment ? ?!
0 votes
Emacs est un sur-ensemble du Bloc-notes si vous le voyez de cette façon (Emacs peut être utilisé à la place du Bloc-notes).
0 votes
Je vous propose de faire le point sur l'état d'avancement du développement web de Clojure ... consultez le site juxt.pro/blog/posts/yada-1.html Yada. (assez funkin' new as of Jun 2016)