Web-Haken

Wie Sie sich über eine Änderung in ABRA Flexi informieren können

Lenka Haringerová avatar
Verfasst von Lenka Haringerová
Vor über einer Woche aktualisiert

Web-Haken

Web Hooks sind eine Möglichkeit, sich in Echtzeit über Änderungen in ABRA Flexi in Ihrer Anwendung zu informieren. Das Prinzip ist einfach: Bei einer Änderung in der ABRA Flexi-Datenbank wird eine POST-HTTP-Anfrage (in der Regel innerhalb weniger Sekunden) an alle registrierten URLs gesendet. Der Inhalt der Anfrage ist eine Auflistung der Änderungen seit dem letzten Hook-Aufruf, und zwar in demselben Format, das Sie von ABRA Flexi über die Changes API erhalten.

Verfahren

Die Änderungs-API muss aktiviert sein. Außerdem müssen Hooks in der Konfigurationsdatei ABRA Flexi Server flexibee-server.xml aktiviert werden(Speicherort der Verzeichnisse flexibee-server.xml):

...<entry key="enableHooks">true</entry>....

Der Grund dafür ist, dass beim Start des Servers der Kernel sofort gestartet werden muss (siehe auch automatischer Kernel-Start), was eine zeitaufwändige Operation ist. Hinweis: Wenn Sie enableHooks auf true gesetzt haben, ist es nicht notwendig, startKernel zu setzen.

Der Haken wird mit einer PUT- (oder POST-) Anfrage an /c/{firmen-ID}/hooks mit den folgenden Parametern registriert:

obligatorisch

?url=http://muj.server.cz/hook.php

Aufzurufende URL

?format=XML

Datenformat (mögliche Werte sind XML und JSON)

optional

?lastVersion=123

Die Version, ab der die nächsten Änderungen gesendet werden, d. h. die nächsthöhere Version. Der Standardwert ist gleich der aktuellen globalen Version(globalVersion) zum Zeitpunkt der Registrierung des Hooks. Zulässige Werte sind aus dem Intervall: [0, globalVersion].

?secKey=MyHookSecretToken0687

Eine beliebige Zeichenkette, die mit jeder HTTP-Header-Änderungsmeldung gesendet wird. Sie dient dazu, auf einfache Weise zu überprüfen, ob die eingehende Benachrichtigung zu Ihrem registrierten Haken gehört. Der Name des Schlüssels im HTTP-Header lautet X-FB-Hook-SecKey.

?skipUrlTest=true

Unterdrücken Sie den Funktionstest der übergebenen URL.

Zum Beispiel:

curl -u user:password -L -k -X PUT "https://localhost:5434/c/{firmen-ID}/hooks.xml?url=http://muj.server.cz/hook.php&format=XML&lastVersion=123&secKey=MyHookSecretToken0687"

Bei der Registrierung wird ein Test der übergebenen URL durchgeführt, indem eine leere Benachrichtigung gesendet wird. Ist der Rückgabecode anders als 2xx, wird der Haken nicht registriert. Die Ausführung des Tests kann mit dem Parameter skipUrlTest außer Kraft gesetzt werden.

ABRA Flexi unterstützt SNI seit Version 2017.1.1. Dies bedeutet, dass es möglich ist, Haken zu registrieren, die auf einen virtuellen HTTPS-Host zeigen.

Derzeit ist es nicht möglich, festzulegen, auf welche Registrierungen sich der Haken beziehen soll, er wird immer über alle Änderungen in ABRA Flexi informiert.

Wie üblich wird ein Erfolg mit dem Statuscode 200 und ein Misserfolg mit dem Code 400 gemeldet (die Antwort enthält eine textliche Beschreibung der Ursache).

Eine Liste der registrierten Hooks befindet sich unter /c/{firmen-ID}/hooks, nicht registrierte Hooks können unter /c/{firmen-ID}/hooks/{id} DELETE angefordert werden.

Hook-Verhalten im Fehlerfall

Wenn ein Fehler bei der Verarbeitung von Hooks auftritt, versucht der Server, die Anfragen erneut zu senden. Wenn der Haken weiterhin ausfällt, beginnen sich die Hakenrufe zu verzögern. Wenn der Dienst nicht verfügbar ist, wird jeder Anruf in der Regel später gestartet. Zu diesem Zweck wird eine Strafe verwendet, um die Zeit zwischen den Versuchen darzustellen.

Sie können die aktuelle Strafe mit GET abrufen:

curl -u user:password -L -k "https://localhost:5434/c/{firmen-ID}/hooks/{id}.xml"

Das Zurücksetzen der Strafe und der sofortige Aufruf von Hooks gewährleistet eine PUT-Anforderung:

curl -u user:password -L -k -X PUT "https://localhost:5434/c/{firmen-ID}/hooks/{id}/retry"

Die registrierten Hooks werden in der Datenbank gespeichert, so dass der Hook auch nach einem Neustart des Servers gesendet wird. Der Dienst garantiert, dass keine Änderungen verloren gehen und alle an den registrierten Haken weitergeleitet werden.

Empfehlungen für die Umsetzung der Haken

Der gesamte Mechanismus funktioniert nach dem Prinzip des besten Bemühens. Das bedeutet, dass wir zwar versuchen, die Meldungen so schnell wie möglich zuzustellen und Doppelmeldungen zu vermeiden, aber wir müssen auch berücksichtigen, dass es zu Verzögerungen oder Doppelmeldungen kommen kann (einfach dieselbe Anfrage mehrmals zustellen). Um Doppelungen zu vermeiden, können Sie globalVersion behandeln.

Die Bearbeitung des Hooks sollte so wenig Zeit wie möglich in Anspruch nehmen (< 15 Sekunden) und darf auf keinen Fall länger als 30 Sekunden dauern, da der Aufruf sonst als Fehlschlag gewertet wird. Die Antwort muss einen Statuscode von 200 (oder 2xx) haben und sollte keinen Text enthalten. Wird eine dieser Bedingungen verletzt, wird der Hook bestraft (d.h. er wird für einige Zeit überhaupt nicht aufgerufen) und im Extremfall sogar ganz abgeschaltet.

Die ideale Hook-Implementierung führt nur die Persistenz der empfangenen Änderungen durch, wobei eine schnelle Filterung nach relevanten Änderungen möglich ist und Duplikate (bereits verarbeitete Änderungen) übersprungen werden. Die eigentliche Verarbeitung der empfangenen Änderungen sollte asynchron in einem unabhängigen Thread ablaufen.

Andere unterstützte Antwortstatuscodes

Zusätzlich zur klassischen 200-Status-Bestätigung unterstützt die Hook-Verarbeitung die folgenden Optionen in den Antworten:

301 (Moved Permanently) / 308 (Permanent Redirect)Falls die Weiterleitung zu einer gültigen URL führt, wird die registrierte Hook-Adresse aktualisiert und nach einer kurzen Strafe werden die Änderungen an die neu registrierte Adresse gemeldet. 410 (Gone) Es wird davon ausgegangen, dass der Haken endgültig gelöscht wurde, und auf der ABRA Flexi Seite wird er automatisch abgemeldet.

Hat dies Ihre Frage beantwortet?