
(Foto: Andreas Gamst Laursen / Shutterstock)
Viele Lower-Level-Node.JS-Frameworks wie Express, Koa, Fastify und Hapi eignen sich zwar für fast alles – sofern man Lust hat, auch fast alles selber zu orchestrieren und zu bauen. In Express, dem populärsten davon, werden Entwicklern zum Beispiel nur Konzepte für Routing und das Handling von HTTP-Requests an die Hand gegeben. Das sorgt für Freiheit, aber auch dafür, dass man sich die restliche Architektur selbst ausdenken muss. In Rails gibt es API und klar definierte Richtlinien für die Handhabung von Projektstruktur, Konfiguration, Database-Layer, Authentifizierung, Logging, Error-Handling und sogar Job-Queues. Viele Higher-Level-Frameworks für Node.JS – zum Beispiel Sails oder NestJS – kopieren die MVC-Struktur von Rails. MVC steht für eine aus den Komponenten Model, Controllers und Views bestehende Software-Architektur.
Services und Hooks als Basis
Das Design von Feathers basiert auf Services und sogenannten Hooks. Das Service-Layer könnt ihr euch als ein gemeinsames Interface vorstellen, das von verschiedenen Clients – also zum Beispiel dem Interface eurer Web-App, dem Kommandozeilen-Tool oder Integration-Gateways – gemeinsam genutzt wird. Diese Clients unterscheiden sich in ihrer Verwendung, interagieren aber oft gemeinsam mit einer App. Dafür braucht ihr Routes, HTTP-Requests, Controller und Response-Handler. Das Service-Layer vereint die Logik des Zusammenspiels in einem gemeinsamen Interface – das bedeutet: kein Routing, keine Response-Handler, keine HTTP-Requests, keine Controller – und am Ende weniger komplizierten Code. Services sind einfache JS-Objekte mit einer oder mehreren Methoden, die wie Express-Middleware registriert werden können. Workflows sind aneinandergereihte sogenannte Hooks oder Middleware-Funktionen, die vor, nach oder innerhalb der Service-Methoden registriert werden können. Datenfluss und Fehlermeldungen werden durch sogenannte Continuations gesteuert – das Ergebnis einer Funktion wird an die nächste weitergereicht. Man nennt diesen Programmierstil auch Continuation-Passing-Style, in Abgrenzung zum sogenannten Direct-Style, bei dem Ergebnisse nach Ausführung einer Funktion wieder an den Aufrufer zurückgegeben werden. Hooks sind transportunabhängig – es spielt keine Rolle, ob sie über HTTP(S), Socket oder Primus aufgerufen wurden – und service-agnostisch, sie können mit jedem Dienst verwendet werden. Mittels Hooks können zum Beispiel Validierung, Logging oder der Versand von Notifications geregelt werden. So bleibt die Flexibilität der Logik eurer Anwendung gewahrt. Das Gute daran: Sie ist leicht zu testen und die Codebase übersichtlich und einfach zu debuggen. Aufgrund der Service-Layer-Architektur könnt ihr eure App einfach zu einer REST-API oder Websocket-Real-Time-API machen oder Protokolle wie HTTP2 oder GraphQL hinzufügen, ohne etwas am Code eurer App zu verändern.
Das ist neu
TypeScript-Unterstützung
Feathers’ Core-Libraries und Database-Adapter können ab jetzt auch mit TypeScript verwendet werden. Im offiziellen Guide und in der API-Doku findet ihr alle Beispiele jetzt auch in TypeScript. Wer will, kann natürlich bei JavaScript bleiben.
Neuer Authentifizierungsmechanismus
Die neue User-Authentifizierung in Feathers 4 bietet protokollunabhängige Authentifizierungsstrategien, die ihr nach euren Wünschen customizen könnt. Sie unterstützt verschiedene Login-Verfahren wie zum Beispiel oAuth, Passwort/Username und JSON Web Tokens.
Neue Homepage und überarbeitete Dokumentation
Wir kennen die alte Doku nicht – deshalb: kein Vergleich. Der Feathers Guide ist auf jeden Fall verständlich geschrieben und macht sogar Spaß. Mit dem Tutorial steht eure erste REST-API in nur 15 Minuten, für eine Chat-Funktion mit REST- oder Websocket-API inklusive Frontend, Unit Tests, Nutzerregistrierung und GitHub-Login müsst ihr etwa zwei Stunden einplanen.
Zukunftspläne
Seit dem Release von Feathers 1.0 sind mittlerweile knapp fünf Jahre vergangen. Das Open-Source-Framework will in der Tradition anderer, eher minimalistischer Frameworks wie Express oder Koa seinen Nutzern auch künftig eine Basis bieten, die sich beliebig an deren Anforderungen anpassen lässt. Ein Großteil der für das nächste Release geplanten Updates werden Plugins und Addons sein, durch die ihr eure Umgebung beliebig erweitern könnt. In Planung ist eine an Koa angelehnte Hook-Systematik, die ihr mit jeder beliebigen JavaScript– oder TypeScript-Methode verwenden könnt. Der neue Authentifizierungsmechanismus von Version 4 ermöglicht es euch, relativ einfach neue Transport-Adapter hinzuzufügen. Eine KoaJS-Framework-Integration und ein nativer HTTP- und HTTP2-Adapter sind bereits in Arbeit.
Fazit
Sieht vielversprechend aus. Wer Feathers bisher nicht kannte, könnte spätestens mit Version 4 einen Blick darauf werfen. Besonders ansprechend finden wir die Modularität und die klare Projektstruktur, die aus der Verwendung des Frameworks resultiert. Eventuell könnte die Open-Source-Lösung sogar als Alternative zu kostenpflichtigen BaaS-Angeboten wie Firebase in Erwägung gezogen werden. Der aktuelle Namensgeber ist übrigens eine Krähe.
Ein Link zu dem Produkt über das ihr schreibt sollte selbstverständlich sein?!
Warum setzt ihr nur Querverweise auf eigene Artikel?
Feathers 4 werde ich mir mal anschauen, Danke für den Tipp.