Um den Ablauf einer Anwendung zu beeinflussen, diese zu erweitern oder um bestimmte Ereignisse abzufangen, verwendet man sogenannte Hooks (englisch für Haken). Dabei handelt es sich um eine Funktion, die den Ablauf eines fremden Programmes an bestimmten Stellen in eine eigene Anwendung integriert, ohne die ursprüngliche Codebasis zu verändern.
Hooks können dabei direkt im modifizierten Quellcode integriert werden. Alternativ erfolgt die Integration über Konfigurationsdateien, wodurch der Ablauf eines fertigen Programms verändert wird. Sie können aber auch über den Aufruf von Funktionen vom auszuführenden Programmcode gestartet werden.
Bei Hooks unterscheidet man zudem zwischen asynchroner und synchroner Ausführung.
Asynchron (fire and forget)
Nachdem ein Hook gestartet wurde, läuft die Anwendung sofort weiter und wartet nicht auf die Rückmeldung des ausgeführten Hooks. Diese Form wird zumeist bei Notifications (zu Deutsch: Benachrichtigungen) verwendet. Als Beispiel: Ein Nutzer hat sich erfolgreich in einer Anwendung registriert und durch einen Asynchronen Schritt bekommt der Admin der Anwendung eine Nachricht über die Registrierung. Die Anwendung selbst läuft derweil weiter.
Synchron
Beim einfachen synchronen Schritt wartet die Anwendung bis der Hook vom Programm verarbeitet wurde. Ein möglicher Rückgabewert wird dabei aber nicht verarbeitet.
Synchron mit Berücksichtigung des Rückgabewertes
Darüber hinaus gibt es noch den synchronen Schritt, bei dem der Rückgabewert berücksichtigt wird. Ein Beispiel wäre den externen Service zu befragen, ob eine E-Mail-Adresse, die zur Anmeldung verwendet wird, zulässig ist.
Vergleichen kann man die zuvor genannten Schritte mit einem Zeitungsjungen. Beim asynchronen Schritt fährt er stur die Straße entlang und wirft die Tageszeitungen vor jede Haustür. Beim einfachen synchronen Schritt steigt er ab, hält jedem Empfänger die Zeitung hin und wartet nur so lange bis diese entgegengenommen wurde. Dabei spielt es keine Rolle, ob es die richtige Zeitung war oder nicht. Beim synchronen Schritt mit Rückgabewert läuft es ähnlich ab wie beim einfachen synchronen Schritt. Der Unterschied ist der, dass wenn es die falsche Zeitung war, erfolgt im Anschluss eine Aktion. Zum Beispiel die Übergabe der richtigen Zeitung.
Bei Engity verwenden wir den asynchronen Schritt und den synchronen Schritt mit Rückgabewert für die drei folgenden Arten von Hooks:
Webhooks
Sind durch ein Event ausgelöste automatisierte Nachrichten, die von einer Webanwendung an eine andere gesendet werden. Technisch gesehen handelt es sich dabei um eine HTTP-Callback oder HTTP-POST-Anforderung. Sprich um die angeforderten Daten zu erhalten, wird eine HTTP-POST-Message an eine dafür vorbereitete URL gesendet.
Serverseitige (Server-side) Hooks
Sind Codesnippets die auf der Skriptsprache LUA basieren und die auf den Servern von Engity abgelegt werden. Synchrone Schritte lassen sich mit Serverseitigen Hooks schneller ausführen, da die Serverübegreifende Kommunikation entfällt.
Generic Hooks
Im Grunde handelt es sich dabei um vordefinierte Templates, die teilweise anpassbar sind und sich wie Serverseitige Hooks verhalten. Sprich es handelt sich nicht um Codesnippets die, wie bei Serverseitigen Hooks vom Kunden auf dem Engity Server abgelegt werden.