Tutorial Ruby on Rails API: Cómo Crear una API RESTful paso a paso
Introducción
Bienvenido a este tutorial Ruby on Rails API, enfocado en desarrolladores principiantes e intermedios que desean iniciarse en el desarrollo backend Ruby y crear API RESTful usando Rails. Aquí aprenderás desde la instalación y configuración del entorno hasta la creación de modelos, controladores, rutas y manejo completo de solicitudes HTTP (GET, POST, PUT, DELETE). También cubriremos validaciones y cómo responder con JSON, que es vital para las APIs modernas.
¡Vamos a comenzar!
Configuración del entorno de desarrollo
Requisitos previos
Antes de crear tu API REST Rails, asegúrate de tener instalado:
- Ruby (versión 2.7 o superior recomendada)
- Rails (versión 6 o 7)
- SQLite3 o cualquier otra base de datos compatible
- Bundler para manejar dependencias
Instalación de Ruby y Rails
Si no tienes Ruby instalado, puedes hacerlo desde ruby-lang.org.
Luego, instala Rails ejecutando en la terminal:
1 2 |
gem install rails |
Confirma la versión instalada con:
1 2 |
rails -v |
Crear un nuevo proyecto Rails API
Utilizaremos la opción --api
para crear un proyecto enfocado en API RESTful.
1 2 3 |
rails new mi_api_rails --api cd mi_api_rails |
La opción --api
configura Rails para responder en JSON y con menos middleware, ideal para APIs.
Ejecutar el servidor
Verifica que todo esté funcionando:
1 2 |
rails server |
Abre tu navegador en http://localhost:3000
para ver la página de bienvenida Rails, aunque en modo API es mínima.
Crear un modelo con Rails
Vamos a crear un recurso sencillo: Article (artículos), con atributos comunes como título y contenido.
1 2 3 |
rails generate model Article title:string content:text rails db:migrate |
Esta orden genera el modelo Article
con los campos title
y content
, y luego ejecuta la migración para crear la tabla en la base de datos.
Modelo generado: app/models/article.rb
Ahora, abre app/models/article.rb
, donde podrás agregar validaciones para el modelo.
1 2 3 4 5 6 7 |
class Article < ApplicationRecord # Validar que el título esté presente y sea único validates :title, presence: true, uniqueness: true # Validar que el contenido esté presente validates :content, presence: true end |
Las validaciones ayudan a que la API evite guardar datos inválidos.
Crear controladores y rutas para la API
Ahora implementaremos el controlador para Article
que responda a las solicitudes RESTful: GET, POST, PUT/PATCH y DELETE.
Generar el controlador
1 2 |
rails generate controller Articles |
Definir rutas en config/routes.rb
Rails facilita las rutas REST con resources
.
1 2 3 4 5 6 7 8 |
Rails.application.routes.draw do namespace :api do namespace :v1 do resources :articles end end end |
Esta estructura ronda las mejores prácticas para versionado de APIs. Tus URLs quedarán tipo /api/v1/articles
.
Crear el controlador con acciones RESTful
Dentro de app/controllers/api/v1/articles_controller.rb
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
module Api module V1 class ArticlesController < ApplicationController before_action :set_article, only: [:show, :update, :destroy] # GET /api/v1/articles def index @articles = Article.all render json: @articles end # GET /api/v1/articles/:id def show render json: @article end # POST /api/v1/articles def create @article = Article.new(article_params) if @article.save render json: @article, status: :created else render json: { errors: @article.errors.full_messages }, status: :unprocessable_entity end end # PUT /api/v1/articles/:id # PATCH /api/v1/articles/:id def update if @article.update(article_params) render json: @article else render json: { errors: @article.errors.full_messages }, status: :unprocessable_entity end end # DELETE /api/v1/articles/:id def destroy @article.destroy head :no_content end private def set_article @article = Article.find(params[:id]) rescue ActiveRecord::RecordNotFound render json: { error: 'Article not found' }, status: :not_found end def article_params params.require(:article).permit(:title, :content) end end end end |
Explicación de cada acción
- index: Lista todos los artículos con un
GET
- show: Muestra un artículo por ID con
GET
- create: Crea un nuevo artículo con
POST
y validación - update: Actualiza un artículo con
PUT
oPATCH
- destroy: Borra un artículo con
DELETE
El método set_article
busca el artículo por ID o devuelve error 404 si no existe.
Probar la API con cURL o Postman
Listar artículos
1 2 |
curl http://localhost:3000/api/v1/articles |
Crear un artículo
1 2 3 4 |
curl -X POST http://localhost:3000/api/v1/articles \ -H "Content-Type: application/json" \ -d '{"article": {"title": "Mi primer artículo", "content": "Contenido del artículo..."}}' |
Actualizar artículo (suponiendo ID=1)
1 2 3 4 |
curl -X PUT http://localhost:3000/api/v1/articles/1 \ -H "Content-Type: application/json" \ -d '{"article": {"title": "Título actualizado", "content": "Nuevo contenido"}}' |
Borrar artículo (ID=1)
1 2 |
curl -X DELETE http://localhost:3000/api/v1/articles/1 |
Buenas prácticas para desarrollo backend Ruby con APIs Rails
- Usa nombres coherentes y RESTful para rutas y acciones
- Valida siempre los datos en modelos antes de guardar
- Maneja errores con respuestas JSON claras y códigos HTTP adecuados
- Versiona tu API para controlar cambios sin afectar clientes existentes
- Usa filtros
before_action
para reducir código repetido - Protege la API con autenticación (como JWT) en proyectos reales
Conclusión
Acabas de crear tu primera API RESTful Ruby on Rails, que incluye:
- Instalación y configuración del entorno
- Creación del modelo con validaciones
- Controladores y rutas RESTful
- Manejo de solicitudes HTTP (GET, POST, PUT, DELETE)
- Respuestas JSON y manejo de errores
Este tutorial Ruby on Rails API es la base para construir robustas APIs backend, preparadas para cualquier cliente como apps móviles o frontend SPA.
¿Qué sigue?
Te invitamos a:
- Añadir autenticación a tu API con
devise
o JWT - Explorar serializadores como
ActiveModel::Serializer
para controlar la salida JSON - Agregar pruebas automáticas con RSpec
Empieza a construir servicios escalables con Ruby on Rails, domina el desarrollo backend Ruby y lleva tus proyectos a un nuevo nivel.
¡Sigue aprendiendo y creando APIs RESTful con Rails!