Javi Moreno Apuntes Fichas de Lectura Archivo Sobre mi
Blog Logo

Javi


6 minutos de lectura

Seguro que en algún momento nos hemos planteado la necesidad de disponer de un servicio web propio para alimentar alguna de nuestras aplicaciones (actualización de datos, gestión de InApp Purchases, notificaciones, etc). Actualmente hay muchos servicios on-line que nos permiten gestionar estas necesidades con facilidad (Amazon Web Services, iCloud, Azure, Parse, MaaSive). Es conveniente, al menos, echar un vistazo a cada uno de ellos para saber que utilidad podemos sacar de ellos pero creo que también es conveniente hacer un acto de valentía y plantearnos el hacer nuestro propio servicio web.<!--more--> El objetivo que nos hemos marcado para esta sesión de 45 minutos es grande: no nos basta con un servicio que alimente nuestra aplicación, queremos una web que de soporte a esos datos y entre el maremagnun de opciones que hay disponibles para hacer esto nos hemos decantado por Ruby on Rails.

¿Que es Ruby un Rails?

Ruby on Rails es la forma de designar a un framework llamado Rails que dota al lenguaje de programación Ruby de toda la funcionalidad para hacer aplicaciones web. En realidad es como si los que hacemos aplicaciones para iOS dijeramos que las hacemos en Objective-C on Cocoa Touch... no suena tan guay.

Ruby y rails arrastran esa maldición de ser “cools” lo que provoca también rechazo/celos entre los fanaticos de otras plataformas. Ruby tiene fama de ser un lenguaje bonito, con el que da gusto programar. Algún “fanático” decidió que, ya que el nombre del lenguaje era una gema, porque no llamar a las diferentes librerias gemas también... y por esa razón mientras que los abigarrados programadores de php utilizan librerias los finos y elegantes programadores de ruby utilizan gemas. Rails es una gema, quizá la más famosa, que se apoya en otras gemas muy famosas y envidiadas para hacer aplicaciones web de una forma muy sencilla.

Ruby on Rails respeta al 100 % el patrón de arquitectura Modelo-Vista-Controlador, seguramente sea uno de los frameworks para el desarrollo de aplicaciones web más puristas en este sentido.

También es muy escrupuloso con el cumplimiento del principio Don´t Repeat Yourself. Esto es muy agradable sobre todo a la hora de hacer cambios en el modelo... algo que hacemos continuamente mientras desarrollamos y que se puede convertir en un dolor de cabeza al pasar a producción. Gracias a esto, las migraciones en ruby son muy sencillas... mucho más que con Core Data.

El paradigma llamado Convention over configuration también está en las raices de este framework y de la comunidad ruby en general. Ya veremos en nuestro ejemplo como es muy sencillo navegar por el código de nuestra aplicación ya que si la clase que conecta una entidad del modelo con la base de datos se llama List, la tabla se llamará lists, el controlador se llamará lists_controller, etc...

¿Y si no se Ruby?

Dale una oportunidad... seguro que tampoco sabías Objective-C y estás aquí. Como vamos a ver a continuación, hacer algo básico es muy muy sencillo. Ya habrá tiempo de ir profundizando en el lenguaje más adelante.

Desde luego, lo que vamos a hacer nosotros se puede hacer con otros frameworks y otros lenguajes de programación... busca el que sea más agradable para ti.

¿Que necesitamos para hacer nuestra aplicación?

Nuestro mac, que ya vendrá con ruby instalado. Lo mejor sería actualizar a la última versión ya que como es la primera aplicación que vamos a hacer no tenemos problemas de versiones. En este enlace nos cuentan una forma de actualizar ruby, instalar rails y hacer una aplicación sencilla en Lion. Son los pasos que he seguido yo para hacer la instalación de rails en mi mac y el el ejemplo que vamos a ver es tan sencillo como el que viene en esa página.

¿Que es lo que vamos a hacer?

Una aplicación web que llamaremos MegaLists y que tendrá vistas para dar de alta elementos en una lista (algo de lo más original). Al introducir por terminal:

$ rails new MegaLists

rails nos crea todo proyecto de la aplicación, ahora necesitamos las vistas y la tabla donde almacenaremos nuestra lista. Si hemos decidido llamar a la tabla List  y solo necesitamos un campo para el nombre de la nota y otro para el detalle, las palabras mágicas son estas:

$ rails generate scaffold List name:string description:string
$ rake db:migrate

Al pedirle a rails que nos genere un andamio (scaffold) este nos crea todo lo que necesitamos para disfrutar de nuestra nueva web y de los servicios que nuestra app va a consumir. La segunda instrucción se encarga de realizar una migración en la base de datos para incluir los cambios que hemos solicitado, en este caso, crear una nueva tabla con dos campos.

Podemos tener un fichero con datos de prueba para cargar nuestra base de datos con una única instrucción en caso de que queramos volver a generarlos.  La primera instrucción nos abriría el fichero en nuestro editor de texto, la segunda instrucción es la que cargaría la base de datos.

$ edit db/seeds.rb

$ rake db:seed

Aunque parezca mentira, con lo poco que hemos hecho hasta ahora ya tenemos una web creada con toda la funcionalidad necesaria para alimentar la entidad lists. Lo único que nos falta para verla en funcionamiento es arrancar el servidor.

$ rails server

El servidor... ¿cuando lo has instalado? ¿como sabe donde está alojado el proyecto? magia... las gemas tienen poderes y se encargan de estas cosas. Igual que no tenemos que preocuparnos por la base de datos, ya que rails gestiona las conexiones por nosotros, también incluye un pequeño servidor que nos permitirá hacer nuestras pruebas. Cuando se despliegue la aplicación en producción si que será necesario configurar un servidor Apache, instalar y configurar una base de datos, etc pero para desarrollo no necesitamos nada más.

Si habéis seguido los mismos pasos que yo,  este enlace os abrirá una pagina web con la lista de los elementos que contiene la tabla. Podemos editarlos, borrarlos, añadir alguno más...

Quizá, los más llamativo es lo que vemos si abrimos este otro enlace. ¡Tremendo! el mísmo contenido del enlace anterior pero en formato json.

API REST

La wikipedia lo explica muy bien. Se basa en el excelente diseño del protocolo http que permite contener en la llamada toda la información necesaria para comprender la petición. Cada recurso es definido univocamente por su URI y a través de las operaciones http GET, POST, PUT y DELETE podemos crear (Create), leer (Read), actualizar (Update) y borrar (Delete). Todo esto nos lo incluye rails al hacer el scaffold.... gratis.

En el post que sigue a este veremos como hacer la aplicación iOS que accede a esta API para leer y modificar registros.