Ich nehme an, dies ist eine seltsame Frage für die große Mehrheit der Programmierer, die täglich mit Java arbeiten. Ich nicht. Ich kenne Java-the-language, weil ich an Java-Projekten gearbeitet habe, aber nicht Java-the-world. Ich habe in Java nie eine Web-App von Grund auf neu erstellt. Wenn ich es mit Python, Ruby machen muss, weiß ich, wohin ich gehen soll (Django oder Rails), aber wenn ich eine Webanwendung in Clojure erstellen möchte, nicht weil ich gezwungen bin, in einer Java-Welt zu leben, sondern weil ich mag die Sprache und ich möchte es versuchen, welche Bibliotheken und Frameworks soll ich verwenden?
216
Antworten:
Das mit Abstand beste Clojure-Webframework, auf das ich bisher gestoßen bin, ist Compojure: http://github.com/weavejester/compojure/tree/master
Es ist klein, aber leistungsstark und hat eine wunderschön elegante Syntax. (Es verwendet Jetty unter der Haube, aber es verbirgt die Servlet-API vor Ihnen, es sei denn, Sie möchten es, was nicht oft der Fall ist.) Schauen Sie sich die README-Datei unter dieser URL an, laden Sie einen Schnappschuss herunter und beginnen Sie zu spielen.
quelle
Compojure ist kein vollständiges Framework mehr für die Entwicklung von Webanwendungen. Seit der Veröffentlichung von 0.4 wurde compojure in mehrere Projekte aufgeteilt.
Ring bietet die Grundlage, indem der HTTP-Anforderungs- und Antwortprozess abstrahiert wird. Ring analysiert die eingehende Anfrage und generiert eine Karte, die alle Teile der Anfrage wie uri, Servername und Anforderungsmethode enthält. Die Anwendung verarbeitet dann die Anforderung und generiert basierend auf der Anforderung eine Antwort. Eine Antwort wird als Karte dargestellt, die die folgenden Schlüssel enthält: Status, Überschriften und Text. Eine einfache Anwendung würde also so aussehen:
Ein weiterer Teil von Ring ist das Konzept der Mittelware. Dies ist Code, der sich zwischen dem Handler und der eingehenden Anforderung und / oder der ausgehenden Antwort befindet. Einige integrierte Middleware-Funktionen umfassen Sessions und Stacktrace. Die Sitzungs-Middleware fügt der Anforderungszuordnung einen: Sitzungsschlüssel hinzu, der alle Sitzungsinformationen für den Benutzer enthält, der die Anforderung stellt. Wenn der Sitzungsschlüssel: in der Antwortzuordnung vorhanden ist, wird er für die nächste Anforderung des aktuellen Benutzers gespeichert. Während der Stack-Trace Middleware alle Ausnahmen erfasst, die während der Verarbeitung der Anforderung auftreten, wird ein Stack-Trace generiert, der als Antwort zurückgesendet wird, wenn Ausnahmen auftreten.
Die direkte Arbeit mit Ring kann mühsam sein, daher baut Compojure auf Ring auf und abstrahiert die Details. Die Anwendung kann jetzt als Routing ausgedrückt werden, sodass Sie Folgendes haben können:
Compojure arbeitet weiterhin mit den Anforderungs- / Antwortzuordnungen, sodass Sie bei Bedarf jederzeit darauf zugreifen können:
In diesem Fall greift der Teil {uri: uri} auf den Schlüssel: uri in der Anforderungszuordnung zu und setzt uri auf diesen Wert.
Die letzte Komponente ist Hiccup, was das Generieren des HTML erleichtert. Die verschiedenen HTML-Tags werden als Vektoren dargestellt, wobei das erste Element den Tag-Namen darstellt und der Rest der Hauptteil des Tags ist.
"<h2>A header</h2>"
wird[:h2 "A Header"]
. Die Attribute eines Tags befinden sich in einer optionalen Zuordnung."<a href='/login'>Log In Page</a>"
wird[:a {:href "/login"} "Log In Page"]
. Hier ist ein kleines Beispiel mit einer Vorlage zum Generieren des HTML.Hier ist ein Link zu einem groben Entwurf einiger Dokumentationen, die derzeit vom Autor von compojure verfasst werden und die Sie möglicherweise hilfreich finden: Compojure Doc
quelle
Es gibt auch "Noir" ( http://www.webnoir.org/ ), ein neues Clojure-Webframework (so neu, dass die Dokumente noch nicht vorhanden sind). Ich komme aus Django / Rails und mag die einfache, unkomplizierte Syntax, die ziemlich schlank ist.
quelle
Betrachten Sie das Luminus-Webframework . Ich habe keine Zugehörigkeit, aber gute Dinge von Freunden gehört, die ich respektiere.
quelle
Meine aktuelle Webbibliothek ist jetzt yada .
Wenn Sie gerade erst anfangen, ist der Einführungsserver
Compojure
. Ich sehe es als denapache
von Webservern in der Clojure-Welt (in diesem Fall wäre yada / aleph nginx). Sie könnenLuminus
als Vorlage verwenden. Es gibt Varianten davon, wiecompojure-api
.Ich habe es versucht
Pedestal
und war weltweit zufrieden damit. Ich behaupte nicht, es zu beherrschen, aber es hat eine angenehme Syntax, fühlt sich sehr zusammenhängend an und sieht aus, als hätte es eine großartige Leistung. Es wird auch vonCognitect
(der Firma Clojure / Datomic, in der Rich Hickey arbeitet) unterstützt.Ich fand
Aleph
eine interessante Abstraktion, und der eingebaute Gegendruck scheint interessant zu sein. Ich habe noch nicht damit gespielt, aber es ist definitiv auf meiner Liste.Nachdem ich ein bisschen mit verschiedenen Webservern gespielt habe, ist hier meine kurze Pro / Cons-Liste:
Kurze Antwort: Schauen Sie sich Luminus an, um schnell loszulegen, und gehen Sie vielleicht zu etwas anderem über, wenn sich Ihre Bedürfnisse ändern (Yada vielleicht).
Compojure
Vorteile (1):
Nachteile (2):
Sockel
Vorteile (3):
Nachteile (4):
Aleph
Pro (3):
Nachteile (1):
Yada
Pro (3):
Nachteile (1):
HttpKit
Pro (2):
Nachteile (2):
Nginx-Clojure
Hinweis: Ich habe nicht damit gespielt, hauptsächlich wegen der fehlenden Dokumentation. Es sieht jedoch interessant und sehr performant aus.
Vorteile (2):
Nachteile (1):
Immutant
Hinweis: Ich habe nicht damit gespielt.
Vorteile:
Nachteile:
Catacumba
Hinweis: Ich habe nicht damit gespielt, obwohl die Dokumentation ausgezeichnet aussieht. Ich werde es wahrscheinlich als nächstes versuchen. Es gibt Beispiel-Chat-Projekte, die interessant aussehen. Ihre starke Verwendung von Protokollen hat mich zunächst als unerfahrenen Clojure-Entwickler abgeschreckt.
Vorteile (6):
Nachteile (2):
Hinweis : Ein Benchmark für Clojure-Webserver ist verfügbar, wenn nur die Rohleistung zählt.
quelle
In diesen Tagen Pedestal ist ein Framework einen Blick wert. Es handelt sich um ein serverseitiges Framework, das auf Ring aufbaut , aber auch die eingehende Anforderung vom ursprünglichen Thread befreit, indem diese bestimmte Anforderung angehalten und fortgesetzt werden kann (andernfalls blockiert eine langsame Anforderung tatsächlich diesen Serverthread). Vielleicht wie eine JavaBean.
Andere coole Frameworks sind hoplon.io und David Nolens Om (basierend auf React)
quelle
Webjure , ein Webprogrammierframework für Clojure.
Features: Dispatch Servlet ruft Clojure-Funktionen auf. Dynamische HTML-Generierung. SQL-Abfrageschnittstelle (über JDBC).
Diese Antwort ist als Platzhalter für Webjure-Informationen gedacht.
quelle
Mit Compojure habe ich eine winzige Blogging-Anwendung erstellt. Es basiert auf Sinatra, einem minimalen, leichten Webframework für Ruby. Ich habe meistens nur das Routing verwendet, das genau wie das von Sinatra ist. Es sieht aus wie:
Es gibt keine ORM- oder Vorlagenbibliothek, aber es gibt Funktionen, die Vektoren in HTML umwandeln.
quelle
Sie können sich auch diese Frameworks ansehen (entnommen aus Disclojure / Projekten ):
Es gibt noch eine weitere verwandte Frage zum Stapelüberlauf: Reife Clojure-Webframeworks?
quelle
Haftungsausschluss: Ich bin der Autor.
Ich habe eine Leiningen-Vorlage zusammengestellt, die Luminusweb- und Kastanien-Vorlagen kombiniert. So erhalten Sie etwas, mit dem Sie Clojure-Code und Clojurescript-Code für Front- und Backend erstellen können.
Darüber hinaus bietet es Benutzerverwaltung sowie eine einfache CRUD-Generierung und einige weitere Kleinigkeiten: https://github.com/sveri/closp
quelle
Ich werde meine zwei Cent für Duct einwerfen , ebenfalls von @weavejester , dem Betreuer von Compojure und Ring.
Im Kern vereint es Component und Ring Router unter einem Dach. Gründe, warum ich Duct benutze:
Hauptmerkmale:
Hinweis: Es versteht sich von selbst, aber zum Nutzen der Webentwicklung benötigen Neulinge wie die meisten Clojurey-Dinge, die Duct benötigt, ein solides Verständnis der Sprache Clojure. Ich empfehle auch, zuerst über die Komponente zu lesen.
Ich persönlich verwende Duct seit über einem Jahr in mehreren Produktionsanwendungen und bin äußerst zufrieden damit.
quelle
Sie können auch Clojure on Coils ausprobieren, http://github.com/zubairq/coils - Haftungsausschluss: Ich bin der Autor
quelle
Ein weiterer interessanter Webserver ist das HTTP-Kit . Es hat eine gute Leistung, ist ringkonform und unterstützt auch WebSockets. Es wird hauptsächlich in Clojure hergestellt und es fehlen einige der seltsamen Dinge in Jetty / Tomcat.
Es ist leicht zu basteln.
quelle
Reframe und om.next wahrscheinlich das, wonach Sie suchen.
quelle
Arachne ist ein Newcomer-Webframework. Zitieren der Beschreibung der Site:
Es gibt eine Kickstarter-Kampagne, die behauptet, ein "Erste Schritte" -Erlebnis ähnlich wie bei Rails zu bieten. Es wird von einem Cognitect entwickelt.
Hier ist eine gute Diskussion darüber mit dem Autor von Luminus (Yogthos).
quelle
Ich benutze Liberator seit einiger Zeit erfolgreich in der Produktion. Es ist ein großartiger Rahmen, wenn Sie nur das Nötigste wollen, z. B. wenn Sie einen RESTful-Webdienst oder ähnliches erstellen. Es ist im Wesentlichen ein Wrapper für Ring und Compojure und bietet ein Entscheidungsdiagramm bei der Validierung eingehender Anforderungen. Es ist auch extrem schnell im Vergleich zu anderen sperrigeren Web-Frameworks. Wenn Sie irgendwo schnell und langsam anfangen möchten, ist Liberator eine gute Wahl.
quelle