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
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 -vCriaçã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.
commandsrails new product_api --api --database=postgresql
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.ymldefault: &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
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.
commandsrails g model Product name:string price:decimal
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.
commandsrails db:migrate
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.
commandsrails g controller Products
ProductsController.rbclass 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
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.rbRails.application.routes.draw do resources :products end
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`.
Gemfilegroup :test do gem 'rspec-rails' end
commandsrails generate rspec:install
rails generate rspec:controller Productsspec/controllers/products_controller_spec.rbrequire '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
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.
commandsGET 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.