Soll ich ein neues Web Framework verwenden?
Der Auslöser und Überlegungen zum Umstieg auf ein neues Node.js Web Framework.
Die Situation
Vor einigen Wochen stolperte ich über einen Artikel zur Popularität von Node Frameworks.
Dort weden die wohl 11 bekanntesten Web Frameworks nach verschiedenen Gesichtspunkten gegenübergestellt.
Zusammengefasst ist wohl diese Grafik am bedeutensten...
Macht euch aber ein eigenes Bild im verlinkten Artikel!
Die Express Basis ist klar. Express ist das älteste und bekannteste Framework und praktisch das Synonym von NodeJS und Web.
Daneben scheinen fastify, hapi, koa und nest sehr beliebt zu sein.
Mein Background
Ich bin ja Verfechter des REST-Prinzips. Die Basis ist eine gute REST-API. Darauf können dann verschiedene Frontends (Web, Nativ, Robots, usw.) zugreifen und die bereitgestellten Daten nutzen.
So kam ich über Perl, PHP, Java vor vielen Jahren zu Node.js. Damals viel die Entscheidung nicht für das schon verbreitete Express aus, sondern zu Gunsten restify, welches ich nun seither verwendete.
Wichtig ist für mich ein guter Support von TypeScript im Framework.
Was ist mit restify
Mich hat überrascht, dass restify in der Auswertung so abgeschlagen im Mittelfeld landet.
Wie kommt das?
Das ist ein gutes, stabiles Framework. Es ist schnell und ressourcenschonend.
Ist es zu speziell für REST Anwendungen? Eine Antwort habe ich nicht.
Warum wechseln?
Das restify Framework ist praktisch genauso alt wie express. Beides wird zwar sehr aktiv weiter entwickelt, aber gewisse Design-Grundlagen sind zu Beginn festgelegt worden.
Eigentlich habe ich keinen Grund zu wechseln. Ich möchte nur über den Tellerrand schauen.
Der Fall koa
koa ist als Successor von express gestartet. Die Webseite ist mir zu schlicht und gleichzeitig unübersichtlich. Damit wurde und werde ich nicht warm.
Die Geschwindigkeit
fastify führt als Argument die eigene Geschwindigkeit auf und hat Benchmarks zum Vergleich mit einigen anderen Frameworks gemacht.
Danach würde ich mir mit hapi gegenüber restify einen Nachteil einhandeln.
Der Größenvergleich
Eine schnelle Basisinstallation mit npm bringt folgende Framework Größen in den Vergleich:
- express 3 MB
- fastify 6 MB
- hapi 2 MB
- nest 26 MB
- restify 28 MB
Das kann aber nur ein Anhaltspunkt sein, falls man schlicht bleiben möchte, da die implementierten Features sich doch zu stark unterscheiden. Bei den ersten 3 Frameworks müsste noch vieles über weitere Dependencies nachgeholt werden um Features von nest und restify zu bekommen.
Der Fall hapi
Obwohl hapi auf den ersten Blick einen guten Eindruck macht und ein schönes Ökosystem zu haben scheint, wiegt mir der Geschwindigkeitsaspekt zu stark. Es fällt für meine Auswahl heraus.
Der Fall fastify
fastify ist von Hause aus schlicht aber gut erweiterbar. Es hat ein sehr interessantes Ökosystem und viel für restify selbst Implementiertes wird bei fastify über Plugins als BestPractice zur Verfügung gestellt.
Es hat einen LongTermSupport Plan und liefert TypeScript-Typings. Async/Await yes! Das Routing geht auch im restify-Stil. Dann: Validation mit ajv oder joi; ReverseProxy-Support;
Ok, das sieht alles ziemlich gut aus. Mal schauen was nest dazu sagt ;-)
Der Fall nest
Bei nest sticht sofort ins Auge, dass es ein vollständiges TypeScript Framework ist. Es ist aber eindeutig das "kompletteste" Framework im Artikel. Setzt dabei auf express oder optional fastify auf. Neben REST, könnte für Microservices und Websockets verwendet werden. Dabei steht DRY im Vordergrund. Außerdem bringt es eingebundenen GraphQL Support.
nest stellt in seiner Dokumentation vollständige Antworten und BestPractices für viele Belange einer WebApplikation zur Verfügung. Auch zum Abdecken der üblichen Sicherheitsrisiken eine WebApplikation gibt es Vorschläge und Lösungen.
Das macht einen super Eindruck.
Aktivität der Community
Es tauchen immer Fragen auf, die schneller beantwortet sind, wenn sie schon jemand davor gestellt hat oder man nicht den SourceCode durchsuchen muss.
Daher ist die Community eines verwendeten Frameworks sehr wichtig für den Erfolg eines Projektes.
Hier hat natürlich express ganz weit die Nase vorne. Aber auch die anderen 4 betrachteten Frameworks haben ausreichend Verbreitung und Kommunikation.
Die Github Projekte sind sehr aktiv.
And the Winner is
Für mich hat das Rennen momentan nest gemacht.
Ich werde mein Projekt mit diesem Framework starten und mich einarbeiten.
Status Update (19.10.2018)
Siehe in meinen neuen Artikel warum ich Nest so schnell den Rücken zukehre.