Cómo crear una API utilizando Ruby on Rails

February 01, 2022

Tags: Tecnologías
ruby
Unsplash

 

En este blog, te enseñaremos paso a paso cómo crear una API utilizando Ruby on Rails, incliso sin tener un mayor conocimiento sobre este framework que trabaja con lenguaje Ruby.

 

Paso a paso: crear una API utilizando Ruby on Rails

 

Paso 1: Crear una API de Rails

 

Para hacer esto, en el directorio que elijas debes escribir el siguiente código en su terminal. Este permitirá crear una nueva API que llevará por nombre secret_menu_api

 

#in your terminal
rails new secret_menu_api –api}

 

Luego, cambiate al menu de la API abriéndola al escribir esto en tu terminal:

 

# in your terminal
cd secret_menu_api

code .

 

PASO 2: Habilitar CORS (Intercambio de Recursos de Origen Cruzado)

 

CORS permite que otros accedan a su API. Para evitar el acceso no deseado a su API, Rails desactiva automáticamente CORS. En el explorador de archivos de su API de Rails recién creada, expande los siguientes directorios para abrir el archivo cors.rb.

 

config>inicializadores>cors.rb

 

Entonces, Descomenta las líneas 8-16. En la línea 10, cambie el código (origins 'example.com') a (origins'*') como se muestra a continuación:

 

# in config>initializers>cors.rb
# lines 8-16

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'

    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end

 

En el archivo ‘explorer’, ve hacia abajo y abre Gemfile. Descomenta la línea 26, gem ‘rack-cors’:

 

# in Gemfile
gem 'rack-cors'

 

Luego, en el terminal ejecuta: 

 

#in terminal
bundle install

 

Paso 3: Crear el modelo, el controlador, la tabla de migración de la base de datos y la ruta a través del comando Rails g resource

 

Sintaxis del comando:

 

# in terminal
rails g resource Secret_menu_item

 

Luego de hacer esto, notarás que este comando creó los siguientes archivos (incluimos el directorio de archivos en la segunda línea):

 

Un modelo llamado secret_menu_item

app>modelos>secret_menu_item.rb

Un controlador llamado secret_menu_items_controller.rb app>controllers>secret_menu_items_controller.rb

Una ruta llamada rutas.rb

config>routes.rb

Una tabla de migración de base de datos llamada 202042720449_create_secret_menu_items.rb

db>migrar>202042720449_create_secret_menu_items.rb

 

NOTA: 202042720449 es simplemente una marca de tiempo, tu archivo podría tener una marca de tiempo distinta. 

 

Paso 4: En este paso toca especificar los atributos y tipos de datos de un elemento del menú secreto

 

La API se diseñó para mostrar unformación útil acerca de los elementos en el menú secreto, por lo que podemos mostrar dicha información configurando lo siguiente como atributos:

 

  • nombre del elemento del menú secreto
  • nombre del restaurante que ofrece el elemento del menú secreto
  • descripción del menú

 

Especificar atributos

 

En tu 02042720449_create_secret_menu_items.rb, vas a copiar y pegar:

 

# in db>migrate>202042720449_create_secret_menu_items.rb

class CreateSecretMenuItems < ActiveRecord::Migration[6.0]
  def change
    create_table :secret_menu_items do |t|
      t.string :menu_name
      t.string :restaurant_name
      t.string :menu_description
    end
  end
end

 

Migra tu tabla

 

# in your terminal

rails db:migrate

 

Deberías ver lo siguiente en el terminal si la migración fue exitosa: 

 

# Message in your terminal

== 20200427020449 CreateSecretMenuItems: migrating ============================
-- create_table(:secret_menu_items)
   -> 0.0022s
== 20200427020449 CreateSecretMenuItems: migrated (0.0023s) ===================

 

En tu directorio db, debes abrir schema.rb. Vas a notar que este archivo ahora muestra su estructura de datos.

 

# in db>schema.rb

ActiveRecord::Schema.define(version: 2020_05_03_161829) do

  create_table "secret_menu_items", force: :cascade do |t|
    t.string "menu_name"
    t.string "restaurant_name"
    t.string "menu_description"
  end
end

 

Paso 5: Es hora de definir indexar, mostrar, crear, actualiza y de destruir acciones

 

Todo esto, permitirá que nuestra API pueda:

 

  • Índice: mostrar las instancias de los elementos del menú en la base de datos
  • Mostrar: reflejar instancia de un elemento del menú
  • Crear: realizar una instancia del menú
  • Actualizar: update una instancia de un elemento del menú existente
  • Eliminar: deshacerse de un elemento del menú secreto

 

Copia y pega en secret_menu_intems_controller.rb.

 

#in app>controllers>secret_menu_items_controller.rb

class SecretMenuItemsController < ApplicationController
    def index
        @secretMenuItems = SecretMenuItem.all 
        render json: @secretMenuItems
    end 

    def show
        @secretMenuItem = SecretMenuItem.find(params[:id])
        render json: @secretMenuItem
    end 

    def create
        @secretMenuItem = SecretMenuItem.create(
            menu_name: params[:menu_name],
            restaurant_name: params[:restaurant_name],
            menu_description: params[:menu_description]
        )
        render json: @secretMenuItem
    end 

    def update
        @secretMenuItem = SecretMenuItem.find(params[:id])
        @secretMenuItem.update(
            menu_name: params[:menu_name],
            restaurant_name: params[:restaurant_name],
            menu_description: params[:menu_description]
        )
        render json: @secretMenuItem
    end 

    def destroy
        @secretMenuItems = SecretMenuItem.all 
        @secretMenuItem = SecretMenuItem.find(params[:id])
        @secretMenuItem.destroy
        render json: @secretMenuItems
    end 

end

 

Paso 6: crear rutas para indexar, mostrar, crear, actualizar y destruir acciones

 

Cuando se habla de rutas nos referimos a las que reciben las solicitudes HTTP en el lado del cliente, reenviando estas solicitudes a las acciones apropiadas. Para configurarlas, copia y pega en tu route.rb:

 

# in config>routes.rb

Rails.application.routes.draw do
  resources :secret_menu_items, only: [:index, :show, :create, :update, :destroy]
end

 


Paso 7: Sembrar la data

 

Crear instancias de los elementos del menú secreto en la base de datos:

 

# in db>seed.rb

menu1 = SecretMenuItem.create(menu_name: "Chipotle Nachos", restaurant_name: "Chipotle", menu_description:"Build a plate of nachos with all of your favorite fixings")
menu2 = SecretMenuItem.create(menu_name: "Starbucks butterbeer Frappuccino", restaurant_name: "Starbucks", menu_description:"Combine three pumps of toffee nut syrup and three pumps of caramel with a Crème Frappuccino base")
menu3 = SecretMenuItem.create(menu_name: "Skittles", restaurant_name: "Jamba Juice", menu_description:"A mixture of lemonade, lime sherbet, frozen yogurt, and strawberries")

 

Siembra la data

 

# in your terminal
rails db:seed

 

Verifica si se hizo de manera correcta:

 

# in your terminal
rails c

# It will pull up a console
2.6.1 :002 >

 

Escribe SecretMenuItem.all para extraer todas las instancias de los elementos del menú secreto que se sembró:

 

# in your terminal

2.6.1 :002 > SecretMenuItem.all
   (0.5ms)  SELECT sqlite_version(*)
  SecretMenuItem Load (0.2ms)  SELECT "secret_menu_items".* FROM "secret_menu_items" LIMIT ?  [["LIMIT", 11]]
 => #<ActiveRecord::Relation [#<SecretMenuItem id: 1, menu_name: "Chipotle Nachos", restaurant_name: "Chipotle", menu_description: "Build a plate of nachos with all of your favorite ...">, #<SecretMenuItem id: 2, menu_name: "Starbucks butterbeer Frappuccino", restaurant_name: "Starbucks", menu_description: "Combine three pumps of toffee nut syrup and three ...">, #<SecretMenuItem id: 3, menu_name: "Skittles", restaurant_name: "Jamba Juice", menu_description: "A mixture of lemonade, lime sherbet, frozen yogurt...">]>

 

Si puedes visualizar todas las instancias, entonces todos los datos se sembraron con éxito.

 

En Rootstack, nuestros developers expertos han creado APIs para dar solución a los problemas tecnológicos que presentan nuestros clientes. Puedes formar parte de un equipo multicultural de developers, solo aplica aquí y conoce los beneficios de una de las empresas tecnológicas con mayor crecimiento en Latinoamérica.

 

Te recomendamos en video