Webhooks - was genau ist das und was kann damit JAVA

beta20

Top Contributor
Hallo,

ich habe eine Frage was Webhooks angeht.
Prinzipiell verstehe ich das Konzept. Es wird ein Event ausgelöst, z-B. Order wurde in einen anderen Status versetzt.
Nun wird eine vordefinierte URL aufgerufen, anschließend kann das 3 Party Programm weitere Dinge machen (Rechnung verschicken etc.)

Folgende Fragen habe ich aber:
a) Wie muss so ein Aufruf in JAVA aussehen? (wäre ja dann mein Client)
b) Wie muss ein Webhook auf meinem Server aussehen (ich nehme den Webhook entgegen)
c) Wie muss die URL aussehen?
d) Wie können Parameter übergeben werden (bspw. OrderNummer)

Danke für jede Hilfe.
 
a) Wie muss so ein Aufruf in JAVA aussehen? (wäre ja dann mein Client)
https://stackoverflow.com/questions/1485708/how-do-i-do-a-http-get-in-java
b) Wie muss ein Webhook auf meinem Server aussehen (ich nehme den Webhook entgegen)
Es gibt hier viele Möglichkeiten. Eine wäre, ein Java Servlet zu schreiben, und es mittels eines Java Servlet Containers laufen zu lassen. Eine weitere wäre https://stackoverflow.com/questions...in-java-using-only-java-se-api#answer-3732328
Noch weitere wären, die API von Netty, Jetty, Tomcat, Undertow etc. direkt zu verwenden.
Die Frage ist also eigentlich: "Wie schreibe ich einen Web Server?"
c) Wie muss die URL aussehen?
Naja... der Hostpart muss deinen Server ansprechen, der Port muss der Port auf deinem Server sein. Der Pfad muss, falls du einen Servlet Container verwendest, dem Context-Pfad deines Servlets entsprechen. Ab dann sind deiner Fantasie keine Grenzen gesetzt.
Die Frage ist viel zu generisch gestellt kann eigentlich beantwortet werden mit: https://tools.ietf.org/html/rfc1738 bzw. https://tools.ietf.org/html/rfc3986
d) Wie können Parameter übergeben werden (bspw. OrderNummer)
Beliebig. Als URL-Pfadparameter, als URL-Queryparameter, als HTTP Body (dann via einer HTTP Methode, die einen Body akzeptiert POST/PUT/...), als HTTP Header, ...

Du solltest dich hier generell einmal in HTTP im Allgemeinen einlesen.
 
Also generell geht es mir von meiner App einen Webhook zu senden.
Ich habe hierzu mal bei einer anderen Applikation mir das angeschaut.

Hierzu wird in einer Entity "Webhooks" das gespeichert:
- URL (www.externeseite.de/webhooks/
- Event (z.B. createContract)

Nun meine Fragen:
1) Wenn ich mehrere Webhooks für verschiedene Events habe, muss dann die URL des Clients auch immer unterschiedlich sein, oder geschieht die Unterscheidung durch einen Parameter, der mitgegeben wird (eventType=createContact z.B.)

2) Hat jemand ein Beispielcode für die Implementierung auf dem Server?

3) Bekommt der Server auch wieder eine Rückmeldung, oder sendet er den Webhook nur zurück? Was passiert zB wenn der Client offline ist, oder die URL nicht stimmt? Kommt dann ein Fehlercode zurück?

4) Wie übergebe ich die Objekte? Bspw. ich möchte, dass der Client mein Objekt "Invoice" bekommt, sodass er auf seiner Applikation die Invoicenummer verarbeiten kann etc.?

Vielen Dank für jede Hilfe
 
Also wenn ein WebHook aufgerufen wird, dann wird eine entsprechende Rückmeldung erwartet. Sprich: Es gibt ein HTTP Request und es wird ein Response erwartet (200 OK HTTP).

Was passiert, wenn ein Client nicht erreichbar ist oder ein Fehler auftritt, muss natürlich der Server bestimmen. Das kann z.B. gelogt werden, damit sich das jemand anschauen kann.

Und was da mit gegeben wird, wird natürlich genau definiert. Man kann sich einfach einmal ein Beispiel ansehen, wie sowas aussehen kann: Github hat Webhooks implementiert und hat genau definiert, wie diese aussehen:
https://developer.github.com/webhooks/

Da kann man sehr gut erkennen, dass einfach nur ein HTTP Request beschrieben wird bzgl.
URL (Die wird hier nicht genutzt, aber könnte natürlich auch Informationen enthalten)
Header (Hier werden spezielle Header gesetzt, die beschrieben sind.
Payload (Die eigentlichen Daten, die mit gegeben werden.)

Und man kann natürlich auch direkt am dort gegebenen Beispiel erkennen: Es gibt standard Header, die man kennen muss, denn daran richtet sich auch das Payload aus. So wird dort json verwendet für den Payload so dass Content-Type auf application/json gesetzt ist.

So eine Beschreibung muss man natürlich erstellen, wenn man selbst Webhooks anbieten will. Und wenn man nur Webhooks empfangen möchte, dann sollte man beim Anbieter nach einer solchen Dokumentation fragen.
 

Zurück
Oben