Web Service com o Rails

267 views
Skip to first unread message

Ronaldo Possan

unread,
Sep 22, 2011, 5:06:04 PM9/22/11
to rail...@googlegroups.com
Boa tarde Pessoal!

Surgiu aqui a necessidade de uma aplicação Ruby On Rails ter webservices.
Uma outra aplicação em Java, irá consumir esse webservice de tempo em tempo, enviando alguns dados nos quais serão inseridos no banco de dados da aplicação em Rails.

Passei o dia pesquisando, e não consegui encontrar algo concreto. Tentei usar ActionWebService, mas as diversas formas na internert não funcionaram, pois aparentemente a gem não é mais padrão no Rails.
Vi sobre o SOAP4R também, mas não consegui fazer muita coisa.

Resumindo, o que eu preciso é isso: uma url/webservice na qual uma outra aplicação enviará dados a cada 10 segundos.

Agradeço desde já a colaboração!

--
Ronaldo Possan
Software Engineer

Expertise in Ruby On Rails, ExtJS and PHP
Skype: ronaldo.possan
+55 19 8820-7159

Thiago Nuic Vidigal

unread,
Sep 22, 2011, 5:16:57 PM9/22/11
to rail...@googlegroups.com
Você pode usar simplesmente requisições de URL no rails ou usar o port pra rails 3 do actionwebservice desse repositorio: https://github.com/nickh/actionwebservice

Fiz alguns testes básicos a algum tempo e funcionou normal.

Att.
Thiago Nuic Vidigal



2011/9/22 Ronaldo Possan <ronaldo...@gmail.com>

--
Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/rails-br?hl=pt-BR.

Renato Alves

unread,
Sep 22, 2011, 5:21:47 PM9/22/11
to rail...@googlegroups.com
Cara,
Acho que você pode fazer um Webservice REST-RPC ou até mesmo RESTFUL, não precisa usar SOAP..
Alias na minha opinião SOAP é uma merda.

Tem até um artigo bem interessante sobre isso:
http://m.readwriteweb.com/enterprise/2011/05/soap-is-not-dead---its-undead.php

Mas com REST o esquema seria bem simples, e evitaria aqueles XML monstros em SoapServers com cache, problemas de endpoint e etc, ainda mais quando estamos falando de duas linguagens diferentes.

Valeuu!

--
Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/rails-br?hl=pt-BR.



--
 
--------------------------------------------
Renato Alves
CEO at Start From Sketch,
(11) 7240-3003,

Ronaldo Possan

unread,
Sep 22, 2011, 5:22:33 PM9/22/11
to rail...@googlegroups.com
Estou usando o Rails 2.3.14.
Os dados a serem enviados para a url são 50.000 pontos, que representam os pontos de um gráfico.
Algo como:
[25,35,27,40,30,50,58,123,57 ...] ATÉ 50.000 valores. Preciso mandar esses pontos remotamente para a minha app rails, pra ela salvar esses pontos no banco de dados.
Teria como mandar simplesmente por REST?

Thanx!

Ronaldo Possan

unread,
Sep 22, 2011, 5:25:49 PM9/22/11
to rail...@googlegroups.com
Renato, dado o meu requisito anterior, qual seria a melhor forma, e como fazer?

Renato Alves

unread,
Sep 22, 2011, 5:33:12 PM9/22/11
to rail...@googlegroups.com
Caramba, 50.000 valores!
Rapaz agora você me pegou, não sei te dizer não, mas suspeito que você está tentando recriar a Matrix. *joke*

Não sei quanto é a limitação de caracteres para uma URL, teria que pesquisar, mas se você estivesse interessado em usar SOAP, poderia testar uma gem chamada Savon (http://savonrb.com/).

Vi ela um tempo atrás e me pareceu bem interessante.

Valeu.

Everaldo Gomes

unread,
Sep 22, 2011, 5:47:00 PM9/22/11
to rail...@googlegroups.com
Ouço muito o pessoal falando: "monte um webservice Sinatra numa aplicação Rails, porque Rails é "Rack compliant".

[]s

Everaldo

2011/9/22 Renato Alves <rena...@gmail.com>

felipe moraes

unread,
Sep 22, 2011, 5:47:25 PM9/22/11
to rail...@googlegroups.com
Quem limita o tamanho total do POST é o http daemon.

No php isso é fácil contornar, mas no ruby/onrails não sei.

Vê aí se tem algum comando que manipule os valores do arquivos ini do servidor em tempo de execução, se é que existe esta limitação no ruby.

Post Max Size

Ronaldo Possan

unread,
Sep 22, 2011, 6:27:13 PM9/22/11
to rail...@googlegroups.com
Pois é ... por essa eu não esperava também.
Esses dados são pontos de um gráfico que representam uma luz. Nem há a possibilidade de reduzir os pontos, pois qualquer variação afetará no resultado final.
E, como requisito, eu preciso ter esses 60k pontos num campo no banco de dados. A leitura destes dados no banco, esta suave. Estou usando a biblioteca de gráficos ChartDirector, em ruby puro, e não teve problema algum em manipular os 60k de pontos.

Porém, como houve esse requisito de arquitetura, esses pontos serão enviados remotamente. Estou quase cojitando a "solução" da outra máquina salvar diretamente no banco de dados.

Vale ressaltar também, que isto já funcionava quando tínhamos um outro server em Java. Eram 2 apps javas se comunicando através de webservices (AXIS) e WSDL ... e não tinha problema.

E agora, após fazer a cabeça do pessoal, conseguimos migrar tudo para Ruby On Rails, porém nesta estapa estou pagando o mico do Ruby/programador não estar conseguindo resolver esse problema. rs. (haters gonna hate).

Quem puder ajudar com soluções, agradeço !

Ronaldo Possan

unread,
Sep 22, 2011, 7:33:24 PM9/22/11
to rail...@googlegroups.com
Fui tentar fazer a chamada via REST. Usando método GET, o servidor Rails resetou a requisição, parando no 800 pontos ... hehehe

Então fiz a mesma chamada usando POST, e então SUCCESS! Ele demorou uns 2 segundos, mas processou o POST de 20.000 pontos.

Liguei um script de reload desse post de 5 em 5 segundos, e fui testar a aplicação front-end. E impactou diretamente na performance.

Diante deste problema, penso em 2 maneiras: Utilizar EventMachine, ou então criar uma aplicação apenas de webservices, para alimentar o banco de dados.
Poderia ser em Rails mesmo ou em Sinatra.

O que acham?

Obrigado!

Bruno Arueira

unread,
Sep 22, 2011, 7:52:38 PM9/22/11
to rail...@googlegroups.com
Ronaldo,

Não é querer multiplicar as idéias, porém há a necessidade da informação ser acessada de forma instantânea na app rails?

Caso não o ideal seria algo independente da aplicação como sinatra ou node.js para receber os pontos e delegar para alguém que trate filas como, por exemplo, rabbitmq ou resque.

Att.

Ronaldo Possan

unread,
Sep 22, 2011, 9:08:37 PM9/22/11
to rail...@googlegroups.com
Bruno,

Preciso da informação o "mais instantâneo" possível.
Pois o esquema é o seguinte:
1) Eu disparo pela aplicação central um webservice para um equipamento remoto, que pode estar em qualquer lugar do mundo.
2) Esse equipamento processa algumas coisas e gera esse gráfico, com até 130.000 pontos, dependendo da precisão.
3) Esses pontos precisam ser retornados para a "central", pois o usuário estará aguardando para ver a respostas.
4) Esses pontos, são representam pontos de luzes, e preciso deles do mesmo jeito que é gerado, para ainda passar por um algorítimo e em seguida exibir um gráfico para o usuário. Neste último passo, eu resgato esses pontos do banco de dados, pois eu fico perguntando a cada 10 segundos (via javascript) para esse equipamente sobre o status. Ele me retornando que acabou, então pego o ID e pesquiso no banco.

Enfim, acredito que criar um outro server só para alimentar o banco, será a melhor alternativa no momento.

Vou estudar sobre rabbit e resque, thanks!

Bruno Arueira

unread,
Sep 22, 2011, 9:24:55 PM9/22/11
to rail...@googlegroups.com
Ronaldo,

Veja sobre node.js também, não sei se você já leu sobre essa tecnologia mas o linkedin reestruturou o site móvel deles com node.js e html5 e houve uma diminuição considerável de infra porém aumentando a capacidade de resposta. Muito interessante a estrutura desse projeto, depois se puder falar das experiências e outras dicas que aprendeu seria válido.

Att.

Luiz Augusto B. Florentino Filho

unread,
Sep 23, 2011, 7:36:38 AM9/23/11
to rail...@googlegroups.com
Existe a possibilidade de compactar os dados antes do envio e descompactar ao receber?

Ronaldo Possan

unread,
Sep 23, 2011, 7:52:42 AM9/23/11
to rail...@googlegroups.com
Se tiver como, aceito sujestões!

Daniel Negri

unread,
Sep 23, 2011, 7:40:56 PM9/23/11
to rails-br
Isto me lembra um pouco assuntos de Zlib. Veja se você consegue
abstrair o assunto com este artigo:
Daniel Wanja - flash.utils.bytearray compressing 4.1mb to 20k:
http://onrails.org/2007/11/27/flash-utils-bytearray-compressing-4-1mb-to-20k

Não sei como funcionaria alguns front-ends como o Varnish nesta
história, mas é o que eu lembro no momento.



On Sep 23, 8:52 am, Ronaldo Possan <ronaldo.pos...@gmail.com> wrote:
> Se tiver como, aceito sujestões!
>
> Em 23 de setembro de 2011 08:36, Luiz Augusto B. Florentino Filho <
> luizflorent...@gmail.com> escreveu:
>
>
>
>
>
>
>
> > Existe a possibilidade de compactar os dados antes do envio e descompactar
> > ao receber?
>
> > Em 22 de setembro de 2011 22:24, Bruno Arueira <bgnarue...@gmail.com>escreveu:
>
> > Ronaldo,
>
> >> Veja sobre node.js também, não sei se você já leu sobre essa tecnologia
> >> mas o linkedin reestruturou o site móvel deles com node.js e html5 e houve
> >> uma diminuição considerável de infra porém aumentando a capacidade de
> >> resposta. Muito interessante a estrutura desse projeto, depois se puder
> >> falar das experiências e outras dicas que aprendeu seria válido.
>
> >> Att.
>
> >> Em 22 de setembro de 2011 22:08, Ronaldo Possan <ronaldo.pos...@gmail.com
> >> > escreveu:
>
> >> Bruno,
>
> >>> Preciso da informação o "mais instantâneo" possível.
> >>> Pois o esquema é o seguinte:
> >>> 1) Eu disparo pela aplicação central um webservice para um equipamento
> >>> remoto, que pode estar em qualquer lugar do mundo.
> >>> 2) Esse equipamento processa algumas coisas e gera esse gráfico, com até
> >>> 130.000 pontos, dependendo da precisão.
> >>> 3) Esses pontos precisam ser retornados para a "central", pois o usuário
> >>> estará aguardando para ver a respostas.
> >>> 4) Esses pontos, são representam pontos de luzes, e preciso deles do
> >>> mesmo jeito que é gerado, para ainda passar por um algorítimo e em seguida
> >>> exibir um gráfico para o usuário. Neste último passo, eu resgato esses
> >>> pontos do banco de dados, pois eu fico perguntando a cada 10 segundos (via
> >>> javascript) para esse equipamente sobre o status. Ele me retornando que
> >>> acabou, então pego o ID e pesquiso no banco.
>
> >>> Enfim, acredito que criar um outro server só para alimentar o banco, será
> >>> a melhor alternativa no momento.
>
> >>> Vou estudar sobre rabbit e resque, thanks!
>
> >>> Em 22 de setembro de 2011 20:52, Bruno Arueira <bgnarue...@gmail.com>escreveu:
>
> >>>> Ronaldo,
>
> >>>> Não é querer multiplicar as idéias, porém há a necessidade da informação
> >>>> ser acessada de forma instantânea na app rails?
>
> >>>> Caso não o ideal seria algo independente da aplicação como sinatra ou
> >>>> node.js para receber os pontos e delegar para alguém que trate filas como,
> >>>> por exemplo, rabbitmq ou resque.
>
> >>>> Att.
>
> >>>> Em 22 de setembro de 2011 20:33, Ronaldo Possan <
> >>>> ronaldo.pos...@gmail.com> escreveu:
>
> >>>> Fui tentar fazer a chamada via REST. Usando método GET, o servidor Rails
> >>>>> resetou a requisição, parando no 800 pontos ... hehehe
>
> >>>>> Então fiz a mesma chamada usando POST, e então SUCCESS! Ele demorou uns
> >>>>> 2 segundos, mas processou o POST de 20.000 pontos.
>
> >>>>> Liguei um script de reload desse post de 5 em 5 segundos, e fui testar
> >>>>> a aplicação front-end. E impactou diretamente na performance.
>
> >>>>> Diante deste problema, penso em 2 maneiras: Utilizar EventMachine, ou
> >>>>> então criar uma aplicação apenas de webservices, para alimentar o banco de
> >>>>> dados.
> >>>>> Poderia ser em Rails mesmo ou em Sinatra.
>
> >>>>> O que acham?
>
> >>>>> Obrigado!
>
> >>>>> Em 22 de setembro de 2011 19:27, Ronaldo Possan <
> >>>>> ronaldo.pos...@gmail.com> escreveu:
>
> >>>>> Pois é ... por essa eu não esperava também.
> >>>>>> Esses dados são pontos de um gráfico que representam uma luz. Nem há a
> >>>>>> possibilidade de reduzir os pontos, pois qualquer variação afetará no
> >>>>>> resultado final.
> >>>>>> E, como requisito, eu preciso ter esses 60k pontos num campo no banco
> >>>>>> de dados. A leitura destes dados no banco, esta suave. Estou usando a
> >>>>>> biblioteca de gráficos ChartDirector, em ruby puro, e não teve problema
> >>>>>> algum em manipular os 60k de pontos.
>
> >>>>>> Porém, como houve esse requisito de arquitetura, esses pontos serão
> >>>>>> enviados remotamente. Estou quase cojitando a "solução" da outra máquina
> >>>>>> salvar diretamente no banco de dados.
>
> >>>>>> Vale ressaltar também, que isto já funcionava quando tínhamos um outro
> >>>>>> server em Java. Eram 2 apps javas se comunicando através de webservices
> >>>>>> (AXIS) e WSDL ... e não tinha problema.
>
> >>>>>> E agora, após fazer a cabeça do pessoal, conseguimos migrar tudo para
> >>>>>> Ruby On Rails, porém nesta estapa estou pagando o mico do Ruby/programador
> >>>>>> não estar conseguindo resolver esse problema. rs. (haters gonna hate).
>
> >>>>>> Quem puder ajudar com soluções, agradeço !
>
> >>>>>> Em 22 de setembro de 2011 18:47, felipe moraes <felipe...@gmail.com>escreveu:
>
> >>>>>> Quem limita o tamanho total do POST é o http daemon.
>
> >>>>>>> No php isso é fácil contornar, mas no ruby/onrails não sei.
>
> >>>>>>> Vê aí se tem algum comando que manipule os valores do arquivos ini do
> >>>>>>> servidor em tempo de execução, se é que existe esta limitação no ruby.
>
> >>>>>>> Post Max Size
>
> >>>>>>> Em 22 de setembro de 2011 18:33, Renato Alves <renato...@gmail.com>escreveu:
>
> >>>>>>> Caramba, 50.000 valores!
> >>>>>>>> Rapaz agora você me pegou, não sei te dizer não, mas suspeito que
> >>>>>>>> você está tentando recriar a Matrix. *joke*
>
> >>>>>>>> Não sei quanto é a limitação de caracteres para uma URL, teria que
> >>>>>>>> pesquisar, mas se você estivesse interessado em usar SOAP, poderia testar
> >>>>>>>> uma gem chamada Savon (http://savonrb.com/).
>
> >>>>>>>> Vi ela um tempo atrás e me pareceu bem interessante.
>
> >>>>>>>> Valeu.
>
> >>>>>>>> Em 22 de setembro de 2011 18:22, Ronaldo Possan <
> >>>>>>>> ronaldo.pos...@gmail.com> escreveu:
>
> >>>>>>>> Estou usando o Rails 2.3.14.
> >>>>>>>>> Os dados a serem enviados para a url são 50.000 pontos, que
> >>>>>>>>> representam os pontos de um gráfico.
> >>>>>>>>> Algo como:
> >>>>>>>>> [25,35,27,40,30,50,58,123,57 ...] ATÉ 50.000 valores. Preciso
> >>>>>>>>> mandar esses pontos remotamente para a minha app rails, pra ela salvar esses
> >>>>>>>>> pontos no banco de dados.
> >>>>>>>>> Teria como mandar simplesmente por REST?
>
> >>>>>>>>> Thanx!
>
> >>>>>>>>> Em 22 de setembro de 2011 18:16, Thiago Nuic Vidigal <
> >>>>>>>>> tvidi...@gmail.com> escreveu:
>
> >>>>>>>>> Você pode usar simplesmente requisições de URL no rails ou usar o
> >>>>>>>>>> port pra rails 3 do actionwebservice desse repositorio:
> >>>>>>>>>>https://github.com/nickh/actionwebservice
>
> >>>>>>>>>> Fiz alguns testes básicos a algum tempo e funcionou normal.
>
> >>>>>>>>>> Att.
> >>>>>>>>>> Thiago Nuic Vidigal
>
> >>>>>>>>>> 2011/9/22 Ronaldo Possan <ronaldo.pos...@gmail.com>
>
> >>>>>>>>>>> Boa tarde Pessoal!
>
> >>>>>>>>>>> Surgiu aqui a necessidade de uma aplicação Ruby On Rails ter
> >>>>>>>>>>> webservices.
> >>>>>>>>>>> Uma outra aplicação em Java, irá consumir esse webservice de
> >>>>>>>>>>> tempo em tempo, enviando alguns dados nos quais serão inseridos no banco de
> >>>>>>>>>>> dados da aplicação em Rails.
>
> >>>>>>>>>>> Passei o dia pesquisando, e não consegui encontrar algo concreto.
> >>>>>>>>>>> Tentei usar ActionWebService, mas as diversas formas na internert não
> >>>>>>>>>>> funcionaram, pois aparentemente a gem não é mais padrão no Rails.
> >>>>>>>>>>> Vi sobre o SOAP4R também, mas não consegui fazer muita coisa.
>
> >>>>>>>>>>> Resumindo, o que eu preciso é isso: uma url/webservice na qual
> >>>>>>>>>>> uma outra aplicação enviará dados a cada 10 segundos.
>
> >>>>>>>>>>> Agradeço desde já a colaboração!
>
> >>>>>>>>>>> --
> >>>>>>>>>>> *Ronaldo Possan*
> >>>>>>>>>>> *Software Engineer** *
> >>>>>>>>>>> Expertise in Ruby On Rails, ExtJS and PHP
> >>>>>>>>>>> Skype: ronaldo.possan
> >>>>>>>>>>> +55 19 8820-7159
>
> >>>>>>>>>>>  --
> >>>>>>>>>>> Você está recebendo esta mensagem porque se inscreveu no grupo
> >>>>>>>>>>> "rails-br" dos Grupos do Google.
> >>>>>>>>>>> Para postar neste grupo, envie um e-mail para
> >>>>>>>>>>> rail...@googlegroups.com.
> >>>>>>>>>>> Para cancelar a inscrição nesse grupo, envie um e-mail para
> >>>>>>>>>>> rails-br+u...@googlegroups.com.
> >>>>>>>>>>> Para obter mais opções, visite esse grupo em
> >>>>>>>>>>>http://groups.google.com/group/rails-br?hl=pt-BR.
>
> >>>>>>>>>>  --
> >>>>>>>>>> Você está recebendo esta mensagem porque se inscreveu no grupo
> >>>>>>>>>> "rails-br" dos Grupos do Google.
> >>>>>>>>>> Para postar neste grupo, envie um e-mail para
> >>>>>>>>>> rail...@googlegroups.com.
> >>>>>>>>>> Para cancelar a inscrição nesse grupo, envie um e-mail para
> >>>>>>>>>> rails-br+u...@googlegroups.com.
> >>>>>>>>>> Para obter mais opções, visite esse grupo em
> >>>>>>>>>>http://groups.google.com/group/rails-br?hl=pt-BR.
>
> >>>>>>>>> --
> >>>>>>>>> *Ronaldo Possan*
> >>>>>>>>> *Software Engineer** *
> >>>>>>>>> Expertise in Ruby On Rails, ExtJS and PHP
> >>>>>>>>> Skype: ronaldo.possan
> >>>>>>>>> +55 19 8820-7159
>
> >>>>>>>>>  --
> >>>>>>>>> Você está recebendo esta mensagem porque se inscreveu no grupo
> >>>>>>>>> "rails-br" dos Grupos do Google.
> >>>>>>>>> Para postar neste grupo, envie um e-mail para
> >>>>>>>>> rail...@googlegroups.com.
> >>>>>>>>> Para cancelar a inscrição nesse grupo, envie um e-mail para
> >>>>>>>>> rails-br+u...@googlegroups.com.
> >>>>>>>>> Para obter mais opções, visite esse grupo em
> >>>>>>>>>http://groups.google.com/group/rails-br?hl=pt-BR.
>
> >>>>>>>> --
>
> >>>>>>>> --------------------------------------------
> >>>>>>>> Renato Alves
> >>>>>>>> CEO at Start From Sketch,
> >>>>>>>> (11) 7240-3003,
> >>>>>>>>http://www.startfs.com.br<http://www.inventador.com.br/>
>
> >>>>>>>>  --
> >>>>>>>> Você está recebendo esta mensagem porque se inscreveu no grupo
> >>>>>>>> "rails-br" dos Grupos do Google.
> >>>>>>>> Para postar
>
> ...
>
> read more »
Reply all
Reply to author
Forward
0 new messages