Introducción
Ruby es un lenguaje de programación dinámico y de código abierto enfocado en la simplicidad y productividad. Su elegante sintaxis se siente natural al leerla y fácil al escribirla. Fue diseñado y escrito por Yukihiro Matsumoto, se ejecuta en una variedad de plataformas, como Windows, Mac OS y varias versiones de UNIX. tiene características que son similares a las de Smalltalk, Perl y Python.
Hay que entender que ruby es el lenguaje base mientras que Rails es un marco de aplicaciones web que incluye todo lo necesario para crear aplicaciones web respaldadas por bases de datos de acuerdo con el patrón Model-View-Controller (MVC). que en conjunto podrás realizar cms interesantes.Probablemente ya haya utilizado muchas de las aplicaciones que se crearon con Ruby on Rails: Basecamp , GitHub , Shopify , Airbnb , Twitch , SoundCloud , Hulu , Zendesk , Square , Highrise , Cookpad .
Esos son solo algunos de los grandes nombres, pero literalmente hay cientos de miles de aplicaciones creadas con el framework, ahora es importante decir que se puede crear un CMS (content management system) en ruby on rails, pero en este apartado nos vamos a enfocar a la creación de servicios rest que puedan ser consumidos por otras aplicaciones como android, ember o angular o cualquier front que requiera los datos en formato json, hay que comentar que ruby cuenta con un sin fin de gemas que nos ayudan a realizar tareas específicas estas gemas son librerías para crear la aplicación rápidamente , una gema en particular es grape que nos permite hacer la exposición de los servicios REST.
Ahora vamos viendo que necesitamos para crear una aplicación primero que nada es la instalación de ruby y rails
¿Qué es Grape?
La instalación de la gema de Grape en una aplicación de Rails nos permite usar el DSL de Grape para construir fácilmente una API desde nuestro backend. A partir de entonces, cualquier cliente web puede, a través de solicitudes HTTP, hacer un CRUD de los datos en nuestra base de datos.
Instalando Ruby on Rails
Desde la pagina https://www.ruby-lang.org/en/documentation/installation/ nos podemos dar cuenta que existen diferentes formas de instalar ruby puedes hacerlo de la manera que mas te convenga pero como recomendacion puedes usar RVM (“Ruby Version Manager”), esto es para tener mas de alguna version de ruby esto lo puedes optener desde https://rvm.io/ pero te preguntaras para que necesito tener mas rubies esto es por que si alguna persona creo un CMS en una versión en particular puedas ejecutarla y mantener todo el potencial sin estar adaptando el código a la nueva versión.
Comprobamos que la version ruby como en la fig 1.1
Fig. 1.1 verificando la version de ruby.
Ahora instalamos Rails, con Rubygems, puede instalar todos los Rails y sus dependencias usando el siguiente comando a través de la consola:
gem install rails
Comprobamos la versión de Rails.
Fig. 1.2 verificando la version de rails.
Ya que tenemos verificada las versiones de Ruby y de Rails
Construyendo la API.
Creamos la aplicación.
Fig. 1.3 creando una nueva aplicación con el comando new de Rails donde Demo es el nombre de nuestro proyecto.
Se crean todos los elementos principales y se instalan todas las gemas para levantar un proyecto. Ya teniendo el proyecto creado hay que entrar a la carpeta.
Fig. 1.4 Entrando al directorio del proyecto
Ahora corremos el servidor web de Ruby on rails recuerda que por default se levanta y escucha en el puerto 3000, si este está ocupado pero es posible levantarse en otro puerto después del comando ponerle rails s -p 3001 por ejemplo.
Fig. 1.5 Levantando el servidor en el puerto 3000 por default
Verificamos Rails en algún navegador web. Y si todo esta bien tendrá una salida como la siguiente. Figura 1.6
Fig. 1.6 Verificando en el navegador si se levanto bien verá esta pantalla.
Para detener el servidor use Ctrl C
Configurando las gemas
Ahora agregaremos las gemas que vamos a utilizar estas gemas no se agregan por default localizamos el archivo gemfile, estas gemas son las de grape, json y las de mysql que es la base de datos que vamos a utilizar.
Fig. 1.7 Agregando las gemas al archivo gemfile para que se agreguen al proyecto.
Después de agregarla volvemos a la consola y ejecutamos.
Fig. 1.8 El comando bundle agrega todas las gemas que nos hacían falta agregar y que están agregadas al gemfile.
Si no hay cambios podemos ejecutar Bundle update para que recargue las gemas o si se agregaron bien continuamos con nuestra aplicación con Grape que es el punto central y final de esta artículo.
Pasamos a la base de datos, buscamos y encontramos el archivo siguiente está se encuentra en la carpeta config.
Agregando la base de datos mysql
Fig. 1.9 Archivo Database para la configuración de la base de datos.
Dentro de este archivo configuramos la base de datos rails genera tres bases de datos una para desarrollo otra para test y una final para producción. Pero por ahora solo nos enfocaremos a la base de desarrollo que es con la que empezamos a construir.
Fig. 1.10 Configuración de la base de datos con host, user y password.
Cuando ya tengamos configurada la base pasamos a crear la tabla y recuerde que ruby on rails corre sobre migraciones esto quiere decir que la tabla se crea en código junto al modelo y luego la importamos a la base.
Fig. 1.11 Creación del modelo con la tabla y sus campos
En este ejemplo creamos el modelo para la tabla productos, pero para enviarla a la base de datos mysql se utiliza el rake que es otra gema de rake con create crea la base de datos y migrate pasa la tabla creada en este caso productos
Fig. 1.12 Creamos la base de datos con Rake y migramos nuestra tabla.
Esto nos crea la tabla en mysql y verificamos que sea correcta la migración
Fig. 1.13 Verificamos si la tabla fue creada con exito desde mysql Workbench
En la carpeta models se crea un archivo producto.rb es necesario configurarlo para que ese modelo vaya a la tabla de productos de la siguiente forma.
Fig. 1.14 Agregamos al modelo el nombre de la tabla que va a consumir.
Ahora podemos agregar los datos desde el archivo seed creamos los siguientes arrays en el archivo que esta en las migraciones seed.rb
Fig. 1.15 Agregamos Datos de muestra con seed.
Esto es para agregar datos a la tabla desde la consola ejecutamos para poblar la base esto lo puedes hacer cuando tengas catálogos que son necesarios para que el sistema funcione en este caso solo como ejemplo de como poblar la base de datos.
Fig. 1.16 enviamos los registros a la base de datos
Preparando para servir los webservices
Ahora si vemos cómo exponer esos datos en un json basándonos en este principio nuestro objetivo entonces es poder realizar un correcto versionamiento de los diferentes métodos que tendremos en el API, para esto la idea es tener rutas similares a las siguientes controller/api/v1/productos
Creamos el camino hacia nuestros controladores esto se hace con el archivo base.rb
Fig. 1.17 Archivo base.rb
Y tenemos un segundo archivo base dentro de la carpeta v1 base.rb
Fig. 1.18 Archivo dentro de v1 base.rb
Nos vamos a la carpeta router.rb
Fig. 1.19 Archivo router.rb
Ahora crearemos un archivo defaults, en este configuramos tanto el formato de salida y los errores que queremos devolver al usuario y lo agregamos en la carpeta controller.
Fig. 1.20 Configuración del archivo default.
Nos falta serializar la salida de los datos después ejecutamos desde consola la siguiente instrucción
Fig. 1.21 Generación del serialize para el modelo productos
Fig. 1.22 Agregamos los campos que queremos que nos devuelva.
Bueno ya tenemos todo para hacer la exposición de los datos vamos a crear el controlador de productos para el CRUD (create,read,update,delete), dentro de api/v1 creamos en plural el archivo productos.rb el siguiente archivo agregamos las líneas de código en la figura 1.23 en la línea 8 nos traeremos todos los registros de la base de datos como nodos si necesitamos traernos uno en específico en la línea 21 hacemos una búsqueda por id de la línea 26 a la 25 agregamos un nuevo elemento en esto pedimos los que son requeridos y en la línea 38 los enviamos a la base de datos y en la línea 44 retornamos el json que se agregó a la base
Fig. 1.23 Primera parte del archivo Del controlador de productos la segunda parte esta figura 1.27
Probando los servicios
Usando el Advance Rest client probamos el servicio accediendo a la dirección http://localhost:3000/api/v1/productos nos devuelve en nodos los registros de la base
Fig. 1.24 Resultado de GET Para la tabla Productos
Si requerimos traernos un registro en específico http://localhost:3000/api/v1/productos/5 le enviamos el id que necesitamos y nos devuelve el registro.
Fig. 1.25 Resultado de GET Para la tabla Productos por id
Si queremos insertar un nuevo registro INSERT le mandamos los datos por POST en formato json como a continuación en la fig. 1.26.
Fig. 1.26 Resultado de POST Para la tabla Productos
La segunda parte del código del controlador está en la figura siguiente el método para actualizar es el PUT en el cual le enviamos los datos en este caso le enviamos el id que se va actualizar la variable p_id recibe ese parámetro y lo busca en la base antes de actualizar para asegurar y retorna el id del producto actualizado.
Fig. 1.27 Segunda parte del código del controlador donde se expone la actualización y la eliminación de los datos.
En la siguiente figura se actualiza el el producto con id= 5
Fig. 1.28 Resultado de PUT Para la tabla Productos actualizando el Producto con id = 5
Por último el DELETE solo es necesario agregar el id en la ruta por ejemplo http://localhost:3000/api/v1/productos/5
Fig. 1.29 Resultado de DELETE para el producto con id= 55
La construcción de servicios con rails y grape es muy sencilla además rails cuenta con todas las sintaxis de SQL desde invocar un select hasta crear un JOIN dentro de las sintaxis.
Bibliografia.
http://guides.rubyonrails.org/
https://www.ruby-lang.org/es/
https://github.com/ruby-grape/grape
https://scotch.io/tutorials/build-a-restful-json-api-with-rails-5-part-one