WikiHooks. Eine protoypenhafte Webhook Extension für MediaWiki


Bachelor Thesis, 2011

68 Pages, Grade: 1,0


Excerpt


Inhalt

Zusammenfassung

Kapitel 1 : Einleitung
1.1 Einführung
1.2 Ziele der Bachelorarbeit
1.3 Arbeitsübersicht

Kapitel 2: Webhooks, MediaWiki und andere grundlegende Technologien
2.1 Was sind Webhooks?
2.2 Der Einsatz von Webhooks im Internet
2.3 Was ist ein Media-Wiki?
2.4 MediaWiki und Webhooks
2.5 Wiki-Extensions
2.5.1 Was ist eine Extension?
2.5.2 Welche Extensions gibt es für MediaWiki?
2.5.3 Was ist bei der Programmierung einer MediaWiki-Extension zu beachten?
2.6 Programmierung im MediaWiki: Welche Programmiertechniken können sinnvoll für WikiHooks eingesetzt werden?
2.6.1 PHP und HTML
2.6.2 JavaScript und AJAX
2.6.3 SQL und JSON
2.7 Was ist Wordpress?
Hookpress - Webhooks für Wordpress:
2.8 Vergleich von MediaWiki und Wordpress

Kapitel 3: Funktionalität von WikiHooks
3.1 An welche Nutzer richtet sich WikiHooks?
3.2 Wie funktioniert WikiHooks?
3.2.1 Beispiel für die Verwendung von WikiHooks
3.3 Welche Vorteile bietet WikiHooks?
3.4 Technologische Zusammenhänge und Voraussetzungen
3.4.1 Arbeiten mit der Wikiumgebung
3.4.2 Aufgabe von JavaScript , AJAX und JSON
3.4.3 Ressourcenverbrauch durch WikiHooks
3.4.4 Weiterleitung der Informationen
3.5 Vergleich von Hookpress und Wikihooks
3.5.1 Gemeinsamkeiten
3.5.2 Unterschiede
3.6 Sicherheit

Kapitel 4: Durchführung der Entwicklung
4.1 Arbeitsumgebung
4.2 Vorgehensweise
4.2.1 Vorbereitung
4.2.2 Durchführung
4.3 Experimente
4.4 Externe Skripte
4.5 Probleme

Kapitel 5: Zusammenfassung der Arbeitsergebnisse
5.1 Welche Ziele wurden erreicht?
5.2 Welche Verbesserungen sind möglich?
5.3 Welche Alternativen gibt es?
5.4 Welche Maßnahmen fehlen für eine Veröffentlichung?
5.5 Fazit

Anhang
A1 Abkürzungsverzeichnis
A2 Abbildungsverzeichnis
A3 Tabellenverzeichnis
A4 Quellenverzeichnis

Literaturverzeichnis

Internetverzeichnis

Zusammenfassung

WikiHooks ist der Titel einer Erweiterung für ein MediaWiki. Seine Aufgabe besteht im Wesentlichen darin, Informationen, die innerhalb des Wiki verarbeitet werden können, auch außerhalb des geschlossenen Softwaresystems nutzbar zu machen.

Die Idee eines „programmable web“, also dem programmierbaren Internet, wird in den kommenden Jahren mit hoher Wahrscheinlichkeit immer beliebter. Programmierbar steht dabei für das Einbinden und Ausführen von persönlichen Miniskripten, die von jedem Nutzer individuell hochgeladen und verwendet werden können. Zu diesem Zweck wurden bereits für andrere Webservices Schnittstellen geschaffen, die die digitale Kommunikation mittels Internetadressen über die Grenzen des Service hinweg ermöglichen. Speziell das Plugin „Hookpress“ für den freien Bloggingdienst Wordpress.org bildet hier einen Vorreiter und stellt auch gleichzeitig das Vorbild für WikiHooks dar.

Die Extension wurde im Rahmen einer 3 monatigen Abschlussarbeit zur Erlangung des akademischen Grades „Bachelor of Sciences“ für das Fach Wirtschaftsinformatik an der Fachhochschule Stralsund entwickelt.

Es handelt sich um eine Forschungsarbeit, bei der eine funktionsfähige Software entwickelt wird. Am Ende der Arbeit soll ein fertiger Prototyp stehen, der das Herauslösen und Weiterleiten einzelner Informationen aus dem MediaWiki-System ermöglicht. Diese Informationen sollen dabei durch ein User Interface innerhalb des Wiki durch den Nutzer selbst bestimmbar sein. Insbesondere wird dabei die verwendete Technik zum Erstellen der Software betrachtet, die Vorgehensweise bei der Entwicklung und die Arbeit innerhalb der Wikiumgebung beschrieben und die Möglichkeiten der Erweiterung für den Anwender genannt.

Als Ergebnis der Arbeit entstand ein voll funktionsfähiges Softwareprodukt mit dem Namen „WikiHooks“. Das Produkt ermöglicht es dem Anwender die von ihm gewünschten Informationen aus dem Wiki automatisch weiterleiten zu lassen und nach einer von ihm selbst erstellten Logik extern zu verarbeiten. Die Auswahl der Informationen und die anschließende Weiterverarbeitung der Daten ist dabei dem Anwender überlassen. WikiHooks bildet hierzu die Schnittstelle zwischen dem MediaWiki und der Weiterverarbeitungslogik des Anwenders. Diese Logik ist nicht systemgebunden und unabhängig von einer bestimmten Programmiersprache.

Kapitel 1 : Einleitung

1.1 Einführung

Web 2.0 ist 2010 kein neuer Begriff mehr. Für viele Menschen sind soziale Netzwerke, Blogs und Internetshops zum Teil des alltäglichen Lebens geworden. Seit sich das „Web des usergenerierten Inhalts“ durchgesetzt hat, wollen die Nutzer nun immer mehr selbst bestimmen wie sie Informationen verbreiten oder selbst verarbeiten möchten.

Ein moderner 2.0 Surfer ist zumeist auf zahlreichen digitalen Plattformen unterwegs, beispielsweise in sozialen Netzwerken wie Facebook oder StudiVZ, läd bei Video-Hostern wie Youtube eigene Filme hoch oder er liest und schreibt Blogs und Twitternachrichten. Diese Services sind zumeist unabhängig von einander und deren einzige „Schnittstelle“ ist der Nutzer selbst. Was aber, wenn der Internetnutzer ähnliche Informationen nicht jedesmal selbst per Hand eintragen möchte? Was, wenn der Nutzer bei mehreren sozialen Netzwerken vertreten ist? Wäre es nicht nützlich, das Versenden von Informationen zu synchronisieren und zu automatisieren? Jemandem der viel im Internet unterwegs ist kann durch einen automatisierten Informationsfluss viel Zeit gespart werden. Webanbieter könnten durch gezielte Weitergabe von Informationen die Auslastung ihrer Server verbessern.

Zusätzlich sollen Informationen so schnell wie möglich, im Optimalfall sogar in Echtzeit weitergegeben und verbreitet werden. Mit sogenannten Webhooks ist das möglich. Webhooks können eine Brücke zwischen den vielen verschieden Angeboten bilden. Der User muss nicht mehr nach Änderungen fragen, sondern er erhält seine gewünschten Informationen automatisch und zeitnah. Und das nur zu den Themen die er sich selbst ausgesucht hat und nach einer Logik, die er selbst erstellt hat. Er kann seine eigenen Informationen automatisch und in Sekundenschnelle auf mehreren Plattformen veröffentlichen. Webhooks sind dabei die Schnittstelle, die vom Anbieter gestellt werden muss. Der Anwender kann sie dann nutzen, um eine eigene, programmierte Logik anzusprechen und dadurch seine Informationen zu synchronisieren. Es entsteht somit ein Internet, das nicht nur nach dem Angebot großer Webservices funktioniert, sonder ein programmierbares Netz aus Minianwendungsskripten, das der Logik des einzelnen Anwenders gehorcht.

Durch das Hinzufügen einer solchen Funktionalität wird auch ein Mediawiki-System sinnvoll und praktisch erweitert. Die Kombination aus Ereignissen und Reaktionen ermöglicht dem User sehr umfangreiches Arbeiten mit der Wikiumgebung und ist durch den Einsatz aufgabenspeziefischer User-Skripte theoretisch unbegrenzt einsetzbar. Somit kann das Wiki sowohl für Administratoren, als auch für Benutzer nach beliebigem Aufwand und jeweiligem Können, selbstständig erweitert und dessen Informationen nach den eigenen Wünschen weiterverarbeitet werden.

1.2 Ziele der Bachelorarbeit

Ziel dieser Bachelorarbeit soll es sein, eine prototypenhafte Implementierung einer Webhook- Erweiterung für ein MediaWiki zu erstellen. Diese Erweiterung wird für die zukünftige Benennung den Arbeitstitel „WikiHooks“ tragen. Das Plugin soll in der Lage sein, eine MediaWikiumgebung um einen benutzerfreundlichen und leistungsstarken Eventhandling Aspekt zum Weiterleiten von Informationen zu erweitern. Das Eventhandling sieht bestimmte automatische Reaktionen vor, die auf Ereignisse innerhalb des Wiki eintreten. Diese sollen beliebig durch den Anwender bestimmbar sein. Zu solchen Ereignissen zählen unter anderem das Erstellen neuer Artikel, das Ändern oder Löschen bestehender Artikel oder das Ein- und Ausloggen von Usern. Mögliche Reaktionen darauf wären beispielsweise das Versenden von Nachrichten an eine bestimmte Zielgruppe über den Änderungszustand oder eine andere Verarbeitung. Das wird durch das Übermitteln der Informationen an ein vom User selbst geschriebenes Skript ermöglicht.

Der Prototyp soll in der fertigen Version ein einfach zu bedienendes UserInterface zur Eingabe und zum Interagieren mit den angelegten Webhooks bieten. Zu den Interaktionsmöglichkeiten sollen das Aktivieren bzw. das Deaktivieren und das Löschen eines Webhooks gehören. Die WikiHooks-Extension soll als Prototyp bereits einige der Voraussetzungen erfüllen, die an eine öffentliche Extension für das MediaWiki-System gestellt sind. Hauptsächlich soll dabei die einfache Installierbarkeit sein. Ziel dieses Prototypes soll es jedoch nicht sein, eine besondere Beachtung von Sicherheitsstandards oder Performancestandards einzuhalten. Es soll lediglich die Machbarkeit einer solchen Software innerhalb eines Wiki überprüft und nachgewiesen werden.

1.3 Arbeitsübersicht

Die Arbeit teilt sich in die folgenden 5 Kapitel auf:

Das erste Kapitel dient als Einleitung und informativen Überblick über die Arbeit.

Das zweite Kapitel behandelt die zugrunde liegenden Technologien und Programmier- paradigmen auf denen die Entwicklung von WikiHooks basiert. Es beschreibt die Idee der Webhooks näher sowie die Anwendungssysteme MediaWiki und Wordpress, sowie dessen Erweiterungen.

Kapitel drei beschäftigt sich mit der eigentlichen Extension „WikiHooks“ und beschreibt dessen Funktionen sowie seine Möglichkeiten und Vorteile anhand von Beispielen. Hinzu kommt eine Abgrenzung zu ähnlichen Implementierungen wie dem Vorreiter „Hookpress“.

Im vierten Kapitel werden die Vorgehensweise und die Arbeitsfolge bei der Entwicklung von WikiHooks erläutert. Es werden die durchgeführten Experimente wiedergegeben und deren Sinn und Zweck für die Arbeit kurz dargestellt.

Das abschließende fünfte Kapitel fasst noch einmal alle Arbeitsergebnisse zusammen und betrachtet den vorliegenden Prototyp kritisch im Hinblick auf eine einsatzfähige Version sowie alternative Lösungen und Angebote mit ähnlichem Hintergrund.

Kapitel 2: Webhooks, MediaWiki und andere grundlegende Technologien

2.1 Was sind Webhooks?

“ The concept of a WebHook is simple. A WebHook is an HTTP callback: an HTTP POST that occurs when something happens; a simple event-notification via HTTP POST. ” Jeff Lindsay1

Webhooks können als eine Art automatische Verkettung von Ereignis und Reaktion im Internet betrachtet werden. Das bedeutet, durch den Einsatz dieser Technologie soll eine bestimmte Reaktion automatisch auf ein bestimmtes Ereignis erfolgen.

Das Internet basiert zur Zeit hauptsächlich auf dem Nachfrage und Antwort - Prinzip, das bedeutet, der Client stellt eine Anfrage und der Server beantwortet diese mit den gewünschten Inhalten. Dieses beruht auf den Grundlagen des Hypertexttransferprotocoll. Um im Internet also Daten zu empfangen, muss der Client zunächst eine Nachfrage, also einen Request, beim entsprechenden Server des Anbieters starten. Dieser liefert daraufhin die Dateien innerhalb einer Antwort, der Response. Diese Request-Response-Methode wird „polling“ genannt, da der Client sich seine Antworten sprichwörtlich vom Server „ziehen“ muss. Allerdings kann der Client nicht wissen wann der Server Neuigkeiten hat und muss daher permanent nachfragen. Das wiederum bedeutet, dass der Server eine Vielzahl an „leeren“ Antworten versenden muss.

Die Idee hinter Webhooks ist nun, das der Client nicht selbst aktiv werden muss um Informationen zu erhalten. Vielmehr wird hierbei der Server tätig und zwar nur dann wenn es auch etwas Neues zu vermelden gibt. Das heißt der Server weiß an welchen Client er welche Informationen zu versenden hat und tut dies automatisch sobald Änderungen stattfinden. Diese Methode nennt sich „push“. Sie ist eine der Grundideen hinter Webhooks und beruht ebenso auf den Grundlagen des HTTP. Server und Clients kommunizieren nur dann miteinander, wenn es auch etwas Neues gibt.

Ein momentan aktuelles Beispiel für diese Technologie ist das ebenfalls PuSH abgekürzte Protokoll PubSubHubbub2, welches auf dem erläuterten Prinzip der Webhooks beruht und zur Zeit als Konkurrent für RSS bzw. Atom Feeds betrachtet und diskutiert wird. Das PubSubHubbub-Protokoll ermöglicht es Abonnenten (Subscriber) sich bei einem Herausgeber (Publisher) zu registrieren, dieser verwaltet sämtliche Abonnenten in einem speziellen Verteiler (Hub). Hat der Publisher etwas Neues zu vermelden, lässt er nun sämtlichen im Hub vermerkten Subscriber die gewünschten Informationen zukommen. Das passiert in Echtzeit und spart dem Publisher viele unnötige Zugriffe auf seinen Server.

Dieses ist aber nur eine beispielhafte Einsatzmöglichkeit für Webhooks. Eine Weitere ist der Einsatz zur Kommunikation zwischen verschieden Webservices. Webhooks können sozusagen eine Verknüpfung zwischen Webservices bilden, indem sie Informationen von

Einem zum Anderen weitergeben. So können beispielsweise der Titel und die dazugehörige URL eines in einem Blog erzeugten Artikels an Microbloggingdienste wie Twitter weitergegeben werden, ohne das der Autor die jeweilige Seite des Webservice besuchen und die Informationen per Hand eintragen muss.

2.2 Der Einsatz von Webhooks im Internet

Webhooks im Sinne eines Zusammenspiels von Ereignis und Reaktion, werden von großen Webdienstleistern wie Google schon seit geraumer Zeit eingesetzt. Jedoch erst der IT- Fachmann und Blogger Jeff Lindsay gab im Jahre 2006 dieser besonderen serverseitigen Kommunikationsart im Internet ihren Namen. Er ist Web System Architekt bei der NASA3 und beschäftigt sich mit den Möglichkeiten und Vorteilen von Webhooks in mehreren sehr umfangreichen Präsentationen4 5, die er unter anderem auf www.slideshare.com veröffentlichte. Dazu betreibt seit Jahren einen aktiven Blog, sowie ein Wiki rund um Webhooks und ähnliche Technologien.

Der Begriff Webhook ist im Internet immer noch relativ unbekannt, dass kann daran liegen, dass es keine festen Standards für die http-callbacks gibt. Die durch Webhooks realisierte Atom-Erweiterung „PubSubHubbub“, kurz auch PuSH genannt, könnte zu einem Sprungbrett für diese Technik werden. Besonders innerhalb der Bloggerscene freut sich der Realtime- Notification Service steigendem Interesse, was die stetig neuen Einträge bei Google belegen.

Die bereits erwähnte und für die vorliegende Arbeit ausschlaggebende Wordpress- implementierung „Hookpress“ von Michael Yoshitaka Erlewine ist ein weiteres Beispiel für einen erfolgreichen Einsatz von Webhooks. Er ist momentan Ph.D Student für Linguistik am Massachusetts Institute of Technology (MIT)6. Unter seinem Pseudonym michto veröffentlichte er das Plugin für die Opensource Blog Plattform Wordpress.org. Seit April 2010 wurde die Erweiterung als fester Bestandteil in den Programmcode für Wordpress.com aufgenommen. Dadurch erhalten auch viele Blogger, die ihren Blog nicht auf einem eigenen Server aufgesetzt haben, sondern von Wordpress.com hosten lassen, die Möglichkeit in ihrem Blog Webhooks zu verwenden.

Der Online-Zahlungsservice Paypal nutzt Webhooks bei Ihrem InstantPaymentNotifikation Dienst (sofortige Zahlungsbestätigung) kurz IPN. Hierdurch wird beim Bezahlen des Kunden eine URL vom Paypal Server angesprochen, die der Verkäufer darauf hinterlegt hat. Der Server schickt die Kundendaten für das aktuelle Geschäft anschließend verschlüsselt an den Server des Verkäufers. Dadurch ist es laut Paypal beispielsweise möglich, die Warenverfügbarkeit anzupassen oder Benutzerkonten für Onlinedienste einzurichten7.

Es zeigt sich also, dass die Idee der Webhooks sich inzwischen wachsender Beliebtheit erfreut und immer mehr Anbieter auf den „Echtzeitzug“ aufspringen wollen. Auch wenn der Begriff Webhook für sich selbst noch nicht allgemein anerkannt zu sein scheint.

2.3 Was ist ein Media-Wiki?

Die freie Online Enzyklopädie Wikipedia ist heute aus dem Alltag vieler Internetnutzer nicht mehr wegzudenken. Es ist mittlerweile in 260 Sprachen verfügbar und verwaltet insgesamt mehr als 10 Millionen Artikel, davon etwa eine Million auf deutsch und mehr als drei Millionen in englischer Sprache. Die mehr als 370 Server müssen zwischen 25 und 60 Tausend Seitenzugriffe pro Sekunde verarbeiten. Das 2001 von Jimmy Wales ins Leben gerufene Wikipedia spricht für die Nutzung und Verbreitung von Usergeneriertem Wissen. Das ursprünglich als „Spassprojekt“ angesehene System löste durch seine Beliebtheit schnell die kommerziell genutzte Enzyklopädie Nupedia von Wales ab. Aufgrund rasant steigender Nutzerzahlen, entwickelte der deutsche Biologe Magnus Manske eine Wiki-Engine, die komplett in PHP geschrieben war und dem Ansturm besser standhielt, als seine Vorgänger- Software UseMod in Perl. Erst 2003, anderthalb Jahre nach dem Einsatz für Wikipedia, wurde der WikiEngine der Name MediaWiki verpasst8. Nachdem der Source-Code des Wikipedia somit auch der Öffentlichkeit als MediaWiki zur freien Verfügung zugänglich gemacht wurde, nahm die Zahl der unabhängigen, themenbezogenen Wikis rapide zu. Allein auf der Wikiseite www.wikiindex.org sind mehr als 3500 Einzelwikis verzeichnet9.

Wikis werden aus vielen unterschiedlichen Gründen und zu genauso vielen unterschiedlichen Themen genutzt. Es gibt neben Fan-Wikis, die sich mit Filmen, Büchern oder Computerspielen befassen, auch Wikis über Städte und Staaten, über Fachspezifische Themen wie Mathematik, Informatik oder Biologie und auch über Technologien wie Programmiersprachen oder Betriebssysteme. Inzwischen werden Wikis auch immer häufiger von Unternehmen zum Wissensmanagement genutzt, da Wikis ideal sind um kollaborativ Informationen zu einem bestimmten Thema zusammenzutragen.

Ein Wiki muss jedoch nicht zwangsläufig ein MediaWiki sein. Es gibt auch andere WikiEngines, die auf ähnliche Weise funktionieren. Dazu zählen beispielsweise DokuWiki oder auch eGroupWare, welche in PHP geschrieben sind. Hinzu kommen noch zahlreiche andere Formate die auf anderen Programmiersprachen wie Java oder Perl basieren. Die meisten Wiki-Engines zählen, wie auch das MediaWiki, zu den Content Management Systemen, bieten jedoch meist etwas weniger Funktionen bezüglich der Gestaltung und einen offenen Zugriff auf die Inhalte10. Auf Grund der ungleich höheren Bekanntheit von Wikipedia, ist die MediaWiki-Engine wohl eine der am meisten verwendeten.

2.4 MediaWiki und Webhooks

Innerhalb der Wikiumgebung sind bereits zahlreiche interne Callback Variablen integriert. Diese werden sowohl von der MediaWiki-Engine selbst, als auch von zahlreichen Extensions verwendet. Auf der Referenzseite des MediaWiki werden diese Callbacks als Hooks11 bezeichnet. Diese Hooks sind jedoch keine Webhooks. Sie reagieren als „event handler“ auf Prozesse innerhalb des Wikis und die Callbacks finden ausschließlich innerhalb der

Wikiumgebung statt. Ein solcher Hook hat den folgenden Aufbau:

$wgHooks[„Ereignisvariable“][] = „Callbackfunktion“. $wgHooks[] ist eine allgemeingültige globale Wikivariable. Innerhalb dieses Arrays werden alle möglichen Ereignisse verwaltet. Das „event handling“ tritt ein, sobald ein bestimmtes Ereignis innerhalb der Wiki-Engine ausgelöst wird. Dadurch wird die Callbackfunktion, die dem Event zugeteilt ist, aufgerufen und ausgeführt. Zu diesen Events gehören zum Beispiel das Speichern eines Artikels, das Einloggen eines Users oder das Anzeigen einer bestimmten Seite. Zu diesen Beispielen kommen sehr viel mehr hinzu. Die Wikiumgebung stellt in 10 verschiedenen Kategorien fast 150 verschieden Ereignisvariablen zur Verfügung. Das gilt für die Version 1.15 des MediaWiki.

Die Funktionsweise der Ereignisvariablen mit der dazugehörigen Callbackfunktion sind denkbar einfach. Sie soll nun anhand des folgenden Beispiels erklärt werden:

Es soll ein Callback ausgelöst werden, wenn sich ein Nutzer am Wiki einloggt. Um die Verkettung auszulösen, beispielsweise innerhalb einer installierten Erweiterung, muss zunächst dem Array der Ereignisvariablen eine Funktion zugewiesen werden. Die entsprechende Variable dazu ist „UserLogin“. Um nun auf ein Ereignis wie das Einloggen eines Users zu reagieren muss das globale Array $wgHooks[] wie folgt erweitert werden:

$wgHooks[ ‚ UserLogin ‘ ][] = „ checkLogin “.

Dem Array der Ereignisvariablen „UserLogin“ wird also die Zeichenkette „checkLogin“ hinzugefügt. Tritt nun das Event UserLogin ein, sucht die Wiki-Engine nach einer Funktion mit dem Namen „checkLogin“. Die Funktion „checkLogin“ ist eine neue Funktion die innerhalb der Erweiterung ausgeführt werden soll. Darin kann beliebiger Code stehen.

Ist es Sinn dieser Funktion bestimmte Daten aus dem Wiki heraus, beispielsweise an einen anderen Server weiterzuleiten, handelt es sich dabei um einen Webhook. Das bedeutet, die Funktionalität des Wikiinternen event handling, kann durch eine Erweiterung dazu genutzt werden, aus internen Callbacks Webhooks machen.

2.5 Wiki-Extensions

2.5.1 Was ist eine Extension?

Unter einer Extension versteht man eine Erweiterung für ein eigentlich abgeschlossenes Programmumfeld, das die Funktionen des Programmcodes erweitert. Extensions können sowohl vom ursprünglichen Programmentwickler, als auch von einer unabhängigen Community bereitgestellt werden. Wer Extensions erstellen darf, hängt häufig davon ab wie das Programm vermarktet wird. Für kommerzielle Produkte ist es eher unüblich, da der Entwickler die Kontrolle über sein Produkt nicht aus der Hand geben möchte. Bei Open- Source-Projekten, wie zum Beispiel dem Firefox-Browser der Mozillagruppe, dem Blogging Dienst Wordpress, oder der MediaWiki-Umgebung, ist gerade diese Beteiligung erwünscht. Durch die aktive Beteiligung einer großen Community ist es daher möglich sehr viele und auch sehr umfangreiche und nützliche Funktionen für solche Programme bereitzustellen.

2.5.2 Welche Extensions gibt es für MediaWiki?

Aufgrund der enormen Beliebtheit als Wissensplattform, kann die MediaWiki-Community auf über 1600 unabhängige Extensions zurückgreifen12. Viele davon sind für spezielle Aufgaben gedacht oder für die passende Erweiterung der Funktionalität eines Wiki. Dazu zählen beispielsweise Bewertungssysteme für Artikel oder das Einbinden von externen Diensten, wie etwa Google Wave oder ICQ-Clients. Jede Extension wird auf der Wikiseite von MediaWiki.org beschrieben, verwaltet und auch zum Download angeboten.

Tabelle 1 zeigt eine kleine Auswahl an nützlichen MediaWiki Erweiterungen2:

Abbildung in dieser Leseprobe nicht enthalten

Die Extensions lassen sich in verschieden Kategorien unterteilen, je nach dem zu erfüllenden Zweck, oder der verwendeten Programmierparadigmen. So wird beispielsweise die Kategorie nach Ajaxnutzung oder auch nach Verwendung der internen Hooks sortiert.

2.5.3 Was ist bei der Programmierung einer MediaWiki-Extension zu beachten?

Bei der Erstellung einer Extension sollten verschiedene Grundsätze eingehalten werden, damit die Erweiterung in die Bibliothek der MediaWiki-Extensions bedenkenlos aufgenommen werden kann. Auf der Informationsseite der WikiMedia-Foundation befindet sich auch zum Thema Extensions eine umfangreiche Anleitung mit Hinweisen und Empfehlungen zum Erstellen und Installieren der Plugins14. Auch wenn keine strikten Vorgaben aufgelistet werden, sollten beispielsweise die Namen von globalen Variablen mit der üblichen $wg- Syntax beginnen. Weiterhin sollte die Setup Datei der Extension Auskunft über sämtliche neu hinzugefügten Spezialseiten, neue XML Tags und Variablen geben und auch Informationen über den Autor und die Extension selbst enthalten. Desweiteren wird empfohlen, durch Extension benutzten Klassen mittels der Autoloadingfunktion der Engine einzubinden. Auch zum Umgang mit der multi-lingualen Gemeinschaft der MediaWiki Nutzer, werden hier einige Hinweise gegeben.

Wie für jedes gängige Softwareprodukt, gelten auch für Erweiterungen von Wikiumgebungen allgemeine Regeln und Anforderungen, an die bei der Entwicklung gedacht werden sollte. Zum einen sollte ein Plugin das System sinnvoll erweitern, damit es dem User auch einen Nutzen bringt. Zum Anderen darf der zusätzlich ausgeführte Codeteil weder ein Risiko noch eine Leistungsbremse für das Muttersystem darstellen. Design und Anwendbarkeit spielen bei Extensions eine eher untergeordnete Rolle, dennoch sollten sie nicht ganz außer Acht gelassen werden.

2.6 Programmierung im MediaWiki: Welche Programmiertechniken können sinnvoll für WikiHooks eingesetzt werden?

2.6.1 PHP und HTML

Der Programmcode des Wiki besteht zum größten Teil aus der serverseitigen Skriptsprache PHP15, ein rekursives Akronym für HypertextPreprocessing16. Diese sorgt für eine dynamische Erstellung der Wikiseiten. PHP wird auch genutzt um mit der MySQL- Datenbank zu interagieren. Eine Wikiimpelmentierung ist sehr umfangreich, zahlreiche .php datein, .ini dateien, .log dateien und weitere sind notwendig um die Anwendung auszuführen. Das liegt daran, dass das Softwarepacket des MediaWiki Systems an sich sehr umfangreich ist. Nicht nur bietet es sehr viele Funktionen, es stellt auch dem Anwender zahlreiche Möglichkeiten mit dem Wikiprogrammcode zu arbeiten, indem es Funktionen und Parameter bereitstellt. Erst dies macht das einfache Erstellen und Einbinden von Extenions möglich. Diese Erweiterungen müssen also dementsprechend auch in PHP geschrieben werden. Dabei ist zu beachten, dass innerhalb der Wikiumgebung gearbeitet werden muss. Es ist wichtig zu berücksichtigen, dass das Wiki-System einige Eigenheiten aufweist. Dadurch kann es bei der Entwicklung zu Problemen kommen, die bei einer unabhängigen Entwicklung nicht auftreten würden. Eine beispielhafte Diskussion dazu findet sich in Kapitel 4.4 „Probleme“.

2.6.2 JavaScript und AJAX

Wie auch bei gewöhnlichen Webseiten, ist es möglich innerhalb der Extension für bestimmte Funktionalitäten auf Skripte zuzugreifen. Die häufigste eingesetzte clientseitige Skriptsprache ist hierbei JavaScript. Das Wiki an sich benötigt keine zusätzliche Unterstützung durch Skripte. Jedoch wurde bei der Entwicklung von WikiHooks schnell festgestellt, dass allein mit den Möglichkeiten von PHP und HTML kein befriedigendes Ergebnis erzielt werden könne. Daher wurde unter Berücksichtigung der Möglichkeiten die das Wiki bietet eine eigene JavaScript Datei geschrieben und implementiert. Dieses Skript dient hauptsächlich zum ausführen der AJAX Funktionen, die benötigt werden um dynamisch auf die Eingaben des Nutzers zu reagieren. AJAX ist ein Programmierkonzept und trug in der Vergangenheit maßgeblich für die weite Verbreitung von JavaScript bei. Anfänglich stand AJAX als Apronym für „asyncron JavaScript and XML“17, da Ajaxanwendungen aber auch ohne XML funktioniert, trifft diese Bezeichnung nicht mehr zu. Aus diesem Grund wird der Begriff heutzutage als Eigenname für das Konzept an sich verwendet. Mittels AJAX kann ein bestimmter Teil einer Website neu geladen werden, ohne dass die komplette Seite neu generiert werden muss.

2.6.3 SQL und JSON

Die Verwaltung der Datenbank für das MediaWiki übernimmt die SQL-Variante MySQL. Wie der PHP-Bestandteil des Wiki ist auch die Datenbank entsprechend umfangreich und bietet viele Möglichkeiten für Anwendungen durch Plugins. Es gibt Extensions, die vorsehen neue Tabellen in die Datenbank zu schreiben. Im Hinblick auf das persistente Sichern der vom User erstellten Webhooks durch WikiHooks, wurde auch die Möglichkeit überprüft diese innerhalb einer eigenen Tabelle zu verwalten. Jedoch sprechen die umständliche Einrichtung einer solchen Tabelle und die damit zusammenhängende Steigerung der Komplexität bei der Installierung der Extension dagegen. Stattdessen wurden die bereits vorhanden SQLStrukturen der Usertabelle verwendet.

Jeder per WikiHooks erstellte Webhook besteht aus vielen verschiedenen Teilen. Um diese Attribute und auch die kompletten Webhooks selbst zu speichern, wurde eine Lösung gesucht, die es ermöglicht komplex strukturierte Informationen platzsparend und persistent zu hinterlegen. Bei der Lösung dieses Problems handelt es sich um JSON, eine Kurzform für „JavaScriptObjectNotation“. Das Datenformat wurde von Douglas Crockford spezifiziert und ist in der Lage ein beliebiges Objekt oder auch Array mitsamt seinen Attributen als Zeichenkette in UTF-8 Kodierung zu strukturieren18. PHP bietet eigens Funktionen zum codieren und decodieren im JSON Format. Somit ist es möglich die sehr komplexe Struktur eines mehrdimensionalen assoziativen Arrays, in dem sich Webhooks jedes Nutzers befinden in einen einfachen String umzuwandeln und wieder aus der Datenbank aufzurufen. Nach entsprechender Rückwandlung des Strings ist das Array wieder bearbeitbar.

2.7 Was ist Wordpress?

Wordpress ist eine freie PHP-Software, die das Erstellen und Betreiben eines individuellen Blogs ermöglicht. Das System wurde von Matt Mullenweg und Rayn Boren auf Basis des b2 Systems entwickelt und eine erste stabile Version am 3 Januar 2004 veröffentlicht. Inzwischen ist die Zahl der Downloads für die Aktuelle Version 3.0 bei fast 14 Millionen angelangt19. Ähnlich wie die MediaWiki-Software kann es auf einem beliebigen Server installiert und betrieben werden. Auch kann der Betreiber beliebige Änderungen am Programmcode vornehmen. Wordpress zeichnet sich durch eine sehr einfache und intuitive Bedienung sowie der einfachen Installation aus. Mit den neusten Versionen von Wordpress kann das System auch zu den Content Management Systemen gezählt werden, obwohl es nach wie vor hauptsächlich von Bloggern genutzt wird.

Es muss zwischen Wordpress.com und Wordpress.org unterschieden werden. Während Wordpress.org die aktuelle Version 3.0 zum Download anbietet und eine Installation auf einem vom Blogger selbst bereitgestellten Webspace vorsieht, basiert Wordpress.com auf einer Multiuser Version der Engine und wird ebenfalls durch Matt Mullenweg und seiner Firma Automattic betrieben. Hier ist es möglich auf eine eigene Installation der Software zu verzichten und stattdessen einen eigenen Blog auf den Wordpress Servern zu betreiben. Wordpress.com zählt mehr als 300.000 Blogger. Anders als bei einer Installation auf einem eigenen Server ist es hier jedoch nicht möglich beispielsweise Plugins selbst hinzuzufügen und zu verwalten oder Veränderungen am Quellcode vorzunehmen20.

Wordpress ist weniger umfangreich als die MediaWikiumgebung3, bietet jedoch ebenfalls viele Funktionen und Erweiterungsmöglichkeiten. Zum Umfang des Systems gehören dabei auch einige nützliche Frameworks, wie zum Beispiel jQuery21 oder auch Snoopy22. Dadurch werden auch automatisch die Voraussetzung für die Verwendung der JavaScript Paradigmen AJAX und JSON erfüllt.

Hookpress - Webhooks für Wordpress:

Wichtiger Bestandteil der Arbeit und eine Voraussetzung für die Umsetzung des Projektes, war das Analysieren der Wordpress.org Erweiterung „Hookpress“. Durch dieses Plugin wurde die Idee zum Einsatz von Webhooks innerhalb eines MediaWiki geboren.

Hookpress ermöglicht dem Administrator eines Wordpress Blogs bestimmte Ereignisse die innerhalb der Programmumgebung stattfinden zu vermerken und bei deren Eintreten bestimmte Informationen aus dem System an eine externe URL zu versenden. Beispielsweise ist es so möglich automatisch eine Twitternachricht zu erstellen, sobald ein neuer Eintrag im Blog gemacht wurde.

Da auch Wordpress.org komplett in der dynamischen Programmiersprache PHP erstellt wird, ist diese wie bei einem MediaWiki-System Voraussetzung für alle Erweiterungen, die dort implementiert werden sollen. So auch für Hookpress. Es besteht aus 6 php Dateien. Das Herzstück ist die Datei options.php, die für die Darstellung der Pluginseite innerhalb der Wordpressumgebung sorgt. Die eigentliche Arbeit findet in der Datei services.php statt. Hier werden die vom Admin angelegten Webhooks ausgeführt und an die zugewiesene URL weitergeleitet. Die Datei hooks.php dient als Quelle für die auszuwählenden Hooks, sowie die dazugehörigen Aktionen bzw. Filtervariablen.

Tabelle 2 zeigt eine Liste aller im Plugin enthaltenen Dateien.

Abbildung in dieser Leseprobe nicht enthalten

Die dynamische Arbeit des Plugin findet sich ebenfalls in die Datei options.php eingebettet. Dort sind die ausführenden JavaScript Zeilen mitsamt AJAX-Anwendungen untergebracht. Hierdurch wird ein flüssiger Übergang beim Wechsel des Aktivierungsstatus erreicht. Zu Bemerken ist, dass hier das freie JavaScript-Framework jQuery verwendet wird, welches standartmäßig zum Umfang eines Wordpress.org Blogs gehört. Es erleichtert u.a. den Umgang mit Ajax. Ebenso die Snoopy-Bibliothek, ein PHP-Framework das einen Server simulieren kann und zum Übertragen der Webhookvariablen an eine externe URL genutzt wird. Die Sicherung der Webhooks erfolgt durch speichern innerhalb der Optionentabelle in der SQL Datenbank der Wordpress-Installation.

2.8 Vergleich von MediaWiki und Wordpress

Um die Umsetzung der Idee von Wordpress auf MediaWiki zu verwirklichen, ist es notwendig, dass man sowohl die Funktionsweise als auch die Unterschiede beider Systeme zu verstehen weiß. Durch die Analyse der Hookspress Erweiterung, konnte ein erster Überblick über notwendige Funktionen und Voraussetzungen gewonnen werden, die für eine derartige Softwarelösung notwendig waren. Der eigentliche Quellcode lässt sich verständlicherweise nicht einfach von einem System auf das andere übertragen, jedoch gibt es einige Gemeinsamkeiten, die eine ähnliche Syntax und verwandte Programmiermuster im Quellcode erlauben.

Zu den auffälligen Differenzen zählt das Fehlen von zusätzlichen Bibliotheken und Framewoks bei der MediaWiki-Engine. Während Wordpress.org mit jQuery und Snoopy zwei umfangreiche Erweiterungsschnittstellen bietet, sind einige Funktionalitäten der zusätzlichen Dateien im MediaWiki bereits integriert. Zumindest die Ajax-Komponenten des jQuery können für WikiHooks durch interne Funktionen ersetzt werden. Für das Kommunizieren mit einem externen WebServer bietet Wordpress das Snoopy-Framework, welches so nicht im Programmcode des Wiki wiedergegeben wird. Daher musste für WikiHooks eine verwandte Technik gefunden werden. Ähnlich sind sich die Systeme im Zugriff auf die Datenbank. Beide bieten eine bequeme Klassensyntax, die einen einfachen Zugriff auf Attribute ermöglichen, ohne auf die Datenbank durch explizite SQL-Befehle zugreifen zu müssen.

Neben den technischen Unterschieden, beziehungsweise Ähnlichkeiten, gibt es noch die Nutzer und das Verwendungsziel der beiden Plattformen, die sich erheblich von einander unterscheiden. Während die Zahl der Autoren bei einem Blog eher gering ist, kann ein MediaWiki je nach Themenlage und Umfang eine sehr hohe Zahl an aktiven Nutzern aufweisen. Blogs werden in den meisten Fällen dazu verwendet die Meinung der Autoren einem breiten Publikum zu präsentieren. Die durch einen Autor erstellten Artikel sollen nach ihrer Veröffentlichung nicht mehr verändert oder ergänzt werden. Bei einem Wiki ist das anders. Ein Wiki bietet zumeist spezielle Informationen zu einem bestimmten Thema wie beispielsweise das Webhook-Wiki oder generelle Informationen über sehr viele Themen, wie das allseits bekannte Wikipedia. Der Sinn eines Wiki soll es sein, Informationen einem breiten Publikum zugänglich zu machen. Dabei wird das Wissen jedoch nicht von einer kleinen Personengruppe bereitgestellt, sondern von vielen Mitgliedern einer Community diskutiert und angepasst. Dieser Aspekt ist gerade beim Verbreiten von Wissen vorteilhaft, da verschiedene Personen verschiedene Sichtweisen auf die Vermittlung oder auch Anwendung von Informationen haben. Natürlich gibt es auch viele Blogs die sich der Verbreitung des Wissens zu einem speziellen Thema verschrieben haben, dennoch bietet ein MediaWiki häufig die unabhängigere Möglichkeit Wissen zu erwerben.

Kapitel 3: Funktionalität von WikiHooks

3.1 An welche Nutzer richtet sich WikiHooks?

WikiHooks richtet sich vor allem an Nutzer, die sowohl einige Erfahrung mit der Umgebung eines MediaWiki haben, als auch Erfahrungen im Programmieren. Darüber hinaus Solche, die die Funktionalität des Wiki erweitern möchten, ohne eine eigene Erweiterung dafür schreiben zu müssen. Zusätzlich ist somit das Verarbeiten von Wikiinternen Informationen auch dann möglich wenn man nicht der Eigentümer oder Administrator des entsprechenden MediaWiki ist. Für Administratoren stellt das WikiHooks-Plugin eine komfortable Möglichkeit die Tätigkeiten und Vorgänge des Wiki nach eigenen Maßstäben zu kontrollieren oder zu dokumentieren.

WikiHooks setzt den erfahrenen Umgang mit den MediaWiki Variablen und Klassen voraus, ebenso die Kenntnis von Art und Weise der Hook-Events. Für den User sei dabei ebenfalls die Kenntnis im Erstellen von serverseiteigen Skripten vorausgesetzt, sowie ein Verständnis im Auslesen von http-Requests. Die verwendete Programmiersprache spielt dabei jedoch keine Rolle. Der durchschnittliche Leser eines Wiki wird aus diesem Plugin jedoch keinen weiteren Nutzen ziehen können. Ebenso wie User, die sich nur gelegentlich als Autoren des Wiki betätigen.

WikiHooks ist also vor allem an solche Personen gerichtet, die innerhalb eines MediaWiki sehr aktiv sind und sich auch außerhalb der Wikiumgebung intensiv am Web 2.0 beteiligen.

[...]


1) ermittelt durch den Informationsservice Google Alerts

2) auszugsweise dem Blog von F. Cargnelutti 13 entnommen

3) gemessen an Anzahl und Umfang der zum Betreiben der Engine ben ö tigten Dateien

[1] http://wiki.webhooks.org (Kapitel 2, Seite 7)

[2] http://code.google.com/p/pubsubhubbub (Kapitel 2, Seite 7)

[3] http://blog.webhooks.org/about (Kapitel 2 , Seite 8)

[4] http://www.slideshare.net/progrium/web-hooks-and-the-programmable-world-oftomorrow-presentation (Kapitel 2, Seite 8)

[5] http://www.slideshare.net/progrium/using-web-hooks (Kapitel 2, Seite 8)

[6] http://mitcho.com/code/hookpress/ | http://mitcho.com (Kapitel 2 , Seite 8)

[7] http://www.paypalobjects.com/de_DE/html/IntegrationCenter/ic_ipn.html (Kapitel 2, Seite 8)

[8] http://de.wikipedia.org/wiki/MediaWiki (Kapitel 2, Seite 8)

[9] http://www.wikiindex.org (Kapitel 2, Seite 9)

[10] http://de.wikipedia.org/wiki/Liste_von_Wiki-Software (Kapitel 2, Seite 9)

[11] http://www.mediawiki.org/wiki/Manual:Hooks (Kapitel 2, Seite 9)

[12] http://www.mediawiki.org/wiki/Category:All_extensions (Kapitel 2, Seite 10)

[13] http://blog.fedecarg.com/2008/03/08/20-mediawiki-extensions-you-should-be-using/ (Kapitel 2, Seite 11)

[14] http://www.mediawiki.org/wiki/Manual:Extensions (Kapitel 2, Seite 11)

[15] http://php.net (Kapitel 2, Seite 12)

[16] http://de.wikipedia.org/wiki/PHP (Kapitel 2, Seite 12)

[17] http://de.wikipedia.org/wiki/AJAX (Kapitel 2, Seite 12)

[18] http://de.wikipedia.org/wiki/JSON (Kapitel 2, Seite 13)

[19] http://de.wikipedia.org/wiki/WordPress (Kapitel 2, Seite 13)

[20] http://de.wordpress.com/ (Kapitel 2, Seite 13)

[21] http://jquery.com (Kapitel 2 , Seite 13)

[22] http://m-software.de/snoopy.php (Kapitel 2, Seite 13)

Excerpt out of 68 pages

Details

Title
WikiHooks. Eine protoypenhafte Webhook Extension für MediaWiki
College
Stralsund University of Applied Sciences
Grade
1,0
Author
Year
2011
Pages
68
Catalog Number
V175482
ISBN (eBook)
9783640964529
ISBN (Book)
9783640964727
File size
2725 KB
Language
German
Keywords
WikiHooks, Webhooks, MediaWiki, Extension, Realtime
Quote paper
Robert Zeschke (Author), 2011, WikiHooks. Eine protoypenhafte Webhook Extension für MediaWiki, Munich, GRIN Verlag, https://www.grin.com/document/175482

Comments

  • No comments yet.
Look inside the ebook
Title: WikiHooks. Eine protoypenhafte Webhook Extension für MediaWiki



Upload papers

Your term paper / thesis:

- Publication as eBook and book
- High royalties for the sales
- Completely free - with ISBN
- It only takes five minutes
- Every paper finds readers

Publish now - it's free