menu

SHARKLABS

Ruby On Rails: Adeus Scaffold Controller e boas-vindas JSONAPI-Resources

/
/
Ruby On Rails: Adeus Scaffold Controller e boas-vindas JSONAPI-Resources
bookmark Ruby on Rails, REST-API access_time

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.

Autor
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." Martin Fowler