RESTful HTTP und Websocket in derselben Anwendung?

17

Wenn eine Anwendung bereits WebSocketfür Live-Feeds geöffnet hat , sollte ich sie AJAXfür die andere Kommunikation mit dem Server verwenden?

Da die Verbindung bereits geöffnet ist, sollten wir sie für Anfragen verwenden, die Request/Responsenicht in Echtzeit sind?

Ich bevorzuge RESTful HTTPAnfragen, weil ich sie leichter zu debuggen finde. Sie können einen Browser mit URLs oder Locken verwenden, um zu testen, was die API zurückgibt. Sie müssen keinen Code schreiben, um a zu öffnen WebSocket.

Wäre es komisch RESTful HTTP APIund WebSocketin der gleichen Anwendung zu haben?

Marc
quelle
1
"Sie müssen keinen Code schreiben, um die API zu testen." Können Sie das etwas näher erläutern? Warum müssen Sie die API nicht testen?
Elias Van Ootegem
Wenn ich mich nicht irre, können Sie mit den Chrome Developer Tools ein
Websocket
@EliasVanOotegem Guter Punkt. Entschuldigung, das war nicht klar. Sie müssen die API noch mit einem Unit-Projekt auf der Serverseite testen. Was ich meine ist, wenn Sie einen kurzen Blick darauf werfen möchten, was die API zurückgeben würde, können Sie einen Browser mit der URL verwenden. Sie müssen keinen Code schreiben, um ein Websocket zu öffnen. Ich habe meine Frage aktualisiert.
Marc
@maple_shaft Das ist gut, aber Sie müssen sich auf einer Seite befinden, auf der ein WebSocket für den Server geöffnet ist.
Marc

Antworten:

14

Eines der Hauptentwurfsziele von Websockets besteht darin, dass HTTP- und Websocket-Protokolle über denselben Port übertragen werden können. Dies wird dadurch erreicht, dass ein Client explizit einen Websocket-Handshake mit einer HTTP-Upgrade-Anforderung ausführen muss. Auf diese Weise kann der Server eine Standard-HTTP-Anforderungsverbindung sowie eine HTTP-Aktualisierungsanforderung verarbeiten, die jetzt auf eine dauerhafte bidirektionale Duplexverbindung aktualisiert wird.

Also ja, dies ist definitiv ein gültiger Anwendungsfall, aber ob Sie dies für Ihre spezifische Anwendung tun SOLLTEN, ist eine ganz andere Sache. Websockets sind nützlich und sinnvoll, wenn Sie Szenarien haben, in denen der Server nicht angeforderte Daten an den Client senden kann (Live-Feeds). HTTP-Protokoll- und REST-Dienste sind nützlich, wenn Sie die synchrone Clientanforderung von Daten blockieren möchten.

Wenn Ihre Anforderungen so sind, dass beide für Ihre Anwendung sinnvoll sind, sollten Sie auf jeden Fall beide verwenden. Wenn Ihre einzige Interaktion mit dem Server jedoch auf Live-Feeds basiert, sind REST-Services nicht geeignet. Ich denke, die Einfachheit des Debuggens sollte in Bezug auf die Systemqualitätsattribute , auf die Sie Ihr Design ausrichten sollten, eine eher geringe Bedeutung haben .

maple_shaft
quelle
1
Das habe ich mich gefragt. Es ist sinnvoll, Websockets für Live-Feeds in Echtzeit zu verwenden, aber was ist mit CRUD-Operationen? In meinen Augen ist es sinnvoller, eine Standard-HTTP-Anfrage für diese zu verwenden.
Marc
2
@Marc, ich würde es nicht als seltsam empfinden, CRUD-Vorgänge und Echtzeitprobleme zu trennen (einer verwendet HTTP und die anderen Websockets) Bessere Leistung, wenn Sie die permanente Verbindung (Websocket) für alle Ihre Vorgänge verwenden. Dies hängt wirklich davon ab, was Ihre CRUD-Anforderungen sind, aber ich würde eine CRUD-Websocket-Oberfläche nicht scheuen.
Myst
upvoted! Neuling hier, da Sie erwähnt haben, dass beide über den gleichen Port kommuniziert werden sollen, wenn Sie beispielsweise Aktienkurse von einem Live-Stream abrufen und der Stream aufgrund von starkem Datenverkehr für ein paar Minuten getrennt wird, wie würden Sie die Daten dazwischen bekommen oder was Es gibt Strategien, um diesen Fall anzugehen
PirateApp