Frage

Ich beginne ein Projekt eine REST-Architektur in Java (mit dem neuen JAX-RS-Standard)

implementiert

Wir planen die GUI mit einer Flex-Anwendung zu entwickeln. Ich habe bereits festgestellt, einige Probleme mit dieser Implementierung mit Hilfe der Httpservice-Komponente (den Antwortfehlercodes, headers Zugang ...).

Jeder von euch Jungs haben einige Erfahrung in einem ähnlichen Projekt. Ist es machbar?

War es hilfreich?

Lösung

Das Problem hierbei ist, dass viele der Web-Diskussionen um dieses Problem sind ein Jahr oder mehr alt. Ich arbeite durch eben diese Forschung gerade jetzt, und das ist, was ich heute gelernt haben.

Das IBM Developer Works Artikel ab August 2008 von Jorge Rasillo und Mike Burr zeigt, wie eine Flex-Frontend / RESTful back-End-Anwendung (Beispiele in PHP und Groovy) zu tun. Schöner Artikel. Wie auch immer, hier ist die wegzunehmen:

  • Ihre PHP / Groovy-Code verwendet und erwartet PUT und DELETE.
  • Aber der Flex-Code hat POST zu verwenden, sondern setzt den HTTP-Header X-Methode-Aufschalten auf DELETE (Sie das gleiche für PUT tun kann, nehme ich an).
  • Beachten Sie, dass dies nicht die Proxy-Methode oben diskutiert.

// Flex doesn't know how to generate an HTTP DELETE.
// Fortunately, sMash/Zero will interpret an HTTP POST with
// an X-Method-Override: DELETE header as a DELETE.
deleteTodoHS.headers['X-Method-Override'] = 'DELETE';

Was geschieht hier? die IBM Web-Server abfängt und interpretiert die "POST mit DELETE" als DELETE.

Also, grub ich weiter und fand diese Post und Diskussion mit Don Box (einer der ursprünglichen SOAP Männer). Offensichtlich ist dies ein ziemlich Standard-Verhalten seit einigen Browsern usw. nicht unterstützen PUT und DELETE, und ist eine Behelfslösung, die sich um eine Weile gewesen ist. Hier ist ein Ausschnitt, aber es gibt viel mehr Diskussion.

  

„Wenn ich einen GData Client baue, ich ehrlich fragen, warum ich die Mühe würde mit DELETE und PUT Methoden an alle gegeben, dass X-HTTP-Methode-Aufschalten in mehr Fällen / Installationen funktionieren werden.“

Meine Meinung weg von diesem ist, dass, wenn Sie Ihre Web-Seite dieser Header X-Methodenüberschreibens unterstützt, dann können Sie diesen Ansatz verwenden. Die Don Box Kommentare machen ich denke, es ist ziemlich gut unterstützt, aber ich habe das noch nicht bestätigt.

Ein weiteres Problem entsteht, um die Lage, die HTTP-Antwort-Header zu lesen. Wieder von eine Blog-Post im Jahr 2007 von Nathan de Vries , sehen wir dies diskutiert. Er folgte diese Blog-Post und Diskussion mit seinem eigenen Kommentar auf:

  

„Die einzige Änderung auf der Web-Front ist, dass neuere Versionen des Flash Players (sicherlich des mit der Beta-Flex 3 geliefert) jetzt die response Eigenschaft für Instanzen Httpstatusevent unterstützen.“

Ich hoffe, das bedeutet, dass es eine nicht-Frage ist jetzt.

Andere Tipps

Wie viele haben HTTPService darauf hingewiesen, ist ein bisschen simpel und hat das alles nicht tun, was Sie tun möchten. Allerdings HTTPService ist nur Zucker auf den flash.net.* Klassen wie URLLoader, URLRequest und URLRequestHeader. Mit diesen können Sie die meisten HTTP-Anforderungen zusammenzustellen.

Wenn es auch für andere Methoden zur Unterstützung kommt als GET und POST das Problem meist liegt darin, dass einige Browser (zB Safari) diese nicht unterstützen, und Flash Player basiert auf dem Browser für alle, es ist die Vernetzung.

Es gibt bestimmte Mängel der Flex Fähigkeit als reine RESTful Kunden zu handeln.

Die Kommentare unten hiervon sind Blog :

  

Das Problem ist HTTPService- Klasse   mehrere wichtige Einschränkungen:

     
      
  1. Nur GET und POST-Methoden werden aus der Box unterstützt (es sei denn, Sie   verwenden FDS und setzen useProxy Attribut   true)
  2.   
  3. Nicht in der Lage Request-Header zu setzen und es gibt keinen Zugang zur Antwort   Header. Deshalb bin ich nicht in der Lage   Zugriff auf den Antworttext im Fall   ein Fehler an.
  4.   
  5. Es HTTPService- bekommt einen Statuscode 200 etwas anderes, es betrachten   ein Fehler. (Ereignis 201, autsch !!). Das   FaultEvent enthält keine Informationen   über den Statuscode eine Antwort   Körper. Das Flex-Client wird keine   Idee, was falsch gelaufen ist.
  6.   

Matt Raible gab auch eine schöne Präsentation auf REST mit Rails, Grails, GWT und Flex , dass einige gute Referenzen von ihm verknüpft haben.

Ob es möglich ist oder nicht hängt wirklich davon ab, wie viel Ihr bereit, von Proxying zu umgehen, etc.

Ich habe für die Httpservice-Komponente auf einen Open-Source-Ersatz arbeite, den REST voll unterstützt. Bei Interesse können Sie die Beta-Version finden (Quellcode und / oder erstellt Flex-Laufzeitbibliothek gemeinsam) und Anweisungen hier:

http://code.google.com/p/resthttpservice/

Die kurze Antwort lautet: Ja, Sie können mit Flex RESTful tun. Sie müssen nur um die Grenzen des Flash-Players (besser mit den neuesten Versionen) arbeiten und die HTTP-Stack Einschränkungen des enthält Browser.

ein Jahr zu tun RESTful Client-Entwicklung in Flex für mehr als nach der Lösung der grundlegenden HTTP-Request-Header und der Mangel an PUT und DELETE über die Schienen-esque? _method = Ansatz

Wir haben. Klebrige vielleicht, aber es wird die Arbeit getan.

ich einige der Header Schmerz in einem alten Blog-Post stellte auf

Flex-Unterstützung für REST ist bestenfalls schwach. Ich verbrachte viel Zeit mit dem Aufbau eines Prototyps, damit ich die meisten Probleme kennen. Wie bereits erwähnt, gibt es aus der Box ist nur Unterstützung für GET und POST. Auf den ersten Blick scheint es, dass Sie die Proxy-Konfiguration in Livecycle Data Services verwenden können, oder Blaze Unterstützung für PUT zu erhalten und zu löschen. Doch es ist eine Farce. Die Anforderung von Flex-App kommt noch ein POST sein. Der Proxy wandelt es auf der Serverseite PUT oder DELETE Ihrem Server-seitigen Code zu verleiten. Es gibt auch andere Fragen. Es gehört zu glauben, dass dies das Beste, was Adobe einfiel. Nach meiner Bewertung haben wir beschlossen, in einer anderen Richtung zu gehen.

Ich arbeite jetzt an einer Anwendung, die stark auf REST setzt Anrufe zwischen Flex und JavaScript und Java Servlets. Wir bekommen rund um die Antwort Fehlercode Problem durch eine Konvention eines Festlegung Block, der auf Fehler zurückgegeben wird, mit Fehler-IDs, die auf HTTP-Fehlercodes Karte grob.

Wir bekommen rund um die Cross-Site-Scripting-Einschränkungen, die durch ein Java-Servlet als HTTP-Proxy verwenden. Anrufe an den Proxy (die auf demselben Server läuft, der den Rest des Inhalts dient, einschließlich der Flex Inhalt, sendet die Anfrage an den anderen Server sendet dann die Antwort zurück an den ursprünglichen Anrufer.

RestfulX hat die meisten gelöst / alle der Rest Probleme mit Flex. Es hat Unterstützung für Rails / GAE / Merb / CouchDB / AIR / WebKit, und ich bin sicher, es wäre ein Kinderspiel sein, es Implementierung der Java zu verbinden.

Dimas integriert die AS3HTTPClient Bibliothek in sie auch.

Überprüfen Sie es heraus!

waren Eigentlich sind bereits Flex mit mit einem Rest-Stil Framework. Wie mbrevort bereits erwähnt, PUT und DELETE Methoden nicht direkt verwendet werden können. Stattdessen machen wir über eine POST PUT und DELETE wir ein GET auf eine Ressource mit einer URL-Parameter verwenden, wie? Action = löschen.

Dies ist nicht 100% Rest-Stil, also bin ich nicht sicher, ob dies mit einem JSR 311 Implementierung arbeitet. Sie werden einige flexbility auf der Server-Seite müssen die PUT und DELETE Einschränkungen umgehen.

Im Hinblick Handhabung auf Fehler haben wir einen Fehler Dienst implementiert. Im Falle einer Server-Fehler kann die Flex-Anwendung diesen Fehler Service abfragen, um die tatsächliche Fehlermeldung zu erhalten. Dies ist auch viel flexibler als nur Rückgabecodes HTTP Mapping auf statische Nachrichten.

Doch dank ECMA-Scripting von Flex mit XML-basierten REST-Service arbeitet, ist sehr einfach.

REST ist eher eine Ideologie als alles andere. Sie gehen auf die REST-Präsentationen und sie haben coolaide Spender.

Für Flex-Anwendungen, einen Stapels in Verbindung zu BlazeDS und AMF Daten Rangier-Walzen ist bequemer und performant.

So wie ich dies in der Vergangenheit geschaffen habe, ist eine PHP-Proxy zu verwenden, die mit den Remote-Web-Service-Anrufen behandelt und kehren RTU JSON an den Client ..

sein kann, die neue Flex 4 ist die Antwort http://labs.adobe.com/technologies / flex4sdk /

Das Buch Flexible Rails kann hilfreich sein - Es ist eine ausgezeichnete Ressource, wie man verwenden flex als RESTful-Client. Obwohl es Flex zur Verwendung mit dem Rails-Framework konzentriert sich, glaube ich, die Konzepte in jedem RESTful Rahmen anzuwenden. Ich verwenden, um dieses Buch zu bekommen schnell mit REST zur Verwendung von Flex zu beschleunigen.

ich auf einem großen Flex-Projekt für Franklin Covey arbeiten. Wir nutzen die REST-Services. Um dies zu unterstützen. Wir haben ein XMLHttpRequest-Wrapper. Durch die Verwendung von externer Schnittstelle mit einigen Event-Handler. Wir opensourced die Bibliothek. Sie können es heraus unter https://github.com/FranklinCovey/AS3-XMLHttpRequest

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top