# Kann Anbieter eines (REST) Webservice seine Konsumenten automatisch benachrichtigen?



## MrX (20. Jul 2017)

Hallo zusammen,
ich beschäftige mich derzeit mit (REST) Webservices und habe eine Frage, die ich aus Diskussion mit Kollegen und Internetrecherche bisher nicht beantworten konnte:
Funktioniert ein Webservice grundsätzlich so, dass der Nutzer eines Webservice aktiv beim Service-Anbieter durch Aufruf entsprechender URL nachfragen muss, um den Service zu nutzen, oder ist es auch möglich, dass ein Webservice dessen Nutzer (z.B. durch Registrierung am WS) automatisch mit Daten versorgt, ohne dass diese aktiv nachfragen?
In der aktuellen Literatur finde ich nur Beispiele bzgl. aktivem Nachfragen des Konsumenten beim Anbieter.

Hintergrund:
Es sollen Datensätze vom Webservice zum Abruf angeboten werden, die Konsumenten sollen aber nicht aktiv danach "fragen", sondern sich am Webservice "registrieren" (?) und somit über neue/update/delete Datensätze automatisch informiert werden.

Wenn es für meine Frage ein Beispiel, Link oder sonstiges Infomaterial gibt, danke schon einmal für eure Hilfe!


----------



## Thallius (20. Jul 2017)

Jetzt überleg doch einmal. Wie soll er denn informiert werden? Soll der Postbote ihm ein Paket bringen? Ich glaube nicht. Er soll sich die Daten in einer App, Programm oder was auch immer ansehen. Was muss er also machen? Er muss diese App starten. Was macht dann dieser App? Sie schaut nach ob es was neues gibt. Du brauchst also die andere Richtung gar nicht.

Ansonsten sind Notifications dafür gedacht den User darauf aufmerksam zu machen das es etwas neues gibt. Diese schicken aber eben nur die Info "Es gibt was neues in einem Satz" und dann muss der User immer noch die App öffnen und sich die Daten ansehen.

Gruß

Claus


----------



## MrX (20. Jul 2017)

Hi,


Thallius hat gesagt.:


> Jetzt überleg doch einmal. Wie soll er denn informiert werden? Soll der Postbote ihm ein Paket bringen? Ich glaube nicht.


=> Überflüssig



Thallius hat gesagt.:


> Er soll sich die Daten in einer App, Programm oder was auch immer ansehen. Was muss er also machen? Er muss diese App starten. Was macht dann dieser App? Sie schaut nach ob es was neues gibt. Du brauchst also die andere Richtung gar nicht.


Dass man "die andere Richtung nicht braucht" hängt wohl eher stark vom Szenario ab. Wenn der Serviceanbieter nur alle paar Stunden einen neuen Datensatz zur Verfügung stellt, der Nutzer aber sekündlich beim Anbieter nachfragt, um zeitnah die Daten konsumieren zu können, ist dies aus Performance-Gründen sicherlich nicht ratsam?

Deswegen hört sich der Hinweis bzgl. "Notifications" aus meiner Sicht gut an: 



Thallius hat gesagt.:


> Ansonsten sind Notifications dafür gedacht den User darauf aufmerksam zu machen das es etwas neues gibt. Diese schicken aber eben nur die Info "Es gibt was neues in einem Satz" und dann muss der User immer noch die App öffnen und sich die Daten ansehen.



Bzgl. Notifications habe ich in der Tat jetzt noch nichts gelesen, es stellt sich aber auch hier dann wieder für mich deine Eingangsfrage, wie die Notification an den-, bzw. die Konsumenten gesendet werden? Ich vermute nicht per Post. WS-Notifications (https://de.wikipedia.org/wiki/WS-Notification) ist hier die Basistechnologie?

Den Ablauf stelle ich mir dann wie folgt vor:

Neuer Datensatz X wird durch App. A erzeugt. 
App. A weist Webservice an, eine Notification ("Neuer Datensatz X") an die registrierten Konsumenten zu senden (PUT).
Konsument(en) empfängt/empfangen Notification und sendet/senden an WS eine Anfrage, um den Datensatz X anzufragen (GET). 
Szenarien für POST (Update) und DELETE je nach Bedarf.

Wäre das in etwa der Weg, so etwas umsetzen zu können?

Grüße...


----------



## mrBrown (20. Jul 2017)

Ja, ziemlich genau das ist der Weg - man muss es halt nur noch technisch umsetzen 

Möglichkeiten gibts einige.
zB eine dauerhafte TCP-Verbindung zum Server offen halten, oder die Clients halten selbst einen Server offen und registrieren sich als Hook, etc


----------



## Thallius (20. Jul 2017)

mrBrown hat gesagt.:


> Ja, ziemlich genau das ist der Weg - man muss es halt nur noch technisch umsetzen
> 
> Möglichkeiten gibts einige.
> zB eine dauerhafte TCP-Verbindung zum Server offen halten, oder die Clients halten selbst einen Server offen und registrieren sich als Hook, etc



Und warum nicht einfach einen der tausend Push notification Anbieter nehmen? Bei Apple ist das sogar integriert.


----------



## mrBrown (20. Jul 2017)

Thallius hat gesagt.:


> Und warum nicht einfach einen der tausend Push notification Anbieter nehmen? Bei Apple ist das sogar integriert.


Weil man bei nem Java-Desktop-Client für Linux schlecht den in iOS integrierten nutzen kann? ;P

Und zumindest habe ich seine Frage so verstanden, dass ihr die technische Umsetzung interessiert...


----------



## Thallius (20. Jul 2017)

mrBrown hat gesagt.:


> Weil man bei nem Java-Desktop-Client für Linux schlecht den in iOS integrierten nutzen kann? ;P
> 
> Und zumindest habe ich seine Frage so verstanden, dass ihr die technische Umsetzung interessiert...



Von Java Desktop kann ich nirgends was finden


----------



## mrBrown (20. Jul 2017)

Thallius hat gesagt.:


> Von Java Desktop kann ich nirgends was finden


Von App und Nutzern vor dem Geräte les ich aber auch nichts


----------



## AndyJ (21. Jul 2017)

Ein Webservice ist eine ziemlich einseitige Geschichte. Der Client schickt einen Request und der Webservice die Response. Fuer deine Anforderung musst du mehrere Technologien kombinieren. Im Webbereich gibt es z.B. Websockets. Da baut der Client eine Verbindung auf, die dann vom Server gehalten wird. Wenn's was Neues gibt, kann der Server ein Update senden. Eine andere Moeglichkeit waere einen Webservice auf beiden Seiten einzurichten. In so einem Szenario kann der Client sich beim Server registrieren, indem er eine URL sendet. Der Server kann dann Neuigkeiten an diese URL senden. Ist sozusagen eine Server-Server Kommunication via Callback.

https://en.wikipedia.org/wiki/WebSocket
https://en.wikipedia.org/wiki/Observer_pattern
http://soapatterns.org/design_patterns/service_callback

Cheers,
Andy


----------



## looparda (21. Jul 2017)

Folgende Jersey-lastigen Lösungen:
Chapter 15. Server-Sent Events (SSE) Support in https://repo1.maven.org/maven2/org/...2.23/jersey-documentation-2.23-user-guide.pdf
https://www.packtpub.com/books/content/restful-web-services-–-server-sent-events-sse
https://github.com/jersey/jersey/tree/master/examples/server-sent-events-jersey
https://github.com/jersey/jersey/tree/master/examples/sse-item-store-jersey-webapp

Ich hab das noch nie benutzt aber habe es auf Anhieb gefunden zu dem Thema und so schlecht sieht das gar nicht aus.


----------

