Depois da repopularizarão do JavaScript com o uso intensivo de AJAX
nas páginas Web, os browsers tem se tornado muito mais poderosos do
que antigamente, inclusive com os benefícios incorporados pelo HTML
5. Tendo isso em mente, programadores estão criando aplicações cada
vez mais complexas no browser.
Nos últimos anos, diversos frameworks tem sido lançados, tal como os
mencionados anteriormente. Dessa forma, existem aplicações Web que a
parte de back-end tornou-se uma API que está totalmente independente
da apresentação final ao usuário.
3.2
Recursos ao invés de páginas
Para que nossas aplicações fiquem elegantes, precisamos parar de pensar na maneira
antiquada de se criar aplicações Web cheias de páginas e interações complexas e pen-
74
Casa do Código
Capítulo 3. Conhecendo a aplicação
sarmos em recursos. Não é uma mudança fácil, mas vamos usar este pensamento
durante o livro todo, então até o final, você ficará mais confortável com essa ideia.
Se você já ouviu falar ou sabe o que é REST (Representational State Transfer,
ou Transferência de estado de representação), entender como vamos usar recursos
para modelar nossa aplicação será bem mais fácil. Se você quiser se aprofundar no
assunto, recomendo a leitura do livro Rest in Practice [7].
3.3
Recursos no Colcho.net
Então vamos lá, como fica um recurso no Colcho.net? Relembremos que o Col-
cho.net é um aplicativo em que os seus usuários podem mostrar quartos vagos, ou
até um colchonete que pode ser usado em sua sala em troca de uma grana e quem
sabe fazer novas amizades.
Assim, o primeiro recurso que podemos identificar é o Quarto. Em nosso sis-
tema, será possível listar quartos, exibir detalhes de um quarto, criar um novo quarto,
editar um quarto já existente e removê-lo.
Recursos assim são fáceis de serem mapeados, pois estão diretamente ligados
a uma unidade lógica do sistema. Porém, existem recursos que são menos óbvios.
Por exemplo, como representar o login de um usuário? Para isso, teremos o recurso
Sessão. Poderemos criar uma sessão ou destruí-la, porém nada mais que isso.
Em sistemas REST, ações com recursos são mapeados em duas partes: um verbo
HTTP e uma URL. Veja os seguintes exemplos:
75
3.4. Conhecendo os componentes
Casa do Código
O que são verbos HTTP?
Verbos HTTP são ações que podem ser executadas em um recurso iden-
tificado por uma URL. A implementação do comportamento fica a cri-
tério do servidor, não existe um padrão. Os verbos usados no Ruby on
Rails são:
GET - para retornar um recurso específico ou uma coleção;
POST - para enviar um novo elemento à uma coleção;
PUT - para alterar um elemento existente;
DELETE - para remover um elemento.
GET /rooms: Verbo GET na URL /rooms mapeia para a listagem de todos os
quartos;
POST /rooms: Verbo POST na URL /rooms mapeia para a inserção de mais um
novo quarto na coleção de quartos;
DELETE /rooms/123: Verbo DELETE na URL /rooms/123 mapeia para a remo-
ção do quarto cujo identificador único é 123.
Se fizermos dessa maneira, o Rails nos ajuda e bastante e de quebra ganhamos
facilidade ao usar frameworks de client-side quando necessário.
Essa é a visão externa da arquitetura de aplicações Web. Vamos entrar então na
arquitetura interna.
3.4
Conhecendo os componentes
O Ruby on Rails é um framework que adota o padrão de arquitetura chamado
Model-View-Controller (MVC), ou Modelo, Apresentação e Controle.
Modelos possuem duas responsabilidades: eles são os dados que normalmente
ficam persistidos em um ou mais banco de dados (seu perfil de usuário, por exem-
plo). Eles também fazem parte da regra de negócio, ou seja, cálculos e outros proce-
dimentos,
como verificar se uma senha é válida.
76
Casa do Código
Capítulo 3. Conhecendo a aplicação
O Controle é a camada intermediária entre a Web e o seu sistema. Ele pega
os dados que vem de parâmetros na URL e/ou de um formulário e repassa para os
modelos, que vão fazer o trabalho pesado. Em seguida, pega o resultado e transforma
da maneira adequada para a Apresentação.
A Apresentação é como o aplicativo mostra o resultado das operações e os dados.
Normalmente podem ser uma bela página usando as novas tecnologias de CSS 3 e
HTML 5 a até pequenas representações de objetos em JSON.
3.5
Os modelos
Quando criamos aplicações Ruby on Rails, basicamente usamos um componente
chamado ActiveRecord. O ActiveRecord é um Object-Relational-Mapping, ou seja,
uma biblioteca que faz o mapeamento de estruturas relacionais (leia-se SQL e bancos
de dados relacionais) a objetos Ruby.
O ActiveRecord internamente usa uma biblioteca bastante poderosa chamada
Arel. Com o uso do Arel o ActiveRecord consegue transformar chamadas de mé-
todos Ruby em complexas consultas SQL e depois mapear de volta em objetos Ruby.
Isso tudo é muito conveniente, veja alguns exemplos:
Room.all
# SELECT "rooms".* FROM "rooms"
Room.where(:location => ['São Paulo', 'Rio de Janeiro'])
# SELECT "rooms".* FROM "rooms" WHERE "rooms"."location"
#