Resources e boas práticas de rotas em Rails

Escrito em 26 de Outubro de 2021 por Redação iugu

Atualizado em 24 de Agosto de 2023

Na programação, assim como em outras áreas, é de extrema importância que o profissional mantenha boas práticas.

Elas são essenciais para garantir a qualidade e a integridade do serviço, e seguí-las é obrigatório para todo bom profissional.

Quando se fala em rotas, a história não é diferente. Nesse ecossistema MVC, que usa um patterner de convention over configuration, seguir boas práticas facilita muito a manutenção, por exemplo.

Felizmente, o Rails dispõe de várias alternativas para isso. Nesse artigo, discutiremos como escrever rotas de forma escalável e alinhada aos padrões do Rails.

 

Resources

Quando trabalhamos com bancos de dados relacionais para sistemas web, já esperamos nos deparar com as quatro operações básicas Create, Read, Update e Delete (CRUD). Uma entidade em Rails que facilita esse trabalho é a resources — que cria por padrão todas as rotas de CRUD para um determinado controlador.

No exemplo abaixo, são criadas as rotas necessárias para CRUD do objeto “cars”. As rotas padrão em Rails são: new, create, edit, update e destroy.

Com apenas duas palavras, criamos cinco rotas separadas com seus respectivos métodos de requisição HTTP (como POST para criar um objeto). Entretanto, é possível que não sejam necessárias todas as rotas. Se esse for o caso, pode-se utilizar um parâmetro para especificar exatamente as rotas de CRUD desejadas. Em Rails, este parâmetro é o only.

No exemplo a seguir, criamos apenas as duas rotas necessárias para a criação do objeto “cars” — new e create.

As demais rotas (edit, update e destroy) não são criadas nesse caso, o que facilita o uso de resources por permitir evitar a criação de rotas desnecessárias para a aplicação.

Esses são exemplos básicos de uso de resources para criação das rotas, mas sabemos que exemplos básicos não contemplam a variedade de cenários de fato encontrados no dia a dia dos profissionais.

Conforme a aplicação escala, torna-se cada vez mais inevitável o uso de rotas personalizadas. Felizmente, a entidade resources também dá conta desses casos, garantindo um código de melhor leitura, manutenção e escalabilidade.

 

Resources em bloco

O método resources pode ser utilizado em blocos, facilitando a criação de rotas personalizadas e rotas aninhadas. Confira a seguir como criar cada uma delas:

 

Rotas membro (:member)

Suponha que precisemos da rota “/cars/:id/informations”, que exibe informações de um carro específico. Ao invés de criar a rota manualmente (get “cars/:id/informations”), é possível abrir um bloco com resources e adicioná-la como member. Assim, a rota recebe o parâmetro ID do objeto “carro” que será necessário para localizar e exibir as informações do mesmo.

 

 

Coleções de rotas (:collection)

Às vezes precisamos de rotas relacionadas a “Carros” em geral, que não necessitam do atributo ID. Isso acontece, por exemplo, quando queremos filtrar a base de dados para exibir todos os carros de uma determinada cor. Para criar essa rota (cars/red), usamos :collection. 

É um processo similar ao uso de :member, mas no caso de :collection estamos referenciando todos os objetos ao invés de um objeto específico.

 

Rotas personalizadas

Seguindo o exemplo acima, imagine que precisamos das rotas de CRUD para “Acessórios adicionais”, e  que esses “Acessórios” estão diretamente relacionados a um carro, ou seja, as rotas de acessórios estarão sempre depois do caminho “cars/:car_id/”. A rota para criar um acessório será: “cars/:car_id/accessories/new”. Nesse caso, o ID do objeto carro é referenciado como :car_id, porque temos um outro objeto na rota que também pode precisar de um ID. 

Em vez de declarar várias rotas separadas repetindo a base do path, podemos simplesmente usar resources em bloco inserindo um novo resource para os Acessórios.

Dessa forma, temos todas as rotas para o CRUD de “Acessórios” — seguindo as boas práticas do Rails e com o código bem limpo. Você pode seguir o exemplo para todas as relações que houver em suas tabelas e quando fizer sentido o aninhamento das rotas.

 

Resources: agilidade e segurança para o desenvolvedor

O uso da entidade resources é uma excelente prática em Rails, e deve sem dúvidas ser incorporada por todo bom desenvolvedor de software.  Com resources você agiliza seu trabalho de criação de rotas padrão (default), personalizadas e aninhadas. Esses três tipos de rotas darão conta da vasta maioria das suas necessidades, e garantirão mais segurança na escalabilidade da aplicação, além de um código limpo e de fácil manutenção.