Pregunta ¿Es factible crear un cliente REST con Flex?


Estoy comenzando un proyecto usando una arquitectura Restful implementada en Java (usando el nuevo estándar JAX-RS)

Estamos planeando desarrollar la GUI con una aplicación Flex. Ya he encontrado algunos problemas con esta implementación utilizando el componente HTTPService (los códigos de error de respuesta, el acceso a los encabezados ...).

Cualquiera de ustedes tiene alguna experiencia en un proyecto similar. ¿Es factible?


32
2017-09-30 14:56


origen


Respuestas:


El problema aquí es que muchas de las discusiones web sobre este tema tienen un año o más. Estoy trabajando en esta misma investigación en este momento, y esto es lo que aprendí hoy.

Esta Artículo de IBM Developer Works de agosto de 2008 por Jorge Rasillo y Mike Burr muestra cómo hacer una aplicación de fondo Flex front-end / RESTful (ejemplos en PHP y Groovy). Buen articulo. De todos modos, aquí está el llevar:

  • Su código PHP / Groovy usos y expectativas PONER y ELIMINAR.
  • Pero el código Flex tiene que usar POST, pero establece el encabezado HTTP X-Method-Override para DELETE (puede hacer lo mismo para PUT I presume).
  • Tenga en cuenta que esto es no el método Proxy discutido anteriormente.

// Flex no sabe cómo generar un HTTP DELETE.
// Afortunadamente, sMash / Zero interpretará un HTTP POST con
// un X-Method-Override: ELIMINAR encabezado como un DELETE.
deleteTodoHS.headers ['X-Method-Override'] = 'DELETE';

¿Que esta pasando aqui? el servidor web de IBM intercepta e interpreta el "POST con BORRADO" como un BORRAR.

Entonces, profundicé y encontré esto publicación y discusión con Don Box (uno de los chicos SOAP originales). Aparentemente, este es un comportamiento bastante estándar, ya que algunos navegadores, etc. no admiten PUT y DELETE, y es una solución temporal que ha durado un tiempo. Aquí hay un fragmento, pero hay mucha más discusión.

"Si estuviera construyendo un cliente GData, honestamente me pregunto por qué me molestaría en usar los métodos DELETE y PUT en absoluto dado que X-HTTP-Method-Override va a funcionar en más casos / implementaciones".

Mi conclusión es que si su lado web admite este encabezado X-Method-Override, entonces puede usar este enfoque. Los comentarios de Don Box me hacen pensar que es bastante compatible, pero aún no lo he confirmado.

Otro problema surge cuando se pueden leer los encabezados de respuesta HTTP. De nuevo, desde una publicación de blog en 2007 por Nathan de Vries, vemos esto discutido. Siguió esa publicación del blog y la discusión con su propio comentario:

"El único cambio en la web es que las versiones más recientes de Flash Player (ciertamente las que se suministran con la versión beta de Flex 3) ahora admiten la propiedad responseHeaders en instancias de HTTPStatusEvent".

Espero que eso signifique que no es un problema ahora.


23
2017-10-02 16:10



Como muchos han señalado HTTPService es un poco simplista y no hace todo lo que quieres hacer. Sin embargo, HTTPService es solo azúcar encima del flash.net.* clases como URLLoader, URLRequest y URLRequestHeader. Utilizándolos, puede ensamblar la mayoría de las solicitudes HTTP.

Cuando se trata de soporte para otros métodos además de GET y POST, el problema radica principalmente en que algunos navegadores (por ejemplo, Safari) no los admiten, y Flash Player depende del navegador para todas sus redes.


6
2017-10-01 13:16



Existen deficiencias definidas de la capacidad de Flex para actuar como un cliente RESTful puro.

Los comentarios a continuación son de este Blog:

El problema es que la clase HTTPService tiene   varias limitaciones principales:

  1. Solo los métodos GET y POST se admiten de forma inmediata (a menos que   usa FDS y configura el atributo useProxy para   cierto)
  2. No se pueden establecer encabezados de solicitud y no hay acceso a la respuesta   encabezados Por lo tanto, no puedo   acceder al cuerpo de respuesta en el caso   de un error
  3. HTTPService obtiene un código de estado de cualquier otra cosa 200, considera   un error. (evento 201, ¡ay!). los   FaultEvent no proporciona información   sobre el código de estado de cualquier respuesta   cuerpo. El cliente Flex no tendrá   idea de lo que salió mal.

Matt Raible también dio un buena presentación en REST con Rails, Grails, GWT y Flex que tienen algunas buenas referencias vinculadas desde allí.

Si es factible o no, realmente depende de cuánto estés dispuesto a evitar con proxy, etc.


5
2017-09-30 15:16



He estado trabajando en un reemplazo de código abierto para el componente HTTPService que es totalmente compatible con REST. Si está interesado, puede encontrar la versión beta (código fuente y / o biblioteca de tiempo de ejecución compartida compilada de Flex) e instrucciones aquí:

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


3
2018-01-09 00:52



La respuesta corta es sí, puede hacer RESTful con Flex. Solo tienes que evitar las limitaciones del reproductor Flash (mejor con las últimas versiones) y las limitaciones de la pila HTTP del navegador que lo contiene.

Hemos estado haciendo un desarrollo de cliente RESTful en Flex durante más de un año después de resolver el encabezado de solicitud HTTP básico y la falta de PUT y DELETE a través del método de rieles-esque? _Method =. Tacky quizás, pero hace el trabajo bien.

Noté algunos de los dolores en los encabezados en una vieja publicación de blog en http://verveguy.blogspot.com/2008/07/truth-about-flex-httpservice.html


2
2018-01-14 02:29



El soporte de Flex para REST es débil en el mejor de los casos. Pasé mucho tiempo construyendo un prototipo, así que sé la mayoría de los problemas. Como se mencionó anteriormente, de fábrica solo hay soporte para GET y POST. A primera vista, parece que puede usar la configuración del proxy en LiveCycle Data Services o Blaze para obtener soporte para PUT y DELETE. Sin embargo, es una farsa. La solicitud proveniente de su aplicación Flex seguirá siendo un POST. El proxy lo convierte en PUT o DELETE en el lado del servidor para engañar al código del lado del servidor. Hay otros problemas también. Se ha escuchado creer que esto es lo mejor que Adobe podría haber logrado. Después de mi evaluación, decidimos ir en otra dirección.


2
2018-03-10 21:31



Sí, pude usar POST y acceder a los encabezados con este componente:

http://code.google.com/p/as3httpclient/wiki/Links

Ejemplo


1
2017-09-30 15:35



Estoy trabajando ahora mismo en una aplicación que depende en gran medida de las llamadas REST entre Flex y JavaScript y Java Servlets. Solucionamos el problema del código de error de respuesta estableciendo una convención de un bloque <status id = "XXX" name = "YYYYYY>> que devuelve el error, con identificadores de error que se relacionan aproximadamente con los códigos de error HTTP.

Solucionamos las limitaciones de scripts entre sitios mediante el uso de Java Servlet como proxy HTTP. Las llamadas al proxy (que se ejecuta en el mismo servidor que sirve el resto del contenido, incluido el contenido de Flex, envía la solicitud al otro servidor y luego envía la respuesta al llamador original).


1
2017-09-30 19:29



RestfulX ha resuelto la mayoría / todos los problemas REST con Flex. Tiene soporte para Rails / GAE / Merb / CouchDB / AIR / WebKit, y estoy seguro de que sería muy fácil conectarlo a su implementación de Java.

Dima también ha integrado la biblioteca de AS3HTTPClient en él.

¡Echale un vistazo!


1
2017-10-05 07:43



En realidad, ya están usando Flex con un marco de estilo de descanso. Como mbrevort ya mencionó los métodos PUT y DELETE, no se pueden usar directamente. En cambio, estamos haciendo PUT a través de un POST y para DELETE estamos usando un GET en un recurso con un parámetro de URL como? Action = delete.

Esto no es 100% estilo de descanso, por lo que no estoy seguro, si esto funciona con una implementación JSR 311. Necesitará cierta flexibilidad en el lado del servidor para solucionar las restricciones PUT y DELETE.

Con respecto al manejo de errores, hemos implementado un servicio de error. En caso de un error del lado del servidor, la aplicación Flex puede consultar este servicio de error para obtener el mensaje de error real. Esto también es mucho más flexible que solo asignar códigos de retorno HTTP a mensajes estáticos.

Sin embargo, gracias a las secuencias de comandos de ECMA de Flex trabajando con servicios REST basados ​​en XML es muy fácil.


0
2017-09-30 15:31



REST es más una ideología que nada. Vas a las presentaciones de REST y tienen dispensadores de coolaide.

Para las aplicaciones de Flex, hacer rodar una pila junto con la clasificación de datos de BlazeDS y AMF es más conveniente y más eficiente.


0
2017-12-24 21:13