Pergunta

Estou começando um projeto usando uma arquitetura RESTful implementado em Java (usando o novo JAX-RS standard)

Estamos planejando para desenvolver o GUI com uma aplicação Flex. Eu já encontraram alguns problemas com esta implementação, utilizando o componente HTTPService (os códigos de erro de resposta, o acesso cabeçalhos ...).

algum de vocês tem alguma experiência em um projeto similar. É viável?

Foi útil?

Solução

O problema aqui é que muitas das discussões da web em torno desta questão são de um ano ou mais de idade. Estou trabalhando através desta mesma pesquisa, agora, e isso é o que eu aprendi hoje.

Este IBM Developer Works artigo de agosto de 2008 por shows de Jorge Rasillo e Mike Burr como fazer um / app back-end front-end Flex RESTful (exemplos em PHP e Groovy). Bom artigo. De qualquer forma, aqui está a tirar:

  • O seu código PHP / Groovy usos e espera PUT e DELETE.
  • Mas o código Flex tem que usar POST, mas define o cabeçalho HTTP X-Method-Override apagar (você pode fazer o mesmo para PUT presumo).
  • Note que este é não o método Proxy discutido acima.

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

O que está acontecendo aqui? as interceptações IBM Web Server e interpreta o "POST com DELETE" como um DELETE.

Então, eu cavou ainda mais e encontrei este post e discussão com Don Box (um dos caras SABÃO originais). Aparentemente, este é um comportamento bastante normal uma vez que alguns navegadores, etc. não suportam PUT e DELETE, e é uma obra-around que tem sido em torno de um tempo. Aqui está um trecho, mas há muito mais discussão.

"Se eu estivesse construindo um cliente GData, eu sinceramente me pergunto por que eu iria incomodar usando métodos excluem e colocar em tudo dado que X-HTTP-Method-Override vai trabalhar em mais casos / implementações."

Meu tirar de tudo isto é que, se seu lado web suporta este cabeçalho X-Method-Override, então você pode usar essa abordagem. Os comentários Don Box me fazem pensar que está muito bem apoiado, mas eu não ter confirmado que ainda.

Outra questão surge em torno de ser capaz de ler os cabeçalhos de resposta HTTP. Novamente, a partir um post em 2007 por Nathan de Vries , vemos isto discutido. Seguiu-se que post e discussão com o seu próprio comentário:

"A única mudança em frente à web é que versões mais recentes do Flash Player (certamente os fornecidos com a versão beta do Flex 3) agora suportam a propriedade responseHeaders em instâncias de HTTPStatusEvent."

Eu estou esperando que isso significa que é um não-problema agora.

Outras dicas

Como muitos assinalaram HTTPService é um pouco simplista e não fazer tudo o que você quer fazer. No entanto, HTTPService é apenas açúcar por cima das classes flash.net.* como URLLoader, URLRequest e URLRequestHeader. Usando estes você pode montar a maioria das solicitações HTTP.

Quando se trata de suporte para outros métodos de GET e POST o problema na maioria mentiras em que alguns navegadores (por exemplo Safari) não suportam estes, e Flash Player conta com o navegador para tudo que é rede.

Existem deficiências definitivos de capacidade do Flex para atuar como um cliente RESTful puro.

Os comentários abaixo são a partir desta blogue :

O problema é HTTPService classe tem vários grandes limitações:

  1. Apenas métodos GET e POST são suportados fora da caixa (a menos que você uso FDS e conjunto de atributos useProxy para true)
  2. Não é possível definir cabeçalhos de solicitação e não há acesso à resposta cabeçalhos. Portanto, eu não sou capaz de acessar o corpo da resposta no caso de um erro.
  3. É HTTPService recebe um código de status outra coisa 200, considere um erro. (Evento 201, ai !!). o não FaultEvent não fornecer informações sobre o código de status de qualquer resposta corpo. O cliente Flex não terá idéia que deu errado.

Matt Raible também deu um apresentação agradável em descanso com Rails, Grails, GWT e Flex que têm algumas boas referências ligadas a partir dele.

Se é viável ou não realmente depende de quanto o seu dispostos a trabalhar em torno de proxy, etc.

Eu estive trabalhando em um substituto de código aberto para o componente HTTPService que apoia plenamente REST. Se estiver interessado, você pode encontrar a versão beta (código-fonte e / ou compilada Flex biblioteca compartilhada de tempo de execução) e as instruções aqui:

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

A resposta curta é sim, você pode fazer RESTful com o Flex. Você apenas tem que trabalhar em torno das limitações do Flash Player (melhor com as versões mais recentes) e do navegador da contendo HTTP pilha limitações.

Estamos fazendo o desenvolvimento cliente RESTful no Flex por mais de um ano depois de resolver o cabeçalho básico solicitação HTTP e falta de PUT e DELETE através do rails-esque? _Method = abordagem. Cafona talvez, mas ele começa o trabalho feito.

Notei um pouco da dor cabeçalhos em um post antigo em http://verveguy.blogspot.com/2008/07/truth-about-flex-httpservice.html

Suporte Flex para descanso é fraco na melhor das hipóteses. Passei muito tempo a construção de um protótipo, então eu sei que a maioria das questões. Como mencionado anteriormente, fora da caixa só há suporte para GET e POST. À primeira vista parece que você pode usar a configuração de proxy no LiveCycle Data Services ou chama para obter suporte para PUT e DELETE. No entanto, é uma farsa. O pedido vindo do seu aplicativo Flex ainda será um POST. Os convertidos de proxy-lo para colocar ou apagar no lado do servidor para enganar o seu código do lado do servidor. Há outras questões também. Ele ouviu a acreditar que este é o melhor que a Adobe poderia vir acima com. Após minha avaliação, decidimos ir em outra direção.

Sim, eu era capaz de usar POST e acesso cabeçalhos com este componente:

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

Exemplo

Eu estou trabalhando agora em um aplicativo que depende fortemente de chamadas de descanso entre Flex e JavaScript e Java Servlets. Nós contornar o problema código de erro de resposta através da criação de uma convenção de um bloco que fica devolvido após a erro, com IDs de erro que aproximadamente mapeiam para HTTP códigos de erro.

Nós contornar as limitações de script cross-site usando um Java Servlet como um proxy HTTP. Chamadas para o proxy (que é executado no mesmo servidor que serve o resto do conteúdo, incluindo o conteúdo Flex, envia o pedido para o outro servidor, em seguida, envia a volta resposta ao chamador original.

RestfulX tem resolvido a maioria / todos os problemas de REST com o Flex. Tem suporte para Rails / GAE / Merb / CouchDB / AIR / WebKit, e eu tenho certeza que seria uma pressão para conectá-lo à sua implementação Java.

Dima do integrou a Biblioteca AS3HTTPClient para ele também.

Confira!

Na verdade eram já estão usando Flex com um quadro Rest-Style. Como já mencionado mbrevort PUT e métodos excluem não pode ser utilizado directamente. Em vez disso estamos fazendo PUT através de um POST e para APAGAR estamos usando um GET em um recurso com um parâmetro de URL como? Action = excluir.

Isto não é 100% estilo Rest, então eu não tenho certeza, se isso funciona com um 311 implementação JSR. Você vai precisar de algum flexbility no lado do servidor para contornar as restrições PUT e DELETE.

Com relação ao tratamento de erros, temos implementado um serviço de erro. Em caso de um erro do lado do servidor, a aplicação Flex pode consultar este serviço de erro para obter a mensagem de erro real. Isso também é muito mais flexível do que apenas mapeamento códigos de retorno HTTP para mensagens estáticas.

No entanto agradecimentos A ECMA script de Flex trabalhar com serviços REST XML com base é muito fácil.

REST é mais de uma ideologia do que qualquer coisa. Você vai para as apresentações descanso e eles têm dispensadores coolaide.

Para aplicativos Flex, revirando uma pilha em conjunto para BlazeDS e triagem de dados AMF é mais conveniente e de maior performance.

A forma como eu consegui isso no passado é utilizar um proxy PHP que lida com as chamadas de serviço web remotos e retornos RTU JSON para o cliente ..

Pode ser o novo Flex 4 é a resposta http://labs.adobe.com/technologies / flex4sdk /

O livro flexíveis Rails pode ser útil - é um excelente recurso sobre a forma de utilização flexionar como um cliente RESTful. Embora se concentra no uso Flex com o framework Rails, eu acredito que os conceitos se aplicam a qualquer framework RESTful. Usei este livro para chegar até a velocidade rapidamente sobre o uso de Flex com REST.

Eu trabalho em um projeto flexível grande para Franklin Covey. Usamos os serviços REST. A fim de apoiar esta. Criamos um invólucro XMLHttpRequest. Ao usar interface externa com alguns manipuladores de eventos. Nós Open Source da biblioteca. Você pode verificá-la em https://github.com/FranklinCovey/AS3-XMLHttpRequest

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top