2017-02-15 2 views
1

Ich entwerfe eine Web-API, die eine Möglichkeit für Kunden (andere Anwendungen) gibt, einige Arbeitsanforderungen zu pushen, sofort eine ID dieser Arbeitsanforderung zu erhalten und später das Ergebnis dieser Arbeitsanforderung zu erhalten. Was ist der typische Ansatz für solche Interaktionen? Als Ergebnis der Arbeit Anfrage erinnert mich Server Push-Interaktion Ich dachte über SSE (Server gesendet Ereignisse) und webscoket Technologien, in Richtung websockets (als Client kann die gleiche Verbindung für alle Arten von Requets und erhalten alle Arten von Antwort). Ist es eine gute Wahl für mein Ziel? und wie kann das skaliert werden?Push-basierte Api-Design

+0

Ihre Frage ist viel zu weit IMO. Nicht zu schließen, da ich kein Web-Apps-Typ bin. – einpoklum

+0

@einpoklum warum so? Die Frage ist, ob die Websocket-Technologie für den beschriebenen Ansatz des Api-Designs geeignet ist, und wenn nicht, frage ich mich, was ein besserer Ansatz ist. – maks

+0

@maks, Software-Design-Fragen passen in eine andere SO-Site, wie [diese] (http://softwareengineering.stackexchange.com) ... Die StackOverflow-Community ist für praktischere Fragen. – Myst

Antwort

1

Die Frage ist, ob Websocket-Technologie für den beschriebenen Ansatz des Api-Designs passt und wenn nicht, frage ich mich, was ein besserer Ansatz ist. Ist es eine gute Wahl für mein Ziel?

Eine webSocket-Verbindung ist sehr gut geeignet, um Ergebnisse zu einem unbestimmten Zeitpunkt in der Zukunft zu erhalten, und es wäre ein empfohlener Weg, dies zu tun.

Andere Anfragen vom Client zum Server können entweder Ajax-Aufrufe sein oder als webSocket-Nachrichten gesendet werden, meistens abhängig davon, ob es andere Gründe gibt, die Anfragen als Ajax-Aufrufe zu stellen oder nicht. Wenn Sie bereits eine etablierte webSocket-Verbindung haben, ist dies eine bequeme, einfache und schnelle Möglichkeit, mit dem Server zu kommunizieren.

Nimmt man die einzelnen Teile von dem, was Sie tun:

einige Arbeit Anfrage Pushing (vom Client zum Server).

Dies kann genauso gut über Ajax oder WebSocket erfolgen. Wenn es keinen anderen Grund für eine bereits bestehende webSocket-Verbindung gäbe, wäre dies traditionell ein Ajax-Aufruf.

erhalten sofort eine ID der Arbeitsanforderung

Dies ist eigentlich ein wenig einfacher ist, mit einer Ajax-Anfrage zu tun, weil Ajax ein Request/Response-Protokoll ist so, wenn Sie die Arbeitsanforderung über Ajax senden, Es wäre trivial, die ID als Antwort auf diese Ajax-Anfrage zurückzubekommen. Sie können dies auch über webSocket tun, aber webSocket ist nur ein Nachrichtenprotokoll. Wenn Sie die Arbeitsanforderung an den Server senden, können Sie diese über einen webSocket senden (wie bereits erwähnt). Und der Server könnte dann sofort die Arbeits-ID zurücksenden, aber der Client müsste einen Weg entwickeln, um die zurückkommende Arbeits-ID mit der zuvor gesendeten Anforderung zu korrelieren, da diese beiden Nachrichten keine natürliche Verbindung zueinander hätten. Eine Art und Weise, wie eine Korrelation durchgeführt werden kann, besteht darin, dass der Client eine temporäre ID oder einen Hashwert generiert, wenn er die ursprüngliche Anfrage sendet (es kann buchstäblich alles sein, was für diesen Client einzigartig ist, wie ein Zeitstempel) und dann würde der Server dasselbe temporäre senden ID zurück, wenn es die Arbeits-ID sendet. All dies ist trivial mit einem Anfrage/Antwort-Protokoll wie HTTP/Ajax.

später erhalten das Ergebnis dieser Arbeit Anfrage

HTTP Polling, WebSocket oder SSE alle verwendet werden könnten. Polling ist offensichtlich nicht besonders effizient. Ich weiß, dass ein webSocket dafür perfekt funktionieren würde und es einen offenen Kanal für alle anderen Elemente bereitstellen würde, die der Server auf Push-Weise an den Client senden möchte. SSE kann auch verwendet werden, um dieses Problem zu lösen (Pushing Daten an einen Client), obwohl ich persönlich keine Erfahrung damit habe.