// der php hacker

// archiv

Webhooks mit PHP

Geschrieben am 13. Jan 2009 von Cem Derin

hooks_d

Heute ein paar Gedanken zu Webhooks, deren Sinn und das man sie doch bitte so schnell wie möglich so häufig wie möglich anbieten solle.

Was sind Hooks?

In erster Linie ist ein Hook – wie man an meiner unglaublich kreativen Illustration erkennen kann – ein Haken. Allerdings nicht einer der Negativen, die man immer bei zu toll klingenden Sachen sucht, sondern ein durchaus Nützlicher und Brauchbarer. An diesen Haken hängen wir nämlich unseren Code.

Hooks kennt man zum Beispiel schon von SVN. Stellen wir uns folgende Situation vor: Nach jedem Commit in unser Repository soll das Team benachrichtigt werden, dass ein neuer Commit stattgefunden hat. Jetzt hätten die SVN-Entwickler eine solche Funktionalität direkt in die Software einbauen können. Würde auch Sinn ergeben, denn ein solcher Anwendungsfall ist durchaus üblich.

Stellen wir uns aber nun weiter vor, dass wir nach jedem Commit in den Hauptentwicklungszweig eine Version auf einem Testserver deployen wollen. Auch ein solcher Anwendungsfall ist ziemlich häufig anzutreffen. Spätestens wenn es darum geht, wie eine solche Deployroutine aussehen könnte, wäre den SVN-Entwickler aber aufgefallen, dass sie ja gar nicht wissen, um was für eine Programmiersprache es sich handelt. Schließlich könnte die Software statt in PHP genau so gut in Java, in ASP, in Perl oder in sonst einer Programmiersprache geschrieben worden sein. Oder ganz anders: Es handelt sich gar nicht um ein Webprojekt, sondern um eine Desktopsoftware.

Da haben sich die Entwickler von SVN einem Prinzip bedient, das alles andere als neu ist: Sie haben Haken in Ihre Software eingabaut, an die wir unsere Programmteile hängen können. In SVN sind das zum Beispiel post- oder pre-commit hooks. Scripte, die bei bestimmten Aktionen ausgeführt werden. Diese können in jeder beliebigen Sprache verfasst sein und dahingehend so ziemlich alles machen, was man sich vorstellen kann.

Wofür Hooks in Webdiensten?

Derzeit läuft alles im Netz nach einem ziemlich nervigen Prinzip ab. Im Fachjargon nennt man das Pull. Für den Laien ist es als das nervige Fragen der kleinen Gören auf dem Weg in den Familienurlaubsort bekannt.

Sind wir schon da?

Nein!

Sind wir schon da?

Nein!

Sind wir schon da?

Nein!

Sind wir schon da?

Ja, jetzt sind wir da!

Für beide Seiten wäre es wesentlich entspannter, wenn man nicht ständig nachfragen würde, sondern bescheid gesagt wird, sobald man denn tatsächlich da ist. Und genau das ist das Prinzip der Webhooks. Es wird gepusht, sobald etwas passiert. Dazu hinterlasst man nicht anderes als eine Adresse, hinter der sich ein Script verbirgt, das genau das macht, was man will. Dieses kann in jeder beliebigen Sprache verfasst sein, und somit jede nur erdenkliche Erweiterung für den Service bieten.

Aber viele Services bieten APIs an! Warum nicht diese benutzen?

APIs sind in erster Linie dafür gedacht, auf bestimmte Funktionen des Programmes zuzugreifen. Dabei steuern aber auch wir wieder die API an und nicht die API unser Script. Bei Hooks läuft das genau anders herum.  So kann man Hooks also durchaus sinnvoll mit den klassischen APIs kombinieren und die herkömmliche Struktur um ein sinnvolles Feature ergänzen. Hooks sollen APIs also nicht ablösen. Im Gegenteil.

Das Foto stammt von Daniel Jaeger.


#001
14. Jan 2009

Vielleicht könntest du mal ein kleines Tutorial schreiben wie man SVN Hooks einrichtet. Ich selber habe dies noch nicht gemacht, wäre nett mal hierüber was zu lesen.

// kommentieren

// senden
theme von mir, software von wordpress, grid von 960 grid system. funktioniert in allen browsern, aber der safari bekommt das mit der schrift am schönsten hin.