Ruby On Rails: Adeus Scaffold Controller e boas-vindas JSONAPI-Resources
Todos sabem que criar uma REST API com Ruby On Rails é fácil. Mas isso pode ser mais fácil ainda!
Eu gosto dos Scaffolds
Não há como negar que os Scaffolds estão entre os principais recursos do Ruby On Rails. Eu uso frequentemente e posso dizer que aumentam muito a minha produtividade.
Outro benefício dos Scaffolds é diminuir a curva de aprendizagem do programador. É muito útil para quem gosta de ler e estudar o código-fonte escrito por terceiros.
Vale lembrar existem vários Scaffolds dentro do Ruby On Rails, extremamente úteis para criar: migrations, models, controllers, views e tests.
Breve explicação sobre os Scaffolds
O objetivo do Scaffold é auxiliar o programador na criação de arquivos do Ruby On Rails e inserir neste arquivo um código-fonte padrão. A grosso modo é isso, se você não sabe do que se trata, recomendo dar uma estudada neste assunto.
Existem casos que o código-fonte padrão inserido pelo Scaffold é suficiente, mas é muito comum que este código precise ser aperfeiçoado ao longo do projeto.
Identifiquei um problema com o Scaffold Controller
O problema que identifiquei com o Scaffold Controller é que frequentemente eu precisava adicionar funcionalidades aos controllers. Além disso, estas funcionalidades eram normalmente as mesmas, por exemplo: Filtros, ordenações, paginações e relacionamentos.
Neste caso temos um problema de duplicidade de código-fonte, ou seja, a mesma funcionalidade escrita em diversos locais e muitas vezes escrita de maneira diferente. Vale lembrar que isso vai contra a um dos princípios do Ruby On Rails: Don't repeat yourself.
Foi o momento que eu precisava centralizar essas funcionalidades e estabelecer um padrão de como estruturar estes filtros, ordenações, paginações e relacionamentos.
Encontrei o padrão JSON API
O JSON API é uma convenção de como uma REST API deve ser estrutura. Recentemente escrevi um artigo sobre JSON API e recomendo que você leia (clique aqui).
Algo que escrevi neste artigo é que existem várias bibliotecas que ajudam a implementar o JSON API para diversas linguagens. Com Ruby On Rails não é diferente.
Ruby On Rails com JSONAPI-Resources
Se você precisa construir uma REST API com Ruby On Rails, recomendo que você utilize JSONAPI-Resources.
O JSONAPI-Resources é uma GEM que adiciona ações nos seus Controllers de uma maneira muito fácil e intuitiva. Estas ações podem ser: Index, show, create, update e destroy.
Além de facilitar a construção de uma REST API, todas ações e parâmetros ficam dentro do padrão estabelecido pelo JSON API.
Vale ressaltar que o JSONAPI-Resources foi construído pela equipe da Cerebris, ou seja, a mesma equipe que especificou o JSON API.
JSONAPI-Resources: Show me code
É muito fácil utilizar o JSONAPI-Resources. Primeiramente você deve adicionar as ações do JSONAPI-Resources ao seu Controller, neste caso recomendo que você faça isso no ApplicationController.
class ApplicationController < ActionController::Base
include JSONAPI::ActsAsResourceController
end
Fazendo isso, seu Controller não precisa especificar mais nada, ficando da seguinte maneira.
class PeopleController < ApplicationController
end
Agora vamos criar um Resource, ou seja, o local onde faremos a configuração da nossa API. No Resource será especificados os campos disponíveis na API, filtros disponíveis, seus relacionamentos e demais recursos necessários.
class PersonResource < JSONAPI::Resource
attributes :id, :name, :country_id
filters :name, :country_id
end
Importante ressaltar que os Resources devem ficar na pasta my_project/app/resources/ .
Para que nossa API esteja completa, precisamos configurar as rotas. O arquivo routes.rb deve ficar da seguinte maneira:
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
Rails.application.routes.draw do
jsonapi_resources :people
end
Pronto! Nossa REST API com Ruby On Rails e JSON-Resources está pronta!
Por fim
Também existem Scaffolds para gerar JSONAPI-Resources. Não tem jeito, os Scaffolds fazem parte do nosso dia-a-dia.
Se você quer ver mais detalhes da implementação, criei um pequeno exemplo com Ruby On Rails e JSONAPI-Resources. Está disponível no GitHub e pode ser acessado por meio deste link.
Dúvidas ou sugestões é só entrar em contato. Abraço.