Comment faire une application web en Clojure?
Je suppose que c'est une question étrange à l'immense majorité des programmeurs qui travaillent quotidiennement avec Java. Je n'ai pas. Je sais Java-la-langue, parce que j'ai travaillé sur des projets Java, mais pas Java-le-monde. Je n'ai jamais fait 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 en Clojure, non pas parce que je suis obligé de vivre dans un monde Java, mais parce que j'aime la langue et je veux l'essayer, ce que les bibliothèques et les cadres dois-je utiliser?
- Je me demandais si vous souhaitez utiliser Java API Native ou Clojure Natale ?
- Ande: je ne suis vraiment pas sûr, que je sais si peu de choses sur le monde Java à cet égard (mais j'ai été à l'aide de Java, le langage, pour quelque temps au travail déjà).
- Je pense que ce serait bien si cette question a terminé avec une liste de Clojure frameworks web, une réponse à chacun, et tout le monde peut voter leur favori. Je pense que Meredydd est certainement le Compojure de réponse. Je vais en ajouter un à Webjure et il serait agréable d'avoir une comparaison.
- Pupeno! Je suis arrivé ici chercher des applications web avec clojure". Cette page a été le premier résultat dans Google.
- Regardez aussi liés à la question stackoverflow.com/questions/3325033/...
- Le bloc-notes(emacs): ok. Pas de rasage: ok. Manmode: LE
- avez-vous sérieusement comparer Emacs pour le bloc-notes? Comme, vraiment??!
- Emacs est un sur-ensemble de bloc-notes si vous le regardez de cette façon (Emacs peut être utilisé à la place de bloc-notes).
- Proposer simplement une mise à jour sur le statut de Clojure développement web ... découvrez juxt.pro/blog/posts/yada-1.html Yada. (assez funkin' nouveau que de Juin 2016)
Vous devez vous connecter pour publier un commentaire.
De loin le meilleur Clojure framework web je n'ai pas encore rencontré est Compojure: http://github.com/weavejester/compojure/tree/master
Il est petit mais puissant, et a magnifiquement élégant de la syntaxe. (Il utilise Jetée sous le capot, mais il cache la Servlet API de vous sauf si vous le souhaitez, ce qui ne sera pas souvent). Allez voir le fichier README à l'URL, puis télécharger une photo et commencer à jouer.
Compojure n'est plus un cadre complet pour le développement d'applications web. Depuis la version 0.4, compojure a été brisé en plusieurs projets.
Anneau fournit à la fondation par l'abstraction de la requête HTTP et le processus de réponse. Joint d'analyser la demande entrante et de générer une carte contenant toutes les pièces de la demande telle que l'uri du serveur-le nom et la demande de la méthode. L'application va ensuite traiter la demande et en fonction de la demande de générer une réponse. Une réponse est représentée comme une carte contenant les clés suivantes: le statut, les en-têtes et le corps. Ainsi, une simple application ressemblerait à:
Une autre partie de l'Anneau est la notion de middle-ware. C'est le code qui se trouve entre le gestionnaire et les demandes entrantes et/ou sortantes de réponse. Certains construite en middle-ware comprennent des séances et stacktrace. La session middle-ware va ajouter un :la clé de session à la demande de la carte qui contient toutes les informations de la session de l'utilisateur qui fait la demande. Si l' :la clé de session est présent dans la réponse de la carte, il sera stocké pour la prochaine requête formulée par l'utilisateur actuel. Alors que la trace de la pile middle-ware permettra de saisir toutes les exceptions qui se produisent pendant le traitement de la demande et de générer une trace de la pile qui est renvoyé à la réponse, si aucune des exceptions.
Travailler directement avec l'Anneau peut être fastidieux, si Compojure est construit sur le haut de l'Anneau abstraction des détails. L'application peut maintenant être exprimé en termes de routage de sorte que vous pouvez avoir quelque chose comme ceci:
Compojure est toujours de travailler avec la demande/réponse de cartes de sorte que vous pouvez toujours y accéder en cas de besoin:
Dans ce cas, le {uri :uri} partie accède à l' :uri clé dans la demande de carte et jeux de uri à cette valeur.
La dernière composante est Le hoquet qui permet de générer le code html plus facile. Les différentes balises html sont représentés sous forme de vecteurs avec 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 à une option de la carte."<a href='/login'>Log In Page</a>"
devient[:a {:href "/login"} "Log In Page"]
. Voici un petit exemple d'utilisation d'un modèle pour générer le code html.Voici un lien vers une ébauche de certains documents, en cours de rédaction par l'auteur de compojure que vous pourriez trouver utiles: Compojure Doc
Il y a aussi "Noir" (http://www.webnoir.org/), qui est une nouvelle Clojure framework web (si nouveau les docs ne sont pas encore là). Venant de Django/Rails, je creuse la simple syntaxe et c'est assez maigre.
Envisager la Luminus framework web. Je n'ai pas d'affiliation, mais ont entendu de bonnes choses à nos amis que je respecte.
Mes cours à la bibliothèque sur le web est maintenant yada.
Si vous êtes commencer juste dehors, l'introduction de serveur est
Compojure
. Je vois cela comme uneapache
de serveurs web dans le Clojure monde (dans ce cas, yada/aleph serait nginx). Vous pouvez utiliserLuminus
comme un modèle. Il y a des variantes, commecompojure-api
.J'ai essayé ou
Plot
et a été globalement satisfaits avec elle. Je ne prétends pas maîtriser, mais il est agréable de syntaxe, se sent très cohérent, et il semblerait qu'il n'ont de grandes performances. Il est également soutenu parCognitect
(le Clojure/Datomic société où Rich Hickey œuvres).J'ai trouvé
Aleph
de présenter une intéressante abstraction, et intégré dans la contre-pression qui semble intéressant. Je n'ai pas encore jouer avec elle, mais c'est définitivement sur ma liste.Après avoir joué un peu avec de différents serveurs web, voici mon petit Pro/Cons liste :
Réponse courte : jetez un oeil à Luminus démarrer rapidement, peut-être passer à autre chose que de l'évolution de vos besoins (Yada peut-être).
Compojure
Pros (1):
Contre (2):
Piédestal
Pros (3):
Cons (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 elle, notamment en raison du manque de documentation. Il semble intéressant, et très performant.
Pros (2):
Contre (1):
Immutant
Remarque : je n'ai pas joué avec elle.
Pour :
Contre :
Catacumba
Remarque : je n'ai pas joué avec elle, bien que la documentation semble excellent. Je suis probablement en faire l'essai suivant. Il y a des exemples de chat projets qui semblent intéressants, leur forte utilisation de protocoles de me rebuter au premier abord comme un novice Clojure dev.
Pros (6):
Contre (2):
Note : un référence de Clojure serveurs web est disponible, si les performances brutes est tout ce qui compte.
Ces jours Piédestal est un cadre en valeur un regard. C'est un serveur-côté cadre qui s'appuie sur le dessus de Anneau, mais aussi de libérer de la demande entrante à partir du thread initial en étant capable de mettre en pause et de reprendre la demande en question (sinon, une demande lente en fait bloc serverthread). Peut-être comme une sorte de JavaBean.
Autres frais de cadres sont hoplon.io et David Nolen est Om (basé sur Réagir)
Webjure, un cadre de programmation pour Clojure.
Caractéristiques: servlet Dispatch des appels Clojure fonctions. Dynamique de génération HTML. Requête SQL interface (via JDBC).
Cette réponse est conçu comme un espace réservé pour Webjure de l'information.
Compojure est ce que j'ai utilisé pour réaliser une petite application de blog. Il est calqué sur Sinatra, ce qui est un minimum, la lumière-poids framework web Ruby. J'ai principalement utilisé le routage, ce qui est juste comme frank Sinatra. Il ressemble:
Il n'y a pas ORM ou de templating de la bibliothèque, mais il a des fonctions qui transforment les vecteurs en HTML.
Vous pouvez également avoir regarder ces cadres (prises de disclojure/projets):
Il y a aussi une autre question connexe sur Stack Overflow: Mature Clojure frameworks web?
Disclaimer: je suis l'auteur.
J'ai mis en place un leiningen modèle qui combine luminusweb de châtaigne et de modèles.
Ainsi, vous obtenez quelque chose que vous pouvez construire clojure code avec et clojurescript code pour l'avant et l'arrière-plan.
En outre, il offre à l'utilisateur une gestion plus simple de CRUD génération et un peu plus agréable pour les nantis: https://github.com/sveri/closp
Je vais me jeter dans mes deux cents pour Conduit, également à partir de @weavejester, le responsable de Compojure et de l'Anneau.
À la base, il apporte Composant et l'Anneau routeur sous un même toit. Raisons pour lesquelles j'ai utiliser du ruban:
Principales caractéristiques:
Remarque: Il va sans dire, mais pour le bénéfice du développement web, les nouveaux arrivants, comme la plupart des Clojurey choses Conduit nécessite une solide compréhension de Clojure la langue. Je recommande également la lecture sur le Composant en premier.
Sur une autre note plus personnelle, j'ai été en utilisant un Conduit dans plusieurs applications de production pendant plus d'un an maintenant et je suis très heureux avec elle.
vous pouvez également essayer de Clojure sur les Bobines, les http://github.com/zubairq/coils - disclaimer: je suis l'auteur
Un autre fait intéressant serveur web est Http-kit. Il a de bonnes performances et est l'anneau conforme, et a un support pour les WebSockets ainsi. Il est fait principalement en clojure, et manque parfois des choses étranges dans Jetty/Tomcat.
Il est facile de bricoler avec.
Recadrer et à l'om.prochaine probablement ce que vous cherchez.
Arachne est un nouveau venu framework web.
Citant le site description:
Il a un
campagne kickstarter
prétendant offrir une "prise en main" expérience similaire de Rails. Il est
développé par un Cognitect.
Ici est
une bonne discussion à ce sujet avec l'auteur de Luminus (yogthos).
J'ai été en utilisant Libérateur avec succès dans la production pendant un certain temps maintenant. C'est un grand cadre, si vous voulez juste l'os à nu par exemple, si vous êtes en train de construire un service web RESTful ou quelque chose de similaire. Il s'agit essentiellement d'un wrapper pour l'anneau et compojure et rend une décision graphique lors de la validation des demandes entrantes. Il est également extrêmement rapide comparé à d'autres plus volumineux frameworks web. Si vous voulez commencer quelque part très vite et lentement à construire puis Libérateur est un excellent choix.