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

  1. 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 -v

  2. Criando 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.

    Gemfile
    source 'https://rubygems.org'
    
    gem 'sinatra'
    gem 'sinatra-activerecord'
    gem 'sqlite3'
    gem 'rack-cors'

  3. 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 install

  4. Configuraçã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.ru
    require 'sinatra'
    require 'sinatra/activerecord'
    
    set :database, {adapter: 'sqlite3', database: 'db/development.sqlite3'}
    
    require './app'
    run Sinatra::Application
    

    migration
    class 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
    

  5. 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.rb
    class Product < ActiveRecord::Base
      validates :name, presence: true
      validates :price, presence: true, numericality: { greater_than: 0 }
    end

  6. 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.rb
    require '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

  7. 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:migrate

  8. Testando 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/products

  9. Implementando 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.rb
    require '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.

Hashtags

#Ruby #Sinatra #APIs #ActiveRecord #DesenvolvimentoDeSoftware