Frage Entwerfen einer REST-API mit den Anforderungen req / resp und pub / sub


Heute entwerfe ich eine REST-Schnittstelle für ein verteiltes System. Es ist eine Client / Server-Architektur, aber mit zwei Nachrichtenaustauschmustern:

  • req / resp: die meisten REST-Ansatz, wäre es eine CRUD-Schnittstelle zum Zugriff / Erstellen / Ändern / Löschen von Objekten auf dem Server.
  • Pub / Subs: Das ist mein Hauptzweifel. Ich brauche den Server so schnell wie möglich asynchrone Benachrichtigungen an den Client zu senden.

Bei der Suche im Web habe ich festgestellt, dass eine Lösung die Implementierung von REST-Servern im Server und im Client sein könnte: Veröffentlichen / Abonnieren REST-HTTP Simple Protocol Web-Service-Architektur?

Eine andere Alternative wäre die Implementierung von blocking-REST, sodass der Client nicht an einem bestimmten Port zuhören muss: Verwenden von blockierenden REST-Anforderungen zum Implementieren von Publish / Subscribe 

Ich würde gerne wissen, welche Optionen Sie in Betracht ziehen würden, um eine Schnittstelle wie diese zu implementieren. Vielen Dank!


7
2018-05-19 09:22


Ursprung


Antworten:


Web Sockets kann einen Kanal für den Dienst bereitstellen, um Web-Clients live zu aktualisieren. Es gibt andere Techniken wie http langes Polling wo der Client eine "blockierende" Anfrage macht (wie Sie es genannt haben), wo der Dienst die Anfrage für einen Zeitraum von weniger als einem Timeout hält (sagen wir 50 Sekunden) und eine Antwort schreibt, wenn er Daten hat. Der Webclient gibt sofort eine weitere Anfrage aus. Diese Schleife erzeugt einen kontinuierlichen Kanal, in dem Nachrichten vom Server zum Client "gesendet" werden können, aber vom Client initiiert werden (Firewalls, Proxies usw.).

Es gibt Bibliotheken wie socket.io, SignalR und viele andere, die diese Logik und sogar Fallback von WebSockets zu Long Polling anmutig für Sie wickeln und die Details abstrahieren.

Ich würde empfehlen, einige Beispiel-Web-Socket und schreiben lange Polling-Beispiele nur um zu verstehen, aber dann auf Bibliotheken wie oben erwähnt, um es richtig zu machen.


0
2017-08-28 03:05