webentwicklung-frage-antwort-db.com.de

Ist ReST über Websockets möglich?

Ich plane, eine webbasierte Chat-Anwendung zu entwickeln, die ReSTful-Anfragen aufnimmt, sie in XMPP übersetzt und an einen XMPP-Server übermittelt.

Die Verwendung von Websockets für diese Art von Chat-basierter Anwendung sah vielversprechend aus, da die Ereignisse (oder Antworten) asynchron übermittelt werden können. Wenn ich jedoch Websockets als zugrunde liegendes Protokoll zum Übertragen der Anforderungen vom Browser verwende, kann dies dennoch als ReSTful-Design betrachtet werden? Wenn ja, wie werden die Parameter der URIs, Verben (GET, POST ...) in der Websocket-Nachricht dargestellt? Umhüllen Sie sie in eine Xml/Json und senden Sie es?

Die ReSTful-Architektur gibt außerdem an, dass kein Sitzungsstatus auf dem Server gespeichert wird. Wenn in diesem Fall jedoch eine XMPP-Clientsitzung erstellt wird, wird der Status dieser Sitzung auf dem Server gespeichert (wodurch die zustandslose Einschränkung verletzt wird).

51

REST ist ein Architekturstil, der kein Protokoll auferlegt. Ja, Sie können REST mit Web Sockets, REST mit HTTP und REST mit FTP machen, wenn Sie möchten.

Der Hauptgrund für die Verwendung von HTTP ist, dass die Kommunikation mit jeder Komponente oder Programmiersprache über HTTP einfach und relativ einfach ist. Außerdem unterstützt HTTP verteilte Umgebungen mit mehreren Intermediären: Proxies, Firewalls ... So können Sie Ihren Service in jeder Topologie bereitstellen und jeder kann darauf zugreifen.

My rant: Wenn Sie ein RESTliban sind und die Dissertation von Roy Fielding die Quelle der Wahrheit ist, werden Verben niemals als Teil der Semantik anerkannt. URIs sind die Semantik. Die Verwendung verschiedener Verben für verschiedene Aktionen war eine elegante Entwicklung von REST über HTTP, aber nicht Teil der "Wahrheit". Sie können das Szenario von Rest über HTTP, bewertet von Roy in Kapitel 6 seiner Dissertation überprüfen. Verben nicht erwähnt Und beachten Sie, dass dies ein Auswertungsszenario ist, nicht die Spezifikation.

TLDR;

Wenn Sie bidirektionale Echtzeitkommunikation über das Internet benötigen und der Client ein Webbrowser ist, ist Web Sockets die beste Wahl. Sie können dann ein Protokoll auf Anwendungsebene auf Web-Sockets implementieren, um einen RESTful-Webdienst zu implementieren.

55
Daniel Cerecedo

Ja. Sie können REST über WebSocket mit einer Bibliothek wie SwaggerSocket verwenden.

15
jdelobel

Warum sollten Sie eine REST - API über Socket erstellen? Der Vorteil einer REST - API besteht IMHO darin, Standard-HTTP-Protokollmöglichkeiten wie zustandslose Anforderungen, semantische Verben wie GET, DELETE zu nutzen, um eine API zu erstellen, die von (Client-) Entwicklern leicht verstanden werden kann. Da Sockets keine HTTP-Verben usw. bieten, würden Sie eine Art HTTP-Layer für Sockets erstellen, was IMHO nicht sinnvoll ist.

Für den Fall, dass Sie so etwas wirklich bauen würden, würde ich empfehlen, das HTTP-Protokoll als Blaupause zu verwenden und das Socket-Protokoll wie HTTP zu implementieren.

8
saintedlama

Ich verstehe nicht, warum Sie XMPP in REST konvertieren und dann REST über WS ausführen. Das Ziel von WebSocket ist es, das XMPP-Protokoll direkt zum Browser zu bringen, wodurch alle Übersetzungsprobleme vermieden werden.

Es gibt JavaScript-Bibliotheken, die XMPP vom Browser zum Server übertragen können. Sie müssen lediglich den XMPP-Verkehr von WS in TCP und dann direkt in Ihren XMPP-Server übertragen. Kaazing hat ein Gateway das es Ihnen ermöglicht.

Wenn Sie Open Source verwenden möchten, müssen Sie eine JavaScript-XMPP-Bibliothek schreiben. Es gibt Beispiele, die zeigen, wie eine JS-Bibliothek für einfache Protokolle geschrieben wird. Sie müssen nur eines finden und das Konzept auf das XMPP-Protokoll erweitern.

Um es noch einmal zusammenzufassen: So würde die Architektur aussehen:

Ihr XMPP-Client-Code <-> XMPP-JavaScript-Bibliothek <-> WebSocket über http <-> WebSocket an TCP Proxy <-> XMPP-Server

wo der XMPP-Client-Code und die XMPP-JavaScript-Bibliothek im Browser ausgeführt werden und der WS to TCP Proxy zusammen mit dem XMPP-Server alle serverseitig sind.

1
Axel

Der architektonische Stil von REST setzt meistens 2 Entitäten voraus. Client und Server.

Wenn wir uns immer mehr dem Echtzeit-Web und der Entwicklung reaktiver Systeme zuwenden, wird WebSocket prominent damit beginnen, die Verwendung von REST APIs zu ersetzen.

WS ermöglicht das Push und Pull von Daten, wodurch das Konzept von Server und Client verworfen wird.

STOMP, AMQP, XMPP können als Messaging-Protokolle verwendet werden.

Die Daten selbst können JSON- oder Google-Protokollpuffer oder vielleicht Apache Avro sein.

WebSockets ist nicht an Webserver gebunden, sondern kann in eigenständigen Apps wie mobilen Apps oder Desktop-Apps entwickelt werden.

1
Rohitdev

Ich habe ein Projekt erstellt, das der Web-Socket-Sendefunktion Callbacks hinzufügt: https://github.com/ModernEdgeSoftware/WebSocketR2

Nachrichten-IDs werden eingerichtet, damit der Client Rückrufe implementieren kann. Er verarbeitet Nachrichtenwiederholungen nach Zeitüberschreitungen sowie eine erneute Verbindung zum Server, wenn die Verbindung getrennt wird. Sie können Ihre Nutzdaten dann so strukturieren, dass sie RESTful sind, indem Sie Verben und Pfade hinzufügen.

Dies ist vergleichbar mit dem, wenn ein Videospielstudio UDP verwendet, um die erforderlichen Geschwindigkeiten zu erreichen, aber der Netzcode implementiert viele TCP -ähnliche Funktionen für Zuverlässigkeit. 

0
Neo

Ich sehe gerade ein neues Thema im Blog eines Unternehmens, das Cloud-Lösungen und "Server-End/Service als Plattform" (SaaS) für Spiele anbietet. 

Ich mache keine Werbung für diese Firma und benutzte sie auch nicht, daher weiß ich nicht einmal, wie gut oder wie schlecht sie sind.

Sie erklären jedoch sehr deutlich die Gründe und die Vorteile der Verwendung von WebSockets in REST Lesen Sie ihren Blog .

0
Briksins