,QKDOWVYHU HLFKQLV ,QKDOWVYHU HLFKQLV ,QKDOWVYHU HLFKQLV
Zusammenfassung 4
Kapitel 1 : Einleitung 5
1.1 Einführung 5
1.2 Ziele der Bachelorarbeit 5
1.3 Arbeitsübersicht 6
Kapitel 2: Webhooks, MediaWiki und andere grundlegende Technologien 7
2.1 Was sind Webhooks? 7
2.2 Der Einsatz von Webhooks im Internet. 8
2.3 Was ist ein Media-Wiki? 8
2.4 MediaWiki und Webhooks 9
2.5 Wiki-Extensions 10
2.5.1 Was ist eine Extension? 10
2.5.2 Welche Extensions gibt es für MediaWiki? 10
2.5.3 Was ist bei der Programmierung einer MediaWiki-Extension zu beachten? 11
2.6 Programmierung im MediaWiki: Welche Programmiertechniken können sinnvoll für
WikiHooks eingesetzt werden? 12
2.6.1 PHP und HTML 12
2.6.2 JavaScript und AJAX 12
2.6.3 SQL und JSON 12
2.7 Was ist Wordpress? 13
Hookpress - Webhooks für Wordpress: 14
2.8 Vergleich von MediaWiki und Wordpress 15
Kapitel 3: Funktionalität von WikiHooks 15
3.1 An welche Nutzer richtet sich WikiHooks? 15
3.2 Wie funktioniert WikiHooks? 16
3.2.1 Beispiel für die Verwendung von WikiHooks 21
3.3 Welche Vorteile bietet WikiHooks? 23
3.4 Technologische Zusammenhänge und Voraussetzungen 24
3.4.1 Arbeiten mit der Wikiumgebung 25
3.4.2 Aufgabe von JavaScript , AJAX und JSON 26
3.4.3 Ressourcenverbrauch durch WikiHooks 30
3.4.4 Weiterleitung der Informationen 30
2
3.5 Vergleich von Hookpress und Wikihooks 32
3.5.1 Gemeinsamkeiten 32
3.5.2 Unterschiede 32
3.6 Sicherheit 33
Kapitel 4: Durchführung der Entwicklung 34
4.1 Arbeitsumgebung 34
4.2 Vorgehensweise 35
4.2.1 Vorbereitung 36
4.2.2 Durchführung 36
4.3 Experimente 40
4.4 Externe Skripte 60
4.5 Probleme 61
Kapitel 5: Zusammenfassung der Arbeitsergebnisse 63
5.1 Welche Ziele wurden erreicht? 63
5.2 Welche Verbesserungen sind möglich? 63
5.3 Welche Alternativen gibt es? 64
5.4 Welche Maßnahmen fehlen für eine Veröffentlichung? 64
5.5 Fazit 65
Anhang 66
A1 Abkürzungsverzeichnis 66
A2 Abbildungsverzeichnis 66
A3 Tabellenverzeichnis 67
A4 Quellenverzeichnis 67
Literaturverzeichnis 67
Internetverzeichnis 67
3
=XVDPPHQIDVVXQJ XVDPPHQIDVVXQJ XVDPPHQIDVVXQJ =
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.
4
.DSLWHOO .DSLWHO(LQOHLWXQJ (LQOHLWXQJ (LQOHLWXQJ .DSLWHOO .DSLWHOO
(LQIKUXQJ (LQIKUXQJ (LQIKUXQJ
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.
=LHOHHGHUU%DFKHORUDUEHLW =LHOHHGHUU%DFKHORUDUEHLW =LHOHHGHUU%DFKHORUDUEHLW =LHOHHGHUU%DFKHORUDUEHLW
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
5
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.
$UEHLWVEHUVLFKW $UEHLWVEHUVLFKW $UEHLWVEHUVLFKW $UEHLWVEHUVLFKW
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 Programmierparadigmen 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.
6
.DSLWHO :HEKRRN :HEKRRN :HEKRRN :HEKRRNV V V0HGLD:LNL 0HGLD:LNL 0HGLD:LNL XQGDQGHUHHJUXQGOHJHQGHH XQGGDQGHUHJUXQGOHJHQGH XQGGDQGHUHJUXQGOHJHQGH XQGGDQGHUHJUXQGOHJHQGH .DSLWHO .DSLWHO
7HFKQRORJLHQ 7HFKQRORJLHQ 7HFKQRORJLHQ 7HFKQRORJLHQ
:DVVLQG:HEKRRNV" :DVVLQG:HEKRRNV" :DVVLQG:HEKRRNV" :DVVLQG:HEKRRNV"
“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 Lindsay [1]
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 PubSubHubbub [2] , 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
7
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.
'HUU(LQVDW]YRQ:HEKRRNVLP,QWHUQHW 'HUU(LQVDW]]YRQQ:HEKRRNVLP,QWHUQHW 'HUU(LQVDW]]YRQQ:HEKRRNVLP,QWHUQHW
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 NASA [3] und beschäftigt sich mit den Möglichkeiten und Vorteilen von Webhooks in mehreren sehr umfangreichen Präsentationen [4][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 1 .
Die bereits erwähnte und für die vorliegende Arbeit ausschlaggebende Wordpressimplementierung „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 einzurichten [7] .
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.
:DVVLVWHLQQ0HGLD :DVLVWWHLQQ0HGLD :DVLVWWHLQQ0HGLD :LNL" :LNL" :LNL"
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
1 ) ermittelt durch den Informationsservice Google Alerts
8
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 verpasst [8] . 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 verzeichnet [9] .
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 Wiki-Engines, 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 Inhalte [10] . Auf Grund der ungleich höheren Bekanntheit von Wikipedia, ist die MediaWiki-Engine wohl eine der am meisten verwendeten.
0HGLD:LN 0HGLD:LNLLXQG:HEKRRNV LXQG:HEKRRNV LXQG:HEKRRNV LXQG:HEKRRNV 0HGLD:LN 0HGLD:LN
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 Hooks [11] 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
9
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.
:LNL :LNL :LNL ([WHQVLRQV ([WHQVLRQV ([WHQVLRQV
:DVVLVWHLQHH([WHQVLRQ" :DVVLVWWHLQHH([WHQVLRQ" :DVVLVWWHLQHH([WHQVLRQ" :DVVLVWWHLQHH([WHQVLRQ"
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.
:HOFKHH([WHQVLRQVVJLEWWHVIU0HGLD:LNL" :HOFKHH([WHQVLRQVVJLEWHVVIUU0HGLD:LNL" :HOFKHH([WHQVLRQVVJLEWHVVIUU0HGLD:LNL" Aufgrund der enormen Beliebtheit als Wissensplattform, kann die MediaWiki-Community auf über 1600 unabhängige Extensions zurückgreifen [12] . 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.
10
Tabelle 1 zeigt eine kleine Auswahl an nützlichen MediaWiki Erweiterungen 2 :
7DEHOOH 0HGLD:LNL([WHQVLRQV 0HGLD:LNLL([WHQVLRQV 0HGLD:LNLL([WHQVLRQV 7DEHOOH 7DEHOOH
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.
:DVV LVWW EHLL GHUU 3URJUDPPLHUXQJ HLQHUU 0HGLD:LNL ([WHQVLRQQ ]XX :DVV LVWW EHLL GHUU 3URJUDPPLHUXQJ HLQHUU 0HGLD:LNL ([WHQVLRQQ ]XX :DVV LVWW EHLL GHUU 3URJUDPPLHUXQJ HLQHUU 0HGLD:LNL :DVV LVWW EHLL GHUU 3URJUDPPLHUXQJ HLQHUU 0HGLD:LNL ([WHQVLRQQ ]XX ([WHQVLRQQ ]XX EHDFKWHQ" EHDFKWHQ" EHDFKWHQ" EHDFKWHQ"
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 Plugins [14] . 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 ) auszugsweise dem Blog von F. Cargnelutti [13] entnommen
11
3URJUDPPLHUXQJ 3URJUDPPLHUXQJ 3URJUDPPLHUXQJ 3URJUDPPLHUXQJ
N|QQHQVLQQYROO IUU:LNL+RRNV IUU:LNL+RRNV IUU:LNL+RRNV N|QQHQVLQQYROO IUU:LNL+RRNV N|QQHQVLQQYROO N|QQHQVLQQYROO 3+33XQG+70/ 3+33XQGG+70/ 3+33XQGG+70/ 3+33XQGG+70/
Der Programmcode des Wiki besteht zum größten Teil aus der serverseitigen Skriptsprache PHP [15] , ein rekursives Akronym für HypertextPreprocessing [16] . 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“.
-DYD6FULSWWXQG$-$;; -DYD6FULSWXQG$-$;; -DYD6FULSWXQG$-$;; -DYD6FULSWXQG$-$;;
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.
64/XQG-621 64/XQGG-621 64/XQGG-621 64/XQGG-621
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
12
Installierung der Extension dagegen. Stattdessen wurden die bereits vorhanden SQL-Strukturen 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 strukturieren [18] . 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.
:DVVLVW:RUGSUHVV" :DVVLVW:RUGSUHVV" :DVVLVW:RUGSUHVV" :DVVLVW:RUGSUHVV"
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 angelangt [19] . Ä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 vorzunehmen [20] .
Wordpress ist weniger umfangreich als die MediaWikiumgebung 3 , bietet jedoch ebenfalls viele Funktionen und Erweiterungsmöglichkeiten. Zum Umfang des Systems gehören dabei auch einige nützliche Frameworks, wie zum Beispiel jQuery [21] oder auch Snoopy [22] . Dadurch werden auch automatisch die Voraussetzung für die Verwendung der JavaScript Paradigmen AJAX und JSON erfüllt.
3 gemessen an Anzahl und Umfang der zum Betreiben der Engine benötigten Dateien
13
+RRNSUHVVV +RRNSUHVVV² ² :HEKRRNVIUU:RUGSUHVV :HEKRRNVVIU:RUGSUHVV :HEKRRNVVIU:RUGSUHVV ²² :HEKRRNVVIU:RUGSUHVV +RRNSUHVVV +RRNSUHVVV
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.
7DEHOOH +RRNSUHVVV'DWHLHQ +RRNSUHVVV'DWHLHQ +RRNSUHVVV'DWHLHQ 7DEHOOH +RRNSUHVVV'DWHLHQ 7DEHOOH 7DEHOOH
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.
14
Arbeit zitieren:
Robert Zeschke, 2011, WikiHooks - Eine protoypenhafte Webhook Extension für MediaWiki, München, GRIN Verlag GmbH
Dieser Text kann über folgende URL aufgerufen und zitiert werden:
Einbetten
DOI
Formatvorlage (Microsoft Word) für eine Diplomarbeit, Masterarbeit, Ha...
Für MS Word 2003 - Update 2010
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 25 Seiten
Formatvorlage (OpenOffice) für eine Diplomarbeit, Masterarbeit, Hausar...
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 35 Seiten
Formatvorlage / Vorlage zur Erstellung einer Diplomarbeit, Bachelorarb...
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 15 Seiten
Formatvorlage / Vorlage für eine Diplomarbeit / Hausarbeit
Für MS Word 2007 - dotx
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 25 Seiten
Anleitung zum Erstellen schriftlicher Arbeiten: Der Aufbau einer wisse...
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 20 Seiten
Erstellen einer schriftlichen Hausarbeit
Vorlagen, Muster, Formulare, Infobroschüren
Hausarbeit, 14 Seiten
Grundtechniken wissenschaftlichen Arbeitens
Bibliografieren - Reden - Schr...
Vorlagen, Muster, Formulare, Infobroschüren
Skript, 46 Seiten
Ratgeber zur Erstellung wissenschaftlicher Arbeiten. Diplomarbeiten - ...
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 39 Seiten
Informatik - Wirtschaftsinformatik: neuer Titel erschienen: WikiHooks - Eine protoypenhafte Webhook Extension für MediaWiki
Robert Zeschke hat einen neuen Text hochgeladen
Realtime Physics Active Learning Laboratories Module 1: Mechanics
David Sokoloff, Ronald K. Thornton, Priscilla W. Laws
Realtime Physics Active Learning Laboratories Module 2: Heat and Therm...
David Sokoloff, David R. Sokoloff, Ronald K. Thornton
Realtime Physics, Active Learning Laboratories Module 3: Electric Circ...
David Sokoloff, Priscilla W. Laws, Ronald K. Thornton
Realtime Physics, Active Learning Laboratories Module 4: Light and Opt...
David Sokoloff, Priscilla W. Laws, Ronald K. Thornton
0 Kommentare