Introdução
Neste tutorial, você aprenderá a criar uma API RESTful robusta utilizando Ruby e o framework Sinatra em conjunto com a biblioteca ActiveRecord para gerenciamento de banco de dados. A API será capaz de realizar operações CRUD (Criar, Ler, Atualizar e Deletar) em uma entidade simples, permitindo que você entenda como cada parte do processo se conecta. Este guia é ideal tanto para iniciantes quanto para desenvolvedores experientes que desejam se aprofundar no desenvolvimento de APIs com Ruby, proporcionando uma base sólida para criar aplicações mais complexas no futuro.
Etapas
Configuração do Ambiente de Desenvolvimento
Certifique-se de que você tem Ruby e Bundler instalados em sua máquina. Você pode verificar se estão instalados executando `ruby -v` e `bundle -v` no terminal. Se não tiver, instale o Ruby através do RVM ou rbenv e o Bundler através do comando `gem install bundler`.
commands# Verificar versões instaladas
ruby -v
bundle -vCriando o Projeto Sinatra
Crie uma nova pasta para o seu projeto e inicialize um novo arquivo `Gemfile`. Este arquivo gerenciará as dependências do seu projeto. Adicione o Sinatra e o ActiveRecord ao Gemfile.
Gemfilesource 'https://rubygems.org' gem 'sinatra' gem 'sinatra-activerecord' gem 'sqlite3' gem 'rack-cors'
Instalação das Dependências
Depois de configurar o Gemfile, execute o comando `bundle install` para instalar todas as dependências necessárias do projeto.
commands# Instalar dependências
bundle installConfiguração do Banco de Dados e Migração
Crie um arquivo chamado `config.ru` para configurar o Sinatra e o ActiveRecord. Em seguida, crie um arquivo de migração para definir a tabela do banco de dados.
config.rurequire 'sinatra' require 'sinatra/activerecord' set :database, {adapter: 'sqlite3', database: 'db/development.sqlite3'} require './app' run Sinatra::Application
migrationclass CreateProducts < ActiveRecord::Migration[6.1] def change create_table :products do |t| t.string :name t.decimal :price, precision: 10, scale: 2 t.timestamps end end end
Criação da Classe Modelo `Product`
Crie uma classe modelo chamada `Product` que incluirá as validações e atributos relevantes. Essa classe representará a tabela de produtos no banco de dados.
product.rbclass Product < ActiveRecord::Base validates :name, presence: true validates :price, presence: true, numericality: { greater_than: 0 } end
Implementação do Controlador
Crie um controlador que expõe as rotas necessárias para realizar operações CRUD. Utilize os métodos do Sinatra para definir as respostas JSON.
app.rbrequire 'sinatra' require 'sinatra/activerecord' require './model/product' class App < Sinatra::Base set :default_content_type, :json get '/products' do Product.all.to_json end post '/products' do product = Product.create(JSON.parse(request.body.read)) product.to_json end get '/products/:id' do Product.find(params[:id]).to_json end put '/products/:id' do product = Product.find(params[:id]) product.update(JSON.parse(request.body.read)) product.to_json end delete '/products/:id' do Product.find(params[:id]).destroy status 204 end end
Executando as Migrações
Agora que você configurou seu modelo e controlador, execute as migrações para criar as tabelas no banco de dados. Use o comando abaixo.
commands# Executar migrações
rake db:migrateTestando a API
Utilize ferramentas como Postman ou cURL para testar as rotas que você criou. Você pode criar, listar, atualizar e deletar produtos a partir da sua API.
curl_examples# Listar todos os produtos
curl -X GET http://localhost:4567/products
# Criar um novo produto
curl -X POST -H 'Content-Type: application/json' -d '{"name":"Novo Produto", "price":99.99}' http://localhost:4567/productsImplementando Testes Unitários
Crie testes para garantir que sua API funcione conforme o esperado. Utilize RSpec para implementar os testes das funcionalidades da API.
spec.rbrequire 'rspec' require 'rack/test' require_relative '../app' RSpec.describe App do include Rack::Test::Methods def app App end it 'retorna todos os produtos' do get '/products' expect(last_response).to be_ok end # Adicione mais testes para os métodos POST, PUT e DELETE end
Conclusão
Neste tutorial, você aprendeu como construir uma API RESTful utilizando Ruby com Sinatra e ActiveRecord, passando pela configuração do ambiente, criação das rotas, manipulação de dados no banco e implementação de testes para garantir a confiabilidade do seu código. Com essa base, você está pronto para expandir suas habilidades e desenvolver aplicações mais complexas e escaláveis, aproveitando a simplicidade e a eficiência do stack Ruby.