Pregunta

Estoy iniciando 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 encontré algunos problemas con esta implementación usando 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?

¿Fue útil?

Solución

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

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

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

// 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';

¿Qué está pasando aquí? el servidor web de IBM intercepta e interpreta " POST con DELETE " como DELETE.

Entonces, busqué más 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 existe desde hace 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, dado que X-HTTP-Method-Override 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 está bastante bien respaldado, pero aún no lo he confirmado.

Otro problema surge alrededor de poder leer los encabezados de respuesta HTTP. Nuevamente, de una publicación de blog en 2007 por Nathan de Vries , vemos esto discutido. Él siguió esa publicación de blog y discusión con su propio comentario:

  

& "; El único cambio en el frente web es que las versiones más recientes de Flash Player (ciertamente las suministradas con Flex 3 beta) ahora admiten la propiedad responseHeaders en instancias de HTTPStatusEvent. &";

Espero que eso signifique que no es un problema ahora.

Otros consejos

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.Con estos puede ensamblar la mayoría de las solicitudes HTTP.

Cuando se trata de compatibilidad con 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 funciones de red.

Existen deficiencias definitivas en 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 importantes:

     
      
  1. Solo los métodos GET y POST son compatibles de fábrica (a menos que usted   use FDS y establezca el atributo useProxy en   cierto)
  2.   
  3. 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.
  4.   
  5. Si HTTPService obtiene un código de estado, cualquier otro 200, considera   un error. (evento 201, ¡ay!). los   FaultEvent no & # 8217; t proporciona información   sobre el código de estado cualquier respuesta   cuerpo. El cliente Flex no tendrá   idea de lo que salió mal.
  6.   

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

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

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 la biblioteca compilada de tiempo de ejecución compartido de Flex) e instrucciones aquí:

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

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

Llevamos más de un año desarrollando RESTful para clientes en Flex después de resolver el encabezado de solicitud HTTP básico y la falta de PUT y DELETE a través del método rails-esque? _method =. De mal gusto quizás, pero hace el trabajo.

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

El soporte flexible para REST es débil en el mejor de los casos. Pasé mucho tiempo construyendo un prototipo, así que conozco la mayoría de los problemas. Como se mencionó anteriormente, fuera de la caja solo hay soporte para GET y POST. A primera vista, parece que puede usar la configuración de 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 una POST. El proxy lo convierte a PUT o DELETE en el lado del servidor para engañar al código del lado del servidor. Hay otros problemas también. Se escucha creer que esto es lo mejor que Adobe podría tener. Después de mi evaluación, decidimos ir en otra dirección.

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

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

Ejemplo

Estoy trabajando ahora mismo en una aplicación que depende en gran medida de las llamadas REST entre Flex y JavaScript y Java Servlets. Eludimos el problema del código de error de respuesta estableciendo una convención de & Lt; status id = & Quot; XXX & Quot; nombre = " AAAAA " > bloque que se devuelve en caso de error, con ID de error que se asignan aproximadamente a los códigos de error HTTP.

Eludimos las limitaciones de secuencias de comandos entre sitios mediante el uso de un Servlet Java 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.

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 ha integrado también la Biblioteca de Clientes AS3HTTP.

¡Compruébalo!

En realidad, ya estamos usando Flex con un marco Rest-Style.Como ya mencionó mbrevort, los métodos PUT y DELETE no se pueden utilizar directamente.En lugar de eso, hacemos PUT mediante POST y para DELETE usamos GET en un recurso con un parámetro de URL como ?action=delete.

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

En cuanto al manejo de errores, hemos implementado un servicio de errores.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 simplemente asignar códigos de retorno HTTP a mensajes estáticos.

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

REST es más una ideología que otra cosa. Usted va a las presentaciones REST y tienen dispensadores de refrigerante.

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

La forma en que lo he logrado en el pasado es utilizar un proxy PHP que se ocupa de las llamadas de servicio web remotas y devuelve RTU JSON al cliente ...

Puede que el nuevo flex 4 sea la respuesta http://labs.adobe.com/technologies / flex4sdk /

El libro Flexible Rails puede ser útil: es un excelente recurso sobre cómo usar Flex como cliente RESTful. Aunque se enfoca en usar Flex con el marco Rails, creo que los conceptos se aplican a cualquier marco RESTful. Utilicé este libro para ponerme al día rápidamente usando Flex con REST.

Trabajo en un gran proyecto flexible para Franklin Covey. Usamos servicios REST. Para apoyar esto. Creamos un contenedor XMLHttpRequest. Mediante el uso de una interfaz externa con algunos controladores de eventos. Abrimos la biblioteca. Puede consultarlo en https://github.com/FranklinCovey/AS3-XMLHttpRequest

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top