Websites und Web-Anwendungen
Inhalt
Wenn man sich mit der Erstellung von Webseiten beschätigt, wird schnell klar, dass es je nach Art der Website ganz verschiedene Anforderungen und auch ganz verschiedene Ansätze zur Umsetzung dieser Anforderungen gibt. Zunächst muss man sich darüber klar werden, welcher Typ einer Website die eigenen Anforderungen und Vorstellungen am besten erfüllt. Mit "Typ" sind hier etwa
- Foren,
- Blogs,
- Webshops,
- statische Websites oder auch
- Web-Applikationen
gemeint. Für jeden Typ gibt es ganz unterschiedliche Möglichkeiten und Techniken zur Umsetzung. Für Foren, Blogs und meist auch für Webshops bietet es sich natürlich an, eine fertige Software einzusetzen. Aber sowohl für statische Websites als auch für Web-Applikationen stellt sich jeweils die Frage, mit welchem Ansatz man möglichst einfach und kostengünstig zu einem funktionsfähigen Webauftritt kommt. Foren, Blogs und Webshops sind natürlich auch nichts anderes als Web-Applikationen. Deren Anforderungen sind aber relativ einheitlich und können daher meist gut mit Standardsoftware erfüllt werden.
Statische Websites
Wie sieht es aber mit statischen Websites und Web-Applikationen aus, die nicht in ein festes Schema - wie Blogs oder Foren - passen? Zunächst zu den statischen Websites. Damit meine ich zum Beispiel die private Homepage, die Dokumentation zu einem Projekt oder auch eine Firmenwebsite, die Informationen in Form von (potentiell sehr vielen) html-Seiten anbietet.
Hier hängt es ganz wesentlich vom Umfang der Site ab, welche Technik man einsetzt. Bei einigen wenigen Seiten und einem anspruchslosen Layout kommt man vielleicht noch damit aus, die Seiten einzeln per Hand im Editor zu schreiben. Man wird sich jedoch schnell wünschen, dass man den Header und Footer, der auf jeder Seite fast gleich aussieht, nicht jedesmal neu schreiben oder per Copy & Paste aus einer anderen Seite übernehmen und anpassen muss. Dass läßt sich noch mit SSI beheben. Man schreibt den Header und Footer in eine eigene Datei und bindet diese mit einem include-Befehl in jede Webseite ein.
Aber auch dieser Ansatz stößt schnell an seine Grenzen, wenn man irgendwann dann doch etwas mehr dynamisch generierten Inhalt in seinen Seiten haben möchte, wie etwa einen kleinen Besucherzähler oder ein Feedback-Formular. Hier bieten sich Scriptsprachen an, etwa das weit verbreitete PHP oder ähnliches.
Aber auch mit der Verwendung von Skriptsprachen ist der Webmaster auf Dauer nicht glücklich. Sobald es etwas mehr Seiten werden, möchte man gerne eine hierarchische, baumförmige Struktur haben, in der die Seiten organisiert sind. Auch das Navigationsmenü soll auf jeder Seite so aussehen, dass man direkt erkennt, auf welchem "Pfad" man zu der aktuellen Seite gekommen ist. Nun kann man entweder wieder von Hand anfangen, jede Seite zu editieren, oder man ist schnell dabei, dass eigene kleine Webframework in der Skriptsprache seiner Wahl zu programmieren.
Content Management Systeme
Spätestens an dieser Stelle sollte man sich überlegen, ob man nicht auf ein geeignetes Content Management System (CMS) umsteigt. Das hört sich auf den ersten Blick oft nach viel zu viel Aufwand für eine eine kleine Webseite an, macht sich aber erfahrungsgemäß schnell bezahlt, auch wenn man zunächst etwas Aufwand in die Einarbeitung investieren muss. Dafür bekommt man dann so Sachen wie
- einheitliches Layout,
- hierarchische Seitenorganisation,
- fertige Komponenten (Besucherzähler, RSS-Feed, Suchfunktion, Kommentarfunktion, etc.)
gleich mitgeliefert und kann sie sehr einfach in die eigene Seite integrieren. Meist kann ein CMS - jedenfalls die größeren - auch Benutzerrechte und den Workflow verwalten. Das bedeutet, dass ein Autor einen Artikel ins CMS eingeben, aber nicht online stellen kann. Ein Redakteur kann den Artikel dann korrekturlesen, in die Navigationshierarchie einsortieren und freigeben, so dass er vom Webmaster online gestellt werden kann. Sobald mehr als eine Person an einer Webseite arbeiten, ist dies eine ganz weseltliche Funktion, um Stress und Chaos auf der Website zu vermeiden.
Die Kriterien zur Auswahl eines CMS sind zum einen technischer Natur, wie etwa die folgenden:
- Setzt das CMS einen bestimmten Webserver (IIS, Apache) voraus
- Setzt es bestimmte Skriptsprachen (PHP, Python o.ä.) voraus
- Wird eine Datenbank benötigt
- Ist die genannte Software in der richtigen Version und (wichtig!) Konfiguration installiert. (Probleme macht oft etwa der PHP-Safemode bei einigen Webhostern)
Zum anderen ist natürlich auch der Funktionsumfang von Bedeutung:
- Gibt es eine Template-Verwaltung, so dass Seitenelemente auf allen Seiten gleich aussehen?
- Gibt es eine User- und auch Workflow-Verwaltung
- Können bestimmte Design-Richtlinien erzwungen werden? Arbeiten mehrere Autoren an einer Webseite und einer davon formatiert z.B. Eigennamen fett und kursiv, der andere blau unterstrichen, der dritte in einer anderen Schriftart, dann sieht die Website schnell unansehnlich aus. Schöner ist es dann, wenn Eigennamen als solche gekennzeichnet werden können und mit einer Vorlage einheitlich formatiert werden können.
Ganz wichtig sind aber auch die folgenden Kriterien:
- Wird das System von vielen Usern verwendet, so dass davon auszugehen ist, dass es stabil läuft und keine "Kinderkrankheiten" hat?
- Erhält man Support, gibt es etwa eine Mailingliste, ein Forum, ein Wiki, o.ä.
- Wird das System weiterentwickelt und werden Bugfixes veröffentlicht?
- Falls man eigene Erweiterungen plant: Ist das System Open-Source und der Code / die API ausreichend dokumentiert?
Mit dem letzten Punkt, der Erweiterung des Systems um eigene Ergänzungen, macht man dann auch schon schnell wieder einen Schritt hin zu einer anderen Art von Websites, den Web-Anwendungen.
Web-Anwendungen
Manche CMS sind in der Lage, einfache Web-Anwendungen, wie zum Beispiel Feedback-Formulare oder Formulare zur Informationsanforderung, etc. zu generieren und die Eingaben der Websitebenutzer zu verwalten (Ablage in DB, Versand per Mail, etc.). Sobald der Funktionsumfang darüber hinausgeht, stößt man schnell an die Grenzen eines CMS.
Auch hier ist man zunächst wieder versucht, eine der üblichen Skriptsprachen zu verwenden und drauflos zu programmieren. Es wird einen ja auch leicht gemacht. Die Eingaben aus einem Formular stehen meist direkt in Variablen zur Verfügung, man muss die Eingaben nur noch überprüfen, daraus etwas "berechnen" und das Ergebnis an den Browser zurücksenden. Nach ein paar Versuchen stellt man dann aber meist fest, dass es doch nicht ganz so einfach ist. Jedes Feld per if-Abfrage darauf zu überprüfen, ob etwas und wenn ja, etwas korrektes eingegeben wurde, wird schnell sehr aufwendig. Und eine if-Abfrage, die nur korrekte E-Mail-Adressen erkennt, ist auch nicht unbedingt so einfach formuliert.
Viele Webanwendungen arbeiten auch mit einer Datenbank zusammen, in der die Benutzereingaben abgelegt werden. Auch die ersten SQL-Abfragen sind mit einer Skriptsprache schnell erledigt. Spätestens, wenn man dann irgendwann die Tabellenstruktur ändert und nun alle im Code vorhandenen SQL-Statements von Hand ändern muss, wird es aber doch wieder sehr lästig.
Doch ähnlich wie CMS eine große Hilfe für statische Websites sind, so gibt es diese Unterstützung auch für Web-Applikationen in Form von Web-Frameworks. Eines der bekanntesten, aber auch ziemlich aufwendigen und hauptsächlich im kommerziellen Bereich eingesetzten Frameworks ist J2EE (Java 2 Enterprise Edition) von Sun. Genaugenommen hat Sun das Framework standardisiert, es gibt Implemetierungen auch von anderen Herstellern bzw. als Open-Source-Software. Der Umfag geht aber weit über die Funktion "Web-Anwendung" hinaus.
Da Java auf dem Webserver relativ viel Resourcen und auch viel Know-How vom Webmaster benötigt, um eine einfache Web-Applikation zu betreiben, ist es gerade im privaten Bereich nicht besonders verbreitet. Hier sind eher in einer Skriptsprache geschriebene Frameworks geeignet, wie etwas das in PHP geschriebene Symfony .
Ein solches Framework erledigt meist gleich eine ganze Reihe von Aufgaben, von denen ich hier sicher einige vergesse:
- Generierung und Zusammenbau der Webseiten aus einzelnen Modulen
- Zugriff auf eine Datenbank über ein ORM-Mechanismus, wie etwa Propel für PHP oder Hibernate für Java und .Net-Sprachen.
- Standardisierte Verarbeitung von Web-Formularen mit vorgefertigten Schnittstellen zu Validatoren, die die Eingaben der Benutzer überprüfen und automatisch falsche Eingaben in den Formularen markieren.
- Definition und teilweise sogar Generierung eines Programm-Gerüsts, in dem nur noch einzelne Methoden zur Verarbeiten der von Benutzern gesendeten Daten ausgefüllt werden müssen.
- Oftmals ein Caching-Mechanismus, um die Auslieferung statischen Bestandteile von Webseiten zu beschleunigen
- Unterstützung für die Internationalisierung (I18N, Vorbereitung der Anwendung für den Einsatz in anderen Kulturen, d.h. Sprachen, Datums- und Zeitformate, etc.) und Lokalisierung (L10N, Anpassung der Anwendung für eine bestimmte Kultur).
- Viele kleine Hilfs-Module, die dafür sorgen, dass die in einer Webanwendung immer wiederkehrenden Aufgaben einfach gelöst werden können (Versenden von Mail, Generierung von RSS-Feeds, Aufteilung einer Ergebnisliste auf mehrere Seiten, etc.)
Auch hier zahlt es sich meiner Meinung nach aus, relativ früh mit der Auswahl eines Frameworks zu beginnen, anstatt zunächst viel Arbeit in die Nachprogrammierung von Funktionen zu investieren, wenn solche von anderen Programmierern bereits implementiert und getestet wurden.
Zusammenarbeit und Integration
Ein bisher wenig beachtetes Problem ist es, die bisher geannten Arten von Websites zu integrieren, dass heisst, etwa eine statische, in einem CMS gespeicherte Website mit einer Webanwendung zu "verheiraten" oder die Webanwendung mit einem Forum zu verknüpfen. Schön wäre es dann natürlich, wenn das Forum das Layout vom CMS übernimmt, gleichzeitig aber die Benutzer über die Datenbank für die Webanwendung authentifiziert werden, um das Forum verwenden zu können.
Dies ist ein Punkt, den ich selbst bisher noch nicht zufriedenstellend lösen konnte. Anscheinend läuft es an dieser Stelle darauf hinaus, wirklich in den Code der Systeme einzugreifen und seine eigene Lösung zu implementieren, was natürlich mit einigen Nachteilen verbunden ist. Es sind noch nicht einmal Ansätze von Standards in den Systemen zu erkennen, die eine Zusammenarbeit erleichtern würden. Gerade so Dinge wie die Benutzerverwaltung mit Rechtevergabe müsste sich relativ leicht mit standardisierten Schnittstellen beschreiben lassen, so dass mehrere Anwendungen einen Benutzer gegen eine Datenbank authentifizieren können.
Aber auch der Eingriff in den Code der einzelnen Systeme ist mit Nachteilen verbunden. Zunächst einmal bedeutet es viel Aufwand, sich in den Code einzuarbeiten, um überhaupt in der Lage zu sein, etwas daran zu ändern. Dann kommt der Aufwand für die Implementierung selbst dazu. Und schließlich hat man sich durch die Änderung des Sourcecode, der von den Entwicklern der CMS- und Foren-Software höchstwahrscheinlich nicht übernommen wird, von deren Weiterentwicklung ausgeschlossen oder ist immer wieder damit beschäftigt, den eigenen Code an den sich weiterentwickelnden Code von Forum und CMS anzupassen.