2012-04-10 3 views
4

Ich schreibe eine REST API, die CRUD-Operationen auf Ressourcen bereitstellt.Ist eine API RESTful, wenn sie permanente Anfragen erlaubt (Server Push)

Ich möchte, dass die Benutzer in der Lage sind, sich bei einigen Ressourcenänderungen zu registrieren und die Updates per Server-Push zu erhalten. Für den Server Push werde ich Unterstützung für Reverse Ajax, versteckten Iframe und Websockets bieten. Um als REST wie möglich zu sein habe ich eine Streaming-Ressource, die die Registrierungen und die Verbindung zum Client verarbeitet:

Streaming-Ressource:

URI uri : A GET against this URI refreshes the client representation of the resources accessible to this user. 
bool WebSocket : Indicate if websocket is available on this server 
bool ReverseXHR : Indicate if ReverseXHR is available on this server 
bool HiddenIframe : Indicate if HiddenIframe is available on this server 
Registration[] Registrations : The set of registration tasks. 

Öffne-Kanal: Open-Streaming-Kanal vom Webserver an den Client. GET-Parametertyp = (websocket | xhr | hiddeniframe)

CloseChannel: Streaming-Kanal vom Webserver zum Client schließen. GET-Parameter type = (websocket | xhr | hiddeniframe)

Ein Aufruf von openchannel?type=websocket würde die websocket öffnen und Streaming die Daten der registrierten Werte beginnen.

Ich habe viele Artikel gelesen, aber ich bin immer noch ein bisschen verwirrt. Kann ich meine API-REST trotzdem noch aufrufen? Und wenn nein (oder ja) warum?

Vielen Dank für Ihre Hilfe!

+0

Wie sind Sie damit klargekommen? Ich würde mir keine Sorgen über die Reinheit des Musters machen - Server Push wird immer wichtiger. Ich würde gerne wissen, wie Sie dies implementiert haben. –

Antwort

0

Zuerst implementieren Sie immer, was sinnvoll ist, um das Problem zu lösen, dem Sie gegenüberstehen. Die Anpassung an einen bestimmten architektonischen Stil bietet spezifische Vorteile, aber dies sollte pragmatische Lösungen für ein gegebenes Problem nicht ausschließen.

Aber gesagt, es scheint, als ob Sie das Streaming von Ressourcendaten als eine Möglichkeit, Informationen zwischen dem Client und dem Server & "tunneln". Ich bin ziemlich neu, aber es scheint mir, dass die Tunnel-Daten gegen die uniform interface Einschränkung in der REST architectural style. Tunneling über HTTP ist eine der Kritik-Ebene gegen soap-basierte Dienste.

+0

Momentan verwende ich nur Streaming, um Daten vom Server an den Client zu senden. Wenn COMET Reverse Ajax oder versteckte Iframe-Technik verwendet wird, ist kein anderes Protokoll als HTTP beteiligt. Es könnte als eine permanente Anfrage angesehen werden und in diesem Fall weiß ich nicht, ob es mit REST kompatibel ist oder nicht. Bei der Verwendung von WebSockets ist es in der Tat tunnelling, so dass Sie Recht haben, dies muss die einheitliche Schnittstelle Einschränkung brechen. Obwohl ich die Frage offen lassen werde, weil ich an der Antwort für Reverse Ajax und versteckten Iframe interessiert bin. Danke Sixto – LaChocolaterie