Vom CMS zur App: Headless ZMS
Seit einiger Zeit wird ein neuer Ansatz für das Web-Publishing diskutiert: Headless CMS. Dabei handelt es sich um ein CMS, dem quasi der Kopf abgetrennt wurde, gemeint ist der Publisher oder Renderer. Es fehlt also diejenige Komponente, die den über den Browser publizierten HTML-Code assembliert.
Selbstverständlich braucht auch ein Headless CMS einen Renderer - nur dieser ist eben nicht mehr unmittelbarer Bestandteil des CMS, sondern wird von einem dritten System geliefert. Tatsächlich kann jedes CMS in ein Headless-CMS verwandelt werden, weil natürlich auch das Headless-CMS eine Endstrecke für die Inhalte anbietet - nur in diesem Fall ist es eben JSON-Code und kein HTML. Der publizierte JSON-Code wird in der Regel von einer Single-Page-App oder Progressive-Web-App (PWA) gezogen, und dann per JavaScript in einen HTML5-DOM gerendert. Die Template-Mimik wird also nicht mehr "im CMS" programmiert, sondern mit Hilfe des eingesetzten Frontend-Frameworks (z.B. vue.js, angular, react). D.h. das CMS fokusiert sich also auf die klassischen Management-Aufgaben: Modelling, Editing, Workflow und Content-Organisation.
Im Folgenden wird dargestellt, wie man auf einfache Weise das Python-basierte und quelloffene Web-Publishing-System ZMS zu einem Headless-CMS macht. Hintergrund für den realen Einsatz bei einer Großforschungs-Einrichtung ist, dass aus der Projekthistorie zwar ein spezieller Publisher für Gesundheitsinformationen existierte, dieser aber nicht die redaktionellen Projekt-Anforderungen für einen Rollout in die Breite abbilden kann. Das betrifft neben dem Workflow insbesondere die multlinguale Multiclient-Produktion, sowie die wahlfreie Inklusion von Standard-Contents für die verschiedenen Mandanten. Für die Autoren ist also ein klassisches Multimandanten-Redaktionsystem gefordert - das wiederum ZMS bestens abbilden kann.
Um ZMS headless zu machen, sind genau zwei Erweiterungen erforderlich:
1. JSON-Iterator: transformiert ZMS-Content-Objekte in einen JSON-Strom
2. JSON-Publishing-Action: erzeugt ein GUI (Maske) für das Publizieren des Inhalts in die externe Komponente
Die folgenden Screen-Bilder zeigen die Konfiguration des Headless-ZMS mit dem ZMS-JSON-Publisher. Damit man auch schon ohne externe Komponente entwickeln kann, beinhaltet die JSON-Publisher-Lib neben dem eigentlich Objekt-Iterator zum Erzeugen des JSON-Stroms noch zusätzlich eine SQLite-DB, die als Publishing-Ziel fungiert und den erzeugten JSON-Strom verarbeitet, in diesem Fall in Datenbank-Felder fraktioniert und speichert,
7. Der Empfänger der Inhalte ist im Test-Szenario eine SQLite.Datenbank. Hier lässt sich validieren, ob Transformation und Transfer im Detail schemakonform funktionieren. Das Bild zeigt die generische ZMS/Zope-Ansicht auf das SQL-Interface.
Fazit
Es ist sehr einfach, ZMS zum App-Publisher zu machen: dazu ist lediglich das Modul JSON-Publisher zu importieren. Neben dem bekannten Ausgabe-Schwergewicht XML steht damit auch für dessen schlanke Schwester JSON eine frei anpassbare Lösung bereit, die klassische CMS-Aufgaben in modernen, Frontend-getriebenen Publishing-Szenarien skalierbar und flexibel - und alles andere als kopflos - erledigt.