Introdução

Neste tutorial, vamos explorar como construir uma API RESTful de forma eficiente utilizando Ruby on Rails, uma das ferramentas mais populares para o desenvolvimento rápido de aplicações web. A API RESTful que iremos desenvolver será um serviço simples de gerenciamento de produtos. Vamos abordar práticas recomendadas no design de APIs, configurar o ambiente de desenvolvimento, implementar a lógica do servidor e, finalmente, testar a API utilizando o Postman. Este guia prático é ideal para desenvolvedores que desejam aprimorar suas habilidades em Ruby on Rails e aprender as melhores práticas para criar APIs escaláveis e eficientes.

Etapas

  1. Configuração do Ambiente de Desenvolvimento

    Para começar, você precisa ter Ruby e Rails instalados em sua máquina. Certifique-se de ter o Ruby instalado com a versão 2.7 ou superior e Rails na versão 6 ou superior. Você também precisará do Node.js e do Yarn para gerenciamento de pacotes. Utilize os comandos abaixo para verificar se estão corretamente instalados.

    commands
    # Verifique a versão do Ruby
    ruby -v
    # Verifique a versão do Rails
    rails -v
    # Verifique a versão do Node.js
    node -v
    # Verifique a versão do Yarn
    yarn -v

  2. Criação do Projeto Rails

    Agora, vamos criar um novo projeto Rails. Utilize o comando abaixo no terminal para gerar um novo aplicativo chamado ‘product_api’. Neste projeto, configuraremos o padrão de API para que ele não gere views desnecessárias.

    commands
    rails new product_api --api --database=postgresql

  3. Configuração do Banco de Dados

    Edite o arquivo `config/database.yml` para configurar as credenciais do seu banco de dados PostgreSQL. Depois, execute as migrações iniciais do banco de dados.

    database.yml
    default: &default
      adapter: postgresql
      encoding: unicode
      pool: 5
      username: seu_usuario
      password: sua_senha
      host: localhost
    
    development:
      <<: *default
      database: product_api_development
    
    # Adicione os ambientes test e production

  4. Criação do Modelo `Product`

    Vamos criar um novo modelo chamado `Product`, que representará os produtos da nossa API. Utilize o comando abaixo para gerar a migração e o modelo ao mesmo tempo.

    commands
    rails g model Product name:string price:decimal

  5. Executando as Migrações

    Após criar o modelo, agora vamos executar as migrações para que a tabela `products` seja criada no banco de dados.

    commands
    rails db:migrate

  6. Implementação do Controlador `ProductsController`

    Agora vamos criar um controlador chamado `ProductsController` que lidará com as requisições para a nossa API. O controlador usará o padrão RESTful para gerenciar os produtos.

    commands
    rails g controller Products

    ProductsController.rb
    class ProductsController < ApplicationController
      def index
        products = Product.all
        render json: products
      end
    
      def show
        product = Product.find(params[:id])
        render json: product
      end
    
      def create
        product = Product.new(product_params)
        if product.save
          render json: product, status: :created
        else
          render json: product.errors, status: :unprocessable_entity
        end
      end
    
      def update
        product = Product.find(params[:id])
        if product.update(product_params)
          render json: product
        else
          render json: product.errors, status: :unprocessable_entity
        end
      end
    
      def destroy
        product = Product.find(params[:id])
        product.destroy
        head :no_content
      end
    
      private
    
      def product_params
        params.require(:product).permit(:name, :price)
      end
    end

  7. Configuração das Rotas

    Você precisa configurar as rotas da sua aplicação para direcionar as requisições para os métodos corretos do `ProductsController`. Edite `config/routes.rb` para adicionar as rotas de produtos.

    routes.rb
    Rails.application.routes.draw do
      resources :products
    end

  8. Testes Unitários com RSpec

    Vamos adicionar testes unitários básicos para o nosso controlador usando a gem RSpec. Adicione a gem ao seu Gemfile e crie um arquivo de teste para o `ProductsController`.

    Gemfile
    group :test do
      gem 'rspec-rails'
    end

    commands
    rails generate rspec:install
    rails generate rspec:controller Products

    spec/controllers/products_controller_spec.rb
    require 'rails_helper'
    
    RSpec.describe ProductsController, type: :controller do
      let(:product) { Product.create(name: 'Test Product', price: 10.0) }
    
      describe 'GET #index' do
        it 'returns a success response' do
          get :index
          expect(response).to be_successful
        end
      end
    
      # Adicione mais testes para show, create, update e destroy
    end

  9. Testando a API com Postman

    Com a API configurada, você pode usar o Postman para testar os endpoints da sua nova API. Aqui estão exemplos de como usar o Postman para interagir com os endpoints: GET, POST, PUT e DELETE.

    commands
    GET http://localhost:3000/products
    POST http://localhost:3000/products
    Body: {"product":{"name":"New Product", "price":19.99}}
    PUT http://localhost:3000/products/:id
    DELETE http://localhost:3000/products/:id

Conclusão

Neste tutorial, você aprendeu como construir uma API RESTful completa utilizando Ruby on Rails, desde a configuração do ambiente até a implementação da lógica de negócios e controle de requisições. Também vimos como realizar testes básicos utilizando RSpec e como usar o Postman para fazer chamadas aos endpoints da API. Agora, você está preparado para expandir ainda mais suas habilidades em Ruby on Rails e desenvolver aplicações mais complexas e eficazes.

Hashtags

#RubyOnRails #APIs #RESTfulAPI #Postman #RSpec #DesenvolvimentoDeSoftware