Tag Archives: AMF

Utilizar ZendAMF com Laravel 3

Bem, com meu histórico de amor e ódio com o Flex Framework (mais amor, diga-se), uma das primeiras tentativas de integração Laravel foi com o ZendAMF, implementação do protocolo AMF feita pela equipe Zend.

Foi necessário gastar um pouco de tempo com pesquisa, mas no final a integração foi tranquila. Uma das características do Laravel que o fazem ser tão bom é a facilidade de integração com bibliotecas externas. Sabendo disso, bastou iniciar a integração, entender os pulos-do-gato e correr para o abraço.

Segue o roteiro, passo a passo:

1) O primeiro foi imaginar onde eu poderia acomodar a biblioteca. A pasta /application/libraries seria uma boa escolha, porém, como o ZendAMF é um pouco complexo, com diversas classes e pastas, optei por criar um bundle. Adotei esta abordagem por dois motivos: sendo um bundle, as classes do ZendAMF ficariam a disposição do Laravel (e vice-versa) e o bundle possui o arquivo start.php, que é executado cada vez que o bundle é executado.

Item 1

Item 1

2) Uma vez que a library foi adicionada na pasta /bundles, é necessário informar ao Laravel que o bundle existe e precisa ser executado. Isso é feito no arquivo /application/bundles.php.

Item 2 - informar ao Laravel que o bundle precisa ser iniciado

Item 2 – informar ao Laravel que o bundle precisa ser iniciado

3) Agora, no arquivo start.php do bundle, adiciona-se a pasta library do ZendAMF ao class path do PHP. Isso é um tanto estranho, mas o ZendAMF é meio estúpido com includes. Melhor não brigar com gente estúpida. Utilizando a classe Autoloader do Laravel, adiciona-se os diretórios do Bundle que se precisa ter acesso pelo Laravel.

Item 3) Adiciona-se a pasta library ao class path do PHP

4) Agora é preciso criar uma URL para funcionar como gateway para chamadas a partir do Flex. Para simplificar as coisas, criei uma rota diretamente no arquivo application/routes.php, chamando-a de ‘/amf’ e ali no closure, criei uma instância do ZendAMF Server. Será ali também que abrirei acesso às classes que serão acessadas pelo Flex (VOs incluídos). É importante notar que a rota responderá a uma chamada POST, que é o verbo HTTP utilizado pelo RemoteObject do Flex. Para utilizar, basta colocar sua URL no RemoteObject do Flex. Ex.: endpoint=”http://<sua_url>/amf”.

Item 4) Cria-se a rota e nela o server AMF

Item 4) Cria-se a rota e nela o server AMF

5) Para manter nosso código organizado, criaremos nossas classes expostas ao Flex dentro de nosso bundle. Como estamos trabalhando com Laravel, todas as classes deste estão disponíveis para o bundle, sem que se precise fazer nada especial. No exemplo abaixo, foi utilizado um model chamado Produto, que estende Eloquent.

Item 5) A classe exposta ao Flex

6) Para finalizar (e este passo é opcional), é preciso adicionar à resposta que esta é do tipo AMF. Ter ou não esta informação não faz qualquer diferença ao Flex, porém, se você utiliza para debug uma ferramenta como Charles Proxy, este não exibe corretamente os dados caso o Content-Type não se passado como application/x-amf. Para isso, basta criar na rota ‘/amf’ um filtro do tipo after e ali determinar o Content-Type.

Item 6) Adiciona-se o Content-Type à resposta HTTP

Item 6) Adiciona-se o Content-Type à resposta HTTP

E é isso!

Vale lembrar que o mesmo procedimento pode ser utilizado para outros componentes do Zend Framework. Basta tentar!

Grande abraço,

Vedovelli

Ved Cookbook – episódio 3 – Configurando e Utilizando o ZendAMF

Neste episódio será feita a configuração do ZendAMF, utilizado para conectar uma interface Flex ao PHP. O código gerado durante a gravação está disponível ao final do post.

Dica: assista em tela cheia.

Ved Cookbook – episódio 3 – ZendAMF from Fabio Vedovelli on Vimeo.

>

Flex: sanando dúvidas

Fábio já estou a seguir os teus trabalhos a algum tempo e tenho uma pergunta para te colocar… Eu estou a dar os meu primeiros passos com Flex, mas a minha maior dúvida nestes primeiros passos é a conectividade com a base de dados…o que usar? O único que testei até agora foi o AMFPHP, mas sei que existem outras soluções talvez mais eficazes…
O que aconselhas? SQLite?BlazeDS?LiveCycle?

Recebi hoje este comentário deixado por Eduardo Costa, de Portugal. Ele ilustra bem uma dúvida que, mesmo após muito tempo de Flex no mercado e sua crescente adoção por profissionais e empresas, ainda paira pelas cabeças de muitas pessoas.

Então vou procurar saná-la. Venho vivendo Flex diariamente há mais de 2 anos e apesar de estar longe de saber tudo sobre o framework, assumo que sei o suficiente para contribuir com meus centavos.

O Flex é um framework e é opensource. Você não precisa do Flex (agora Flash) Builder para desenvolver aplicações. O framework possui uma ferramenta de linha de comando que é utilizada para compilar o swf a partir de seus arquivos .mxml e .as. Para mais informações consulte este link.

Apesar disso, não é comum encontrar desenvolvedores codificando no bloco de notas (ou o que o valha) e compilando o código via linha de comando. Simplesmente não é produtivo, se comparado com todos os recurso do Flash Builder. É nele que você encontrará um ambiente completo de desenvolvimento, com os componentes do framework listados de forma que torna possível arrastar e soltar, para montar a interface. A compilação se dá apenas pressionando um botão e é possível configurar o compilador, passando parâmetros tais como background padrão, serviços de conexão com servidor web, arquivos de idiomas entre outros.

Muitas pessoas ainda confundem o Flex Builder com o Flex Framework e por isso a mudança do nome da ferramenta de desenvolvimento gerou tanta polêmica, quando passou de Flex Builder para Flash Builder. Essa mudança foi coerente, pois o Flex Builder vinha sendo utilizado pelos desenvolvedores Flash como ambiente de desenvolvimento, devido aos inúmeros recursos que tornam a codificação rápida e coniável, recursos não presentes em nenhuma versão do Flash (Adobe Flash), mesmo na nova versão CS4. Assim, o nome Flash Builder tráz o software mais para perto da Plataforma Flash, que envolve animações, sistemas e videos.

A grande dúvida de quem está chegando agora no mundo Flex é sobre o acesso a dados. Fica aqui um esclarecimento: o Flex não acessa diretamente qualquer banco de dados, apesar de iniciativas isoladas neste sentido. Podemos aqui fazer uma analogia com o HTML, padrão para qualquer sistema web. Da mesma forma que o HTML não acessa qualquer banco de dados, o Flex também não. É necessário um webservice, uma requisição HTTP ou uma linguagem no servidor habilitada a acessar o banco de dados e enviar as informações para a interface. É dessa última que pretendo falar agora.

A Adobe criou um protocolo, que é a forma utilizada pelas máquinas para trocar informações entre si, que permite a serialização de dados vindos do servidor e chegando a interface Flex que reside no cliente (browser do usuário). O protocolo chama-se AMF, que significa Action Message Format e transporta os dados de forma binária sendo muito mais rápido do que qualquer outra forma de tráfego de dados utilizada na internet. Para saber mais, veja este benchmark neste link.

A Adobe possui dois produtos que funcionam como camada intermediária entre o servidor e o cliente, que são o Life Cycle Data Services (LCDS) e é pago e o BlazeDS, que é opensource. Ambos devem ser utilizados com Java. Para outras linguagens, existem diversas soluções no mercado, nenhuma desenvolvida pela Adobe, mas que são muito eficientes e largamente utilizadas. Vejamos:

  • PHP - O mais utilizado é o AMFPHP, que teve seu desenvolvimento parado a bastante tempo e que serviu de base para seu sucessor, o ZendAMF, que faz parte do Zend Framework e tem seu desenvolvimento apoiado tanto pela Adobe quanto pela Zend, empresa sinônimo do PHP. Além destes, existe também o WebORB para PHP. Sei da existência de outros, mas me limitarei a estes dois por serem os mais utilizados.
  • .NET – o WebORB for .NET, desenvolvido pelos The Midnight Coders é muito bem conceituado. Outra solução que alguns desenvolvedores que conheço utilizam é o FluorineFX e em seu site é possível ver que vai além do protocolo AMF.
  • Java - além das soluções proprietárias da Adobe, os Midnight Coders mais uma vez, com a clara intenção de abraçar o mundo do Flash Remoting, possui sua solução para utilização do AMF com Java. Outra opção opensource é o GraniteDS, que segundo o Mario Junior, é a melhor opção de código aberto.  Assim, Java conta com 4 boas opções.
  • Coldfusion – por ser uma tecnologia de propriedade da Adobe, o Coldfusion se conecta com o Flex nativamente. Apesar disso,  os intrépidos Midnight Coders também possuem sua solução: WebORB for Coldfusion.
  • Ruby on Rails – são duas as opções para o pessoal do fantástico Rails: RubyAMF e adivinhem? WebORB for Rails
  • PythonpyAMF é quem resolve.

Pois bem… procurei listar as tecnologias mais utilizadas para desenvolvimento web. Imagino que existam soluções para outras linguagens, mas estou satisfeito com as listadas acima.

Independente da linguagem utilizada no servidor e a camada AMF escolhida, na lado Flex a a conexão é idêntica, sendo utilizada uma instância da classe Remote Object. Assim, quando você aprender a utilizar essa classe, independente da linguagem que você encontrar no lado do servidor, seu trabalho no Flex será sempre o mesmo. Isso beneficia os desenvolvedores Flex, que podem conseguir contratos apenas para a interface, orientando os desenvolvedores que farão a parte do servidor a expor seus objetos da forma adequada à utilização do AMF.

Quando eu estava aprendendo a desenvolver com Flex, por pura inexperiência, utilizava HTTPService, enviando e recendo as informações por XML. Rapidamente, no entanto, notei que a performance deixava a desejar. Foi quando meu primo fez uma integração do Flex com PHP utilizando AMFPHP e me passou as dicas. Desde então, nunca mais utilizei outra forma de tráfego de dados, a não ser no caso de webservices, o que é uma outra situação e que não cabe neste post. Atualmente estou utilizando o ZendAMF.

Espero não ter chovido no molhado.

Gostaria de deixar uma dica para quem está chegando agora e encantado com o universo Flex: aprenda orientação a objetos, que lhe será útil não apenas com o Actionscript3, mas com qualquer outra linguagem de programção que utiliza o paradigma. Também é muito útil se acostumar a codificar escrevendo diretamente o MXML, que é a linguagem de marcação utilizada no Flex Framework. Seu código ficará muito mais legível e fácil de manter.

Deixo um grande abraço a todos que me apoiam.

Ved

Screencast: WebORB 3.5 e Data Management

Pois bem: ontem foi lançada a nova versão do WebORB para PHP, versão 3.5. Esta versão traz uma novidade chamada Data Management, que está muito próxima das facilidades oferecidas pelo Ruby On Rails.

PS: se nao conseguir visualizar, limpe seu cache. Caso ainda assim nao consiga, por favor me avise.

Particularmente ainda demorará um pouco para que eu a utilize em meus projetos, apesar do significativo ganho de tempo. A explicação está no screencast.

Clique na imagem para assistir ao screencast

Clique na imagem para assistir ao screencast