Ruby on Rails do zero

imagem ilustrativa com o texto Consultando uma API com Ruby on Rails, acompanhada de um notebook, o logo da NASA e o logo do Ruby on Rails sobre um fundo em gradiente laranja-avermelhado.

Como iniciar um projeto Ruby on Rails do zero a partir de uma repository no GitHub

No artigo anterior, conhecemos a estrutura de
pastas do Ruby on Rails e entendemos a importância do padrão MVC (Model-View-Controller) no desenvolvimento web com essa
framework. Agora, nesta terceira parte da série, vamos dar os primeiros passos práticos: clonar o projeto base do
GitHub, instalar as dependências, configurar variáveis de ambiente, consumir uma API real e visualizar dados
astronômicos da NASA diretamente no navegador.

Clonando a repository inicial

Para começar, acesse o terminal e clone a repository pública com o seguinte comando:

git clone https://github.com/vchopDev/astro-explorer-ror.git
cd astro-explorer-ror
git checkout chapter-1-setup-inicial-e-hello-world

O projeto já está configurado com a estrutura básica do Rails, o que significa que você não precisa executar
rails new manualmente. Além disso, o branch chapter-1-setup-inicial-e-hello-world representa
exatamente o ponto inicial da jornada e desse capitolo.

Instalando as dependências do projeto

Antes de instalar as gems, certifique-se de que o Bundler está instalado:

gem install bundler

Em seguida, instale todas as bibliotecas listadas no arquivo Gemfile usando o Bundler:

bundle install

Adicionando a gem HTTParty

Para buscar dados da internet, vamos usar a gem httparty. Ela facilita muito o trabalho com requisições
HTTP. Assim, adicione ao Gemfile a seguinte linha:

gem 'httparty'

Depois, execute novamente:

bundle install

Configurando variáveis de ambiente com dotenv

No Ruby on Rails, o equivalente ao arquivo .env (comum em projetos Node.js) pode ser gerenciado com a gem
dotenv-rails. Isso permite manter sua chave da NASA protegida e fora do código.

    1. Adicione ao Gemfile:
gem 'dotenv-rails', groups: [:development, :test]
    1. Crie o arquivo .env na raiz do projeto:
touch .env
    1. Adicione sua chave da NASA (ou use a demo):
NASA_API_KEY=DEMO_KEY
    1. Carregue a variável no serviço com:
ENV['NASA_API_KEY']

Importante: adicione .env ao seu .gitignore!

Obtendo sua chave da API da NASA

Para obter uma chave personalizada, acesse https://api.nasa.gov e preencha o formulário com seu nome e e-mail. Você receberá uma chave API
válida por e-mail, ideal para uso em produção ou projetos maiores. Entretanto, se preferir começar com testes, a
DEMO_KEY funciona bem, embora tenha limite de requisições.

Criando um serviço para a API da NASA

Agora vamos criar uma classe que fará a comunicação com a API da NASA. Crie o arquivo
app/services/nasa_api_service.rb:

require 'httparty'

class NasaApiService
  include HTTParty
  base_uri 'https://api.nasa.gov/planetary'

  def initialize(api_key = ENV['NASA_API_KEY'] || 'DEMO_KEY')
    @api_key = api_key
  end

  def fetch_apod
    self.class.get('/apod', query: { api_key: @api_key })
  end
end

Entendendo a sintaxe da classe Ruby

Em Ruby, uma classe é definida com a palavra-chave class, seguida do nome da classe em CamelCase. Dentro dela, usamos def para criar métodos. O método initialize funciona como o construtor: é executado automaticamente quando chamamos NasaApiService.new.

Note também o uso de @api_key: o símbolo @ indica que essa é uma variável de instância, ou seja, ela pertence àquele objeto em particular. Já o uso de self.class.get chama o método get da classe HTTParty, que foi incluída com include HTTParty. Isso é uma forma de herdar funcionalidades de outro módulo — algo muito comum em Ruby.

O que faz o include HTTParty?

Essa linha faz com que nossa classe tenha acesso a métodos úteis do módulo HTTParty, como get, post, base_uri e outros.

No Ruby, usar include dentro de uma classe é uma forma de misturar (mixin) funcionalidades de outro módulo no escopo da instância. Ou seja, todos os métodos definidos no módulo HTTParty passam a estar disponíveis dentro da nossa classe como se fossem dela.

Veja o exemplo abaixo:

include HTTParty
base_uri 'https://api.nasa.gov/planetary'

Isso define a URL base para todas as chamadas HTTP feitas com self.class.get(...). Assim, quando usamos get('/apod'), a requisição é feita para https://api.nasa.gov/planetary/apod.

Isso torna o código mais limpo e organizado, separando a responsabilidade da requisição em uma classe isolada.

Ainda que seja uma linguagem orientada a objetos, Ruby é bastante enxuto e expressivo. Por isso, mesmo para iniciantes, o código costuma ser mais fácil de ler — mesmo que você nunca tenha usado Ruby antes.

Gerando o controller e criando a lógica

rails generate controller Apod index

Em app/controllers/apod_controller.rb, substitua por:

require Rails.root.join("app/services/nasa_api_service.rb")
  class ApodController < ApplicationController
    def index
      service = NasaApiService.new
      @apod = service.fetch_apod.parsed_response
    end
  end

Configurando a rota principal

Abra o arquivo config/routes.rb. Por padrão, ele já vem com algumas linhas de comentário e exemplos. Nesse caso, não é necessário apagar tudo — basta adicionar a linha da rota principal dentro do bloco Rails.application.routes.draw do:

Rails.application.routes.draw do
  root "apod#index"
end

Com isso, definimos que a rota raiz da aplicação (ou seja, /) será direcionada para a action index do controller ApodController.

Criando a view

Quando executamos o comando rails generate controller Apod index, o Rails automaticamente cria o arquivo app/views/apod/index.html.erb, correspondente à action que declaramos no controller. Esse arquivo é onde vamos escrever o HTML que será renderizado no navegador.

Agora, edite o conteúdo do arquivo e adicione o seguinte:

<h1><%= @apod['title'] %></h1>
<p><%= @apod['date'] %></p>
<p><%= @apod['explanation'] %></p>

<% if @apod['media_type'] == 'image' %>
  <img src="<%= @apod['url'] %>" alt="Imagem do dia da NASA" style="max-width:100%;">
<% else %>
  <p>Conteúdo não é uma imagem (media type: <%= @apod['media_type'] %>).</p>
<% end %>

Esse código mistura HTML com Ruby (via .erb) para exibir o conteúdo da imagem astronômica do dia retornado pela API. Usamos <%= %> para imprimir valores e <% %> para executar condições sem imprimir.

Rodando o servidor

rails server

Depois, acesse http://localhost:3000 para ver a imagem do dia exibida pela API da NASA!

Mapa topográfico em cores falsas da superfície de Mercúrio, mostrando crateras e elevações com codificação de cor em azul e vermelho, obtido pela sonda MESSENGER.

Conclusão

Com poucos arquivos e comandos, criamos uma aplicação web funcional usando Ruby on Rails. Reforçamos o conceito de MVC —
com Model, View e Controller bem separados — e aprendemos a consumir
uma API externa com segurança. No próximo capítulo, vamos adicionar favoritos e interações mais avançadas.

Ficou com dúvidas? Quer sugerir algo ou compartilhar seu progresso? Deixe um comentário no blog! 🚀

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *