CoreRest: Seus serviços leves na Nuvem!

admin | jboss
12 Aug 2010

Você deve pensar: Ah, lá vem mais um mala querer falar de Cloud, REST e essas “buzzwordzinhas” famosas…Calma, eu concordo com você no aspecto de não gostar de buzzwords. Neste post, ao invés de ficar “punhetando”(*) ou tentando criar complexidade sobre REST e Cloud, vou mostrar um resultado de algumas horas de pesquisa para executar alguns conceitos e tecnologias na nuvem da Google: Google App Engine usando JSF2.0 e JAX-RS (REST).

Cloud está muito voltada a Infraestrutura, e trazer para os clientes o benefícios de investir no que realmente se usa, e sempre ter recursos quando for necessário. Quantos já viram empresas perguntando para você em consultoria: “Quantos servidores eu preciso para rodar minha aplicação?”, é claro, que se você responder isso sem nenhum medo, recomendo você também começar a jogar na mega-sena, pois as chances de acertar com exatidão é quase a mesma. Alongando a história um pouco mais, para evitar que você erre, você dimensiona um ambiente X, e sempre põe 200% de margem de erro, afinal pra que usar “desvio padrão”, quando o padrão é “chutar”? Só existem 3 cenários possíveis para essa demanda:

  • Boa, você é o cara! Você acertou na mosca, aproveite e vá ao banheiro agora! Na volta, passe na lotérica
  • Seu cliente está “pê” da vida, pois o que você dimensionou não está aguentando
  • Tem tanta máquina sobrando, que o cliente tá pensando em destinar um servidor de jogos pra empresa!

Com o conceito de Cloud, você pode ainda ser solicitado a realizar o famoso “sizing”(dimensionamento) para seus clientes, embora, caso você erre, ou exagere, o cliente poderá readequar seu investimento, alcançando assim exatamente a infra que ele precisa, seja pra um uso contínuo, ou até sazional (ex:matrícula de alunos).

Existem vários provedores de Clouds, entre eles Amazon, a própria Google, e alguns players brasileiros entrando nessa disputa também, entre eles, o provedor que hospeda meu site: TeHospedo .

REST por outro lado, trazendo para a realidade, é basicamente a capacidade de você através de URIs, definir uma estrutura de serviço, por exemplo:

  • consulta/voos/saindo/{de}/indo/{para}/dia/{data}/entre/{horainicial}/e/{horafinal}

Na URI acima, temos uma semantica simples para entender o que esse serviço se trata: consulta/voos

A partir daí temos as instruções do serviço na URI, tudo que está entre {} , significa que são variáveis, que na execução real, os valores serão passados nos lugares das variáveis sem as {}, por exemplo, imagine então que através do Facebook, você vai chamar este serviço, isto poderia ficar:

  • consulta/voos/saindo/BEL/indo/GRU/dia/10/02/2010//entre/12:00/e/16:00

Qualquer humano consegue entender essa URI, imagine então máquinas?! Interpretando:

  • Consulte os Voos saindo de Belém indo para Guarulhos dia 10/02/2010 entre as 12:00 e 16:00, simples não é?

Mas a idéia de REST, ainda vai também no aspecto de qual HyperMedia (formato) as informações podem ser trafegadas e exibidas, recomendo você ler o prático e objetivo artigo de Bruno Pereira sobre o assunto aqui.

CoreREST

Foi pensando em criar uma “Plataforma” onde as pessoas pudessem criar seus scripts, que pensei num domingo que a minha esposa estava visitando nossa família e que odeio videogames, resolvi começar a brincar com isto: A idéia do CoreRest é permitir com que pessoas que conheçam Groovy e Ruby(**), possam criar e definir seus serviços no Cloud da Google: Google App Engine:

Eu também tenho um outro interesse, criar alguns serviços usando Ruby, já que eu gostaria de melhorar meus conhecimentos desta linguagem de uma forma divertida. Com o CoreREST algumas bibliotecas estão no contexto, como por exemplo: Smooks, que é um framework de transformação de dados, a idéia é adicionar outras em breve.

Na implementação do CoreREST, utilizei a implementação REST da Red Hat: RestEasy , que pode ser executado de forma muito simples e transparente dentro do GAE.(Google App Engine), a idéia é que via REST, nós capturemos os scripts (Mashups) gerados pelos usuários, e via o uso da execução de Scripts da Máquina Virtual Java no GAE, possamos executar estes scripts. Para isso, existe apenas uma váriável do tipo String que os usuários devem se preocupar, em breve, vou adicionar suporte a algumas Mídias diferentes para negociação de conteúdos entre os requisitantes e o serviço raíz CoreRest.

Tutorial do CoreRest

1 – Vá até o CoreReste no site: http://corerest.appsot.com

2 – Clique na imagem do Groovy!

3-  Esta é a edição do seu Serviço, onde você entrará com:

3.1 – nome do script – É ele que vai servir como chave de inovação do seu serviço

3.2 – URL Mapping: Esta será a URL de mapeamento das váriáveis que você quer passar para seu serviço, neste caso, entre com o valor: /voar/{origem}/{destino}

3.3 – Adicione uma descrição para seu serviço

3.4 – Aqui vai o código do seu script, neste momento, estamos suportando Groovy, mas alguns voos atrasados, e entre uma esticada antes de dormir, irei adicionar o suporte ao Ruby via JRuby. Você entrará com o seguinte código:

response = “Voando de “+ origem + ” para ” + destino;

return response;

3.5 – Clique no botão Create e pronto!

Seu primeiro script estará pronto!

Para acessar seu Script, existe um REST Service raiz, mapeado como a URI “/service”, a notação dele é que em seguida vem: {nomedoscript}/quantas/uris/e/{vars}/{voce}/quiser . Só que tudo que estiver entre {} , será considerado variáveis do tipo String, que você terá no contexto do código do seu Script. A idéia é você então ter uma fonte, para adicionar seus pequenos “mashups” de Aplicações, retornando o tipode dados interessante, que você queira para adicionar em seu blog, ou aplicação dentro do Facebook, Orkut etc, ou alguma coisa até mais profissional. O interessante é que tudo está sendo executado no cloud da Google! Você vai poder dizer: Eu tenho um serviço meu rodando em Cloud! (GAE).

Quando você cria seu script, ele estará disponível no meu lateral direito, onde há um ícone “Run”, clique neste e você verá a seguinte tela:

Executando o Serviço dentro do CoreRest

Executando o Serviço dentro do CoreRest

Automáticamente a página de execução irá mostrar todas as variáveis necessárias pro seu serviço, portanto, basta preencher as variáveis e clicar no botão: Execute the Service Endpoint. Pronto! :D

Amigos, não faço idéia do futuro deste CoreRest, só sei que está sendo muito interessante, pois estou conseguindo me atualizar em algumas coisas, entre elas JSF 2.0 puro, sem o Seam, como disse no meu blog em inglês: JSF2.0 sem o Seam é como “Churrasco sem sal”! Parece que sempre está faltando algo.

Se você for no TDC 2010, na trilha #JEE , você vai poder ver o CoreRest em mais detalhes! Assim que eu der uma organizada no código irei disponibilizar o código dele como opensource!

Desculpem o tom “irreverente” do post, apenas queria mostrar como pode ser simples, você criar no final um “PaaS”- Platform as a Service! Caramba! E eu fiz de tudo para evitar as malditas buzzwords :D

(*) Este é meu blog pessoal, existe uma nota nele que fala que o que eu falo aqui não reflete a opinião ou visão do meu empregador.

(**) Ainda irei adicionar o suporte a Ruby

9 Comments

  1. Edgar Silva says:

    Eu mesmo já tenho uma crítica, em um dos meus refactorings, eu tenho que deixar as URLs dessa APP mais rest-like, e não do tipo: groovyRun.faces?scriptname=feijão :)

  2. Luca Bastos says:

    Muito boa idéia do http://corerest.appsPot.com . Bem na linha do “porque não pensei nisto antes”.

    E sobre planejamento de capacidade….

    Já estudei um bocado de teoria de capacity planning, nos livros dos professores Daniel Menascé & Virgílio Almeida. Sei bem que na prática as previsões funcionam mais ou menos como você descreveu. E com o agravante que é difícil segurar as pressões para cima de grandes fornecedores de hardware e software que costumam trabalhar com o marketing da empurroterapia.

  3. Edgar Silva says:

    Luca,

    Obrigado, assim que o código estiver mais organizado, vou abrir o código para toda a comunidade!

    []s

    Edgar

  4. Serge Rehem says:

    Fala Edgar! Foi Alegomes que me contou desta sua simples e brilhante idéia! Parabéns!

    Fiz uma brincadeirinha fazendo Scrap da consulta do rastreamento de encomendas dos Correios, veja como ficou: http://corerest.appspot.com/groovyEdit.faces?scriptname=encomendaz

    A idéia não é minha, foi implementada pelo colega Marlon Carvalho [1] na biblioteca Alfred [2], depois empacotada no Encomendaz [3]. Ele comentou que pensava em criar um serviço REST, eu aproveitei que estou aprendendo Groovy, e deu nisso…. :-D

    [1] http://silvacarvalho.net
    [2] http://alfredlibrary.org/
    [3] http://code.google.com/p/encomendaz

  5. Edgar Silva says:

    @Serge,

    Muito, mas muito boa mesmo sua idéia, essa é uma das melhores coisas de comunidade, as pessoas criam coisas tão legais e tão melhores que você poderia pensar ao criar a plataforma, isto só me estimula a refazer um CoreRest melhor que o atual, e em alguns dias isso vai estar no ar.

    Melhoramos muito o código, e tive a chance de trabalhar com meu irmão caçula :D , código em familia é mais divertido ainda :)

  6. Gostei desse corerest, vou apresentar ele hoje na minha apresentação de cloud aqui na empresa.

    Tem que virar free logo para que possamos comitar também! :)

    Abraço.

  7. Edgar Silva says:

    @Bruno

    Obrigado pelos comentários!

    O Código está livre no GitHub, acesse aqui: http://github.com/edgars/corerest/

    []s

    Edgar

  8. Edgar,

    Se você não se incomodar, explicarei o código do CoreRest que roda no #GAE, num curso que ministrarei! http://j.mp/creVPm

  9. Edgar Silva says:

    PJ,

    Manda bala, pode usar, explicar, alterar, fique a vontade

    []s

    E

Deixe um comentário