Je suppose que c'est une étrange question pour la grande majorité des programmeurs qui travaillent quotidiennement avec Java. Je ne. Je connais Java-the-language, car j'ai travaillé sur des projets Java, mais pas Java-the-world. Je n'ai jamais créé une application Web à partir de zéro en Java. Si je dois le faire avec Python, Ruby, je sais où aller (Django ou Rails), mais si je veux faire une application web dans Clojure, non pas parce que je suis obligé de vivre dans un monde Java, mais parce que je comme le langage et je veux l'essayer, quelles bibliothèques et frameworks dois-je utiliser?
216
Réponses:
De loin, le meilleur framework web Clojure que j'ai rencontré est Compojure: http://github.com/weavejester/compojure/tree/master
Il est petit mais puissant et possède une syntaxe magnifiquement élégante. (Il utilise Jetty sous le capot, mais il vous cache l'API Servlet à moins que vous ne le vouliez, ce qui ne sera pas souvent). Allez voir le fichier README à cette URL, puis téléchargez un instantané et commencez à jouer.
la source
Compojure n'est plus un framework complet pour développer des applications web. Depuis la version 0.4, compojure a été décomposé en plusieurs projets.
Ring 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 la demande. L'application traitera alors la demande et, sur la base de la demande, générera une réponse. Une réponse est représentée sous la forme d'une carte contenant les clés suivantes: état, en-têtes et corps. Une application simple ressemblerait donc à:
Une autre partie de Ring est le concept de middleware. Il s'agit d'un code situé entre le gestionnaire et la demande entrante et / ou la réponse sortante. Certains middlewares intégrés incluent des sessions et stacktrace. Le middleware de session ajoutera une clé: session à la mappe de requête qui contient toutes les informations de session pour l'utilisateur effectuant la requête. Si la clé: session est présente dans la mappe de réponse, elle sera stockée pour la prochaine demande faite par l'utilisateur actuel. Alors que le middleware de trace de pile capturera toutes les exceptions qui se produisent lors du traitement de la demande et générera une trace de pile qui sera renvoyée comme réponse si des exceptions se produisent.
Travailler directement avec Ring peut être fastidieux, donc Compojure est construit au-dessus de Ring en abstraction des détails. L'application peut maintenant être exprimée en termes de routage afin que vous puissiez avoir quelque chose comme ceci:
Compojure travaille toujours avec les cartes de demande / réponse afin que vous puissiez toujours y accéder si nécessaire:
Dans ce cas, la partie {uri: uri} accède à la clé: uri dans la mappe de demande et définit uri sur cette valeur.
Le dernier composant est Hiccup qui facilite la génération du HTML. Les différentes balises html sont représentées comme des 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 sont dans une carte facultative."<a href='/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.Voici un lien vers un brouillon de certains documents en cours de rédaction par l'auteur de compojure qui pourraient vous être utiles: Compojure Doc
la source
Il y a aussi "Noir" ( http://www.webnoir.org/ ), qui est un nouveau framework web Clojure (donc les nouveaux documents ne sont pas encore là). Venant de Django / Rails, je creuse la syntaxe simple et directe et c'est assez maigre.
la source
Considérez le framework Web Luminus . Je n'ai aucune affiliation mais j'ai entendu de bonnes choses d'amis que je respecte.
la source
Ma bibliothèque Web actuelle est désormais yada .
Si vous débutez, le serveur d'introduction est
Compojure
. Je le vois comme celuiapache
des serveurs Web dans le monde Clojure (auquel cas yada / aleph serait nginx). Vous pouvez utiliserLuminus
comme modèle. Il en existe des variantes, commecompojure-api
.J'ai essayé ou j'en étais
Pedestal
globalement satisfait. Je ne prétends pas le maîtriser, mais il a une syntaxe agréable, se sent très cohérent et semble avoir de bonnes performances. Il est également soutenu parCognitect
(la société Clojure / Datomic où travaille Rich Hickey).J'ai trouvé
Aleph
à présenter une abstraction intéressante, et la contre-pression intégrée semble intéressante. Je n'ai pas encore joué avec, mais c'est définitivement sur ma liste.Après avoir joué un peu avec divers serveurs Web, voici ma liste rapide des avantages et inconvénients:
Réponse courte: jetez un œil à Luminus pour commencer rapidement, peut-être passer à autre chose à mesure que vos besoins évoluent (Yada peut-être).
Compojure
Avantages (1):
Contre (2):
Piédestal
Avantages (3):
Contre (4):
Aleph
Pro (3):
Contre (1):
Yada
Pro (3):
Contre (1):
HttpKit
Pro (2):
Contre (2):
Nginx-Clojure
Remarque: je n'ai pas joué avec, principalement en raison du manque de documentation. Cela semble intéressant et très performant.
Avantages (2):
Contre (1):
Immutant
Remarque: je n'ai pas joué avec.
Avantages :
Les inconvénients :
Catacumba
Remarque: je n'ai pas joué avec, bien que la documentation soit excellente. Je vais probablement l'essayer ensuite. Il existe des exemples de projets de chat qui semblent intéressants, leur utilisation intensive des protocoles m'a découragé au début en tant que développeur novice de Clojure.
Avantages (6):
Contre (2):
Remarque : une référence des serveurs Web Clojure est disponible, si la performance brute est tout ce qui compte.
la source
De nos jours, le piédestal est un cadre qui mérite le détour. Il s'agit d'un framework côté serveur qui s'appuie sur Ring , mais libère également la demande entrante du thread initial en pouvant mettre en pause et reprendre cette demande particulière (sinon une demande lente bloque en fait ce serverthread). Peut-être un peu comme un JavaBean.
D'autres cadres sympas sont hoplon.io et Om de David Nolen (basé sur React)
la source
Webjure , un framework de programmation web pour Clojure.
Caractéristiques: Le servlet de répartition appelle les fonctions Clojure. Génération HTML dynamique. Interface de requête SQL (via JDBC).
Cette réponse est conçue comme un espace réservé pour les informations Webjure.
la source
Compojure est ce que j'ai utilisé pour créer une petite application de blog. Il est calqué sur Sinatra, qui est un cadre Web minimal et léger pour Ruby. J'ai surtout utilisé le routage, qui est exactement comme celui de Sinatra. On dirait:
Il n'y a pas d'ORM ou de bibliothèque de modèles, mais il a des fonctions qui transforment les vecteurs en HTML.
la source
Vous pouvez également consulter ces cadres (tirés de divulgation / projets ):
Il y a aussi une autre question connexe sur le débordement de pile: les frameworks Web Clojure matures?
la source
Avertissement: je suis l'auteur.
J'ai mis en place un modèle leiningen qui combine des modèles luminusweb et marron. Vous obtenez donc quelque chose avec lequel vous pouvez créer du code clojure et du code clojurescript pour le front et le backend.
En outre, il fournit une gestion des utilisateurs ainsi qu'une génération de CRUD simple et d'autres fonctionnalités plus intéressantes: https://github.com/sveri/closp
la source
Je mettrai mes deux cents pour Duct , également de @weavejester , le mainteneur de Compojure et Ring.
À la base, il rassemble Component et le routeur Ring sous un même toit. Raisons pour lesquelles j'utilise Duct:
Principales caractéristiques:
Remarque: Cela va sans dire, mais pour le bénéfice des nouveaux arrivants en développement Web, comme la plupart des choses Clojurey, Duct nécessite une solide compréhension de Clojure la langue. Je recommande également de lire d'abord le composant.
Sur une autre note personnelle, j'utilise Duct dans plusieurs applications de production depuis plus d'un an maintenant et j'en suis extrêmement satisfait.
la source
vous pouvez également essayer Clojure on Coils, http://github.com/zubairq/coils - avis de non-responsabilité: je suis l'auteur
la source
Un autre serveur Web intéressant est Http-kit . Il a de bonnes performances et est compatible avec l'anneau, et prend également en charge les WebSockets. Il est fabriqué principalement en clojure et manque de certaines choses étranges dans Jetty / Tomcat.
Il est facile de bricoler.
la source
Recadrez et om.next probablement ce que vous recherchez.
la source
Arachne est un framework web pour les nouveaux arrivants. Citant la description du site:
Il a une campagne kickstarter prétendant offrir une expérience de "démarrage" similaire à Rails. Il est développé par un Cognitect.
Voici une bonne discussion à ce sujet avec l'auteur de Luminus (yogthos).
la source
J'utilise Liberator avec succès en production depuis un certain temps maintenant. C'est un excellent cadre si vous voulez juste les os nus, par exemple si vous créez un service Web RESTful ou quelque chose de similaire. Il s'agit essentiellement d'un wrapper pour ring et compojure et fournit un graphique de décision lors de la validation des demandes entrantes. Il est également extrêmement rapide par rapport à d'autres cadres Web plus volumineux. Si vous voulez commencer quelque part rapidement et lentement, alors Liberator est un excellent choix.
la source