Welches Webframework soll ich in Clojure verwenden?

In diesem Handbuch beschreibe ich die verfügbaren Webframework-Optionen für Clojure und gebe meine Empfehlungen.

Rollen Sie Ihren eigenen Stapel aus empfohlenen Bibliotheken (in Kürze), wenn Sie gerade lernen. Es wird der beste Weg sein, um zu verstehen, wie alles funktioniert.

Verwenden Sie Pedestal, wenn Sie eine produktionsgeprüfte Grundlage für die Erstellung Ihrer Anwendung wünschen.

Verwenden Sie Luminus, wenn Sie die Flexibilität haben möchten, Ihren eigenen Stack ohne die damit verbundene Arbeit zu rollen.

Einführung

Eine Frage, die mir von Anfängern in Clojure häufig gestellt wird, lautet: „Welches Webframework soll ich verwenden?“ Das ist eine gute Frage. In Python gibt es Django. In PHP, Drupal. Und natürlich gibt es in Ruby den König aller Web-Frameworks, Ruby on Rails. In Clojure ist dies jedoch eine schwer zu beantwortende Frage. Selbst die Entscheidung, was ein Framework und was eine Bibliothek ist, kann schwierig sein. Wir werden uns zuerst damit befassen müssen.

Was ist (und was nicht) ein Web-Framework

Für die Zwecke dieses Handbuchs definieren wir ein Web-Framework als eine Sammlung von Code und Abhängigkeiten, die einen ganzheitlichen Ansatz zum Erstellen einer Webanwendung bieten. Diese Definition schließt mehrere Bibliotheken aus, die allgemein als Frameworks bezeichnet werden, wie Compojure und Ring , da diese für sich genommen keinen Ansatz bieten. Es gibt jedoch noch einige große Konkurrenten, die ich hier betrachte.

Da das Rolling Ihres eigenen Stacks in Clojure eine gängige Alternative zur Verwendung eines vorgefertigten Frameworks ist und als ganzheitlicher Ansatz betrachtet werden kann (nämlich das Erstellen Ihrer Anwendung aus vorhandenen Bibliotheken), berücksichtige ich dies auch in den Empfehlungen.

Empfehlungskriterien

Der Zweck dieses Leitfadens besteht darin, starke Empfehlungen für Web-Frameworks für unterschiedliche Anforderungen zu geben. Hier sind die Kriterien, die ich für jedes Framework untersuche:

Dokumentation

Verfügt das Framework über eine leicht verständliche Dokumentation? Ich suche nach Anfänger-Tutorials durch fortgeschrittene Themen.

Community

Eine große, aktive Community ist ein wichtiger Teil der Lebensfähigkeit eines Frameworks. Eine große Community kann Abhängigkeiten einfacher bereitstellen, auf dem neuesten Stand halten und eine vollständigere Lösung erstellen.

Reife

Das Alter eines Projekts und wie lange es in der Produktion an Großstandorten eingesetzt wird, ist ein weiterer wichtiger Faktor. Ich bevorzuge ältere Frameworks, die für wichtige Websites bereitgestellt wurden.

Webstandards

Neben den großen drei Websprachen (HTML, CSS und JavaScript) gibt es die Standards für das HTTP-Protokoll selbst und eine Vielzahl von „Best Practices“. Ich spreche von HTTP-Antwortcodes, Inhaltsverhandlung, CORS, WebSockets usw. Wie nutzt der Rahmen diese Standards? Wie verletzt es sie?

Ansatz

Da ein Framework einen ganzheitlichen Ansatz bieten muss, muss der Ansatz selbst berücksichtigt werden. Wie geht das Framework beim Erstellen einer Anwendung vor?

Bereitstellung

Wenn Ihre Anwendung bereit ist, muss sie bereitgestellt werden. Welche Bereitstellungsoptionen stehen zur Verfügung? Eine größere Vielfalt ist besser.

Sehr zu empfehlen

Es fühlt sich komisch an, das zu sagen, aber die beste Option für Anfänger ist immer noch, Ihre eigenen zu rollen. Das Rollen Ihres eigenen Stapels ist nicht so schwierig, wie es scheint. Sie können einen funktionalen Stack aus einer Handvoll Bibliotheken erstellen. Sehr oft haben die robusteren, für Sie erstellten Frameworks Hunderte von Entscheidungen für Sie getroffen, wie Sie den Stack erstellen, aber Sie müssen immer noch die Legion von Bibliotheken verstehen, die sie ausgewählt haben.

Abgesehen davon, dass es gut zum Lernen ist, gibt Ihnen das Rollen Ihrer eigenen die vollständige Kontrolle darüber, ob Sie eine bestimmte Funktion unterstützen oder nicht.

Der größte Nachteil ist, dass Sie viele Entscheidungen selbst treffen müssen. Es gibt viele Bibliotheken und die Auswahl unter ihnen kann schwierig sein. Ein Trost ist, dass es beim Zusammenstellen eigener Bibliotheken, zumindest in Clojure, relativ einfach ist, Bibliotheken zu wechseln, wenn Sie feststellen, dass eine für Sie nicht funktioniert.

Wenn Sie eine vollständigere Lösung wünschen (und dies auch tun werden), werden Sie, wenn Sie sie weiterhin selbst erstellen, zu etwas gelangen, das den robusteren Frameworks sehr ähnlich ist. Ich würde empfehlen, zu einer der anderen empfohlenen Lösungen zu wechseln, anstatt ein eigenes komplettes Framework zu erstellen. Glücklicherweise ist das Umschalten zwischen ihnen einfach, da sie alle nach demselben Standard arbeiten.

Pedestal (GitHub)

Pedestal ist eine ausgereifte Bibliothek, die ursprünglich von Cognitect für die Entwicklung moderner Streaming-Webanwendungen entwickelt wurde. Es basiert auf langlebigen Verbindungen, mit denen Sie im Laufe der Zeit Daten vom Server zum Client streamen können. Um diese Funktion zu unterstützen, haben wir die Idee von Interceptors erfunden, mit denen Sie Pipelines asynchroner Schritte definieren können, die Ihre Anforderung durchläuft.

Ich empfehle es, weil es ausgereift ist, eine aktive Community hat, eine Vielzahl von Bereitstellungsoptionen unterstützt und Webanwendungen gut unterstützt. Die beiden Gegenstöße sind die Dokumentation und das Fehlen eines einheitlichen Ansatzes. Es hat einige Anleitungen, die Sie durch grundlegende Hallo, Welt! Applications. Aber ich habe nichts gefunden, was erklären würde, wie eine vollständige Bewerbung zusammengestellt werden sollte. Der Ansatz, den Podest erleichtert, besteht darin, die niedrigen Grundlagen bereitzustellen, die Sie benötigen, wie ein Sockel, auf dem Sie etwas höher stehen können, als von vorne zu beginnen. Natürlich ist diese Vorarbeit wichtig, aber dem Entwickler bleibt viel übrig, um sich selbst zu wählen und zu bauen. Zum Beispiel hat es absichtlich keine HTML-Template-Lösung. Es nennt das „API-first“. Ich würde erwarten, dass ein vollständiges Webframework eine Lösung zum Erstellen von HTML enthält.

Trotz dieser Probleme empfehle ich Podest als solide und flexible Grundlage, auf der Anwendungen erstellt werden können.

Luminus (GitHub)

Luminus ist im Wesentlichen ein Vorlagenprojekt. Sie erstellen aus dieser Vorlage eine neue Webanwendung, und alles ist für Sie eingerichtet. Luminus bietet Ihnen einige Optionen für die Vorlage, aber im Allgemeinen besteht der Ansatz darin, die Auswahl für Sie zu treffen — manchmal werden eigene Bibliotheken bereitgestellt und manchmal vorhandene Bibliotheken verwendet. Wenn Ihr Projekt erstellt wird, haben Sie einen vollständigen Web-Stack, auf dem Sie nach Belieben aufbauen oder ändern können. Der Hauptvorteil ist die einheitliche Vision, die die Auswahl der Bibliotheken leitete.

Luminus bietet alles, was Sie zum Schreiben von Webanwendungen benötigen. Sie erhalten alles von Routen über die Sitzungsverwaltung bis hin zur ClojureScript-Kompilierung und Datenbankmigrationen. Alles ist vorkonfiguriert, sodass Sie sofort mit Ihrer Anwendungslogik beginnen können. Stellen Sie sich etwas wie die Bibliotheken und Konfigurationen vor, die Sie in 10 Jahren Arbeit an einer Anwendung selbst erstellen würden. Möglicherweise benötigen Sie es zunächst nicht, aber schließlich möchten Sie unter anderem Sicherheit, Protokollierung und Internationalisierung. Luminus gibt dir das mit einem Befehl.

Der Hauptnachteil von Luminus ist, dass viele der Bibliotheken direkt belichtet werden. Ja, das gibt Ihnen die Möglichkeit, sie nach Belieben zu konfigurieren. Es bedeutet aber auch, dass Sie viel zu verstehen haben, wenn Sie auf dem Standardverhalten aufbauen möchten. Zum Glück ist die Dokumentation Geschichte ausgezeichnet. Es gibt sogar ein Buch, das den empfohlenen Ansatz zum Erstellen einer Webanwendung mit Luminus dokumentiert.

Darüber hinaus gibt es es schon seit Jahren, wurde für große Anwendungen eingesetzt und verfügt über eine Vielzahl von Bereitstellungsoptionen.

Weitere bemerkenswerte Frameworks

Diese Frameworks sind für ihre innovativen Ansätze interessant.

Fulcro (GitHub)

Fulcro ist eine Fullstack-Lösung. Es verwendet React im Frontend, verfügt jedoch über ein vollständiges Datenmodell vom Client zur Datenbank. Wenn diese Art von vereinheitlichender Vision ansprechend ist, probieren Sie es aus. Es gibt eine ausgezeichnete Dokumentation und es wird immer noch aktiv entwickelt.

Duct

Duct ist eine Leiningen-Vorlage, mit der eine Webanwendung als Satz von Konfigurationen erstellt werden kann. Zum Beispiel ist Routing in Duct eine Konfiguration. Migration ist eine Konfiguration. Mit diesem vereinheitlichenden, datenorientierten Ansatz erstellen Sie eine Webanwendung, die deterministisch neu geladen werden kann. Der Rahmen scheint Traktion zu bekommen.

Tadam

Tadam hat eine Reihe vorhandener Bibliotheken konfiguriert und eine Standardverzeichnisstruktur erstellt, um das Schreiben einfacher Websites sehr einfach zu gestalten. Es ist noch neu, aber aktiv.

Coast on Clojure (GitHub)

Coast on Clojure bietet Ihnen eine vollständige Lösung (Datenbank zum Bereitstellen von HTML), während Sie sich darauf konzentrieren, die Dinge einfach zu halten.

Hoplon (GitHub)

Hoplon ist eine Fullstack-Lösung mit einem interessanten Ansatz. Der Frontend-Teil kompiliert ClojureScript und ermöglicht das Erstellen interaktiver Komponenten, die ein tabellenkalkulationsähnliches Datenflussmodell verwenden. Es kann eine Verbindung zum Backend herstellen, indem Funktionen aufgerufen werden, die Proxys von Funktionen auf dem Server sind. Dadurch können Sie die gesamte Routing-Situation umgehen. Die Entwicklung darauf ist langsam.

Nicht empfohlen

Diese Frameworks werden nicht empfohlen, da sie zu lange nicht aktiv entwickelt wurden und nie genug Traktion erhalten haben. Ich habe sie nicht auf technische Vorzüge hin bewertet, weil ich sie nicht allein aufgrund ihrer inaktiven Entwicklung empfehlen würde.

  • webnf
  • Clojure Onenote
  • joodoo
  • Datsys

Keine Frameworks

Diese Projekte werden oft als Frameworks bezeichnet, erfüllen jedoch nicht die Definition von „Bereitstellung eines ganzheitlichen Ansatzes zum Erstellen einer Webanwendung“. Ich habe sie hier nicht bewertet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.