Revista Informática

Sinatra desde Cero: Enrutamiento

Publicado el 17 octubre 2013 por Codehero @codeheroblog

Para comprender correctamente todo lo que hablaremos en esta serie, es conveniente tener un conocimiento básico sobre el lenguaje de Ruby. Podrás conseguir toda la información desees aquí


Enrutamiento

La habilidad principal de Sinatra es poder manejar y responder a una o más rutas. ¿Qué son estas rutas? Las rutas son la manera fundamental de comunicación e interacción de una aplicación web. Para poder entender esto se requiere un conocimiento básico de el protocolo HTTP.

Nosotros te explicaremos de manera sencilla los verbos utilizados en este protocolo.

Get

Pide al servidor una representación del recurso específico. Por ejemplo cuando vamos a nuestro navegador de internet y escribimos codehero.com el navegador va a generar una petición “GET” con la cual el servidor de Codehero responde enviando el contenido (markup) de la página. Por seguridad no debería ser usado para la transmisión de información de carácter privado (claves, información personal) ya que será visible a través del URL.

Post

El POST es usado para enviar los datos de un recurso específico al servidor para que el mismo sea procesado. Los datos a diferencia del GET se incluirán en el cuerpo de la petición y no como parámetros del URL. El resultado de una petición de tipo POST puede generar la creación de un nuevo recurso o actualización de los recursos existentes o ambas cosas.

Put

Sube, carga o realiza una actualización en la representación de un recurso especificado (como un archivo) ya que este verbo es el camino más eficiente para subir archivos a un servidor, esto es porque en POST utiliza un mensaje multi-parte y el mensaje es descodificado por el servidor. En contraste, el método PUT te permite escribir un archivo en una conexión socket establecida con el servidor. La desventaja del método PUT es que los servidores de hosting compartido no lo tienen habilitado.

Delete

Se utiliza para borrar el recurso especificado.

Patch

PATCH es us ado para actualizar una porción de un recurso, a diferencia de PUT o POST se actualizan únicamente ciertos aspectos del mismo y nunca todo. Por ejemplo cuando tenemos un usuario en base de datos y solo queremos cambiar su primer nombre.

Cierta información fue citada de wikipedia y del libro Sinatra: Up and Running.

OPTIONS

Devuelve los métodos HTTP que el servidor soporta para un URL específico. Esto puede ser utilizado para comprobar la funcionalidad de un servidor web mediante petición en lugar de un recurso específico.

Si quieres agregar más verbos puedes instalar la gema de sinatra-contrib que extiende las funcionalidad de sinatra en varios aspectos.

¿Cómo se definen las rutas?

Si se recuerdan del capítulo anterior, en la última parte hicimos una pequeña aplicación que respondía a una petición de tipo GET y escribía “Hola, mundo!”. Ahora vamos a mostrar como responde Sinatra a los diferentes verbos HTTP.

require 'sinatra' get '/' do "Hola, mundo!" end post '/' do "Activado desde un POST" end put '/' do "Activado desde un PUT" end delete '/' do "Activado desde un DELETE" end patch '/' do "Activado desde un PATCH" end options '/' do "Activado desde un OPTIONS" end

12345678910111213141516171819202122232425 require'sinatra' get'/'do  "Hola, mundo!"end post'/'do  "Activado desde un POST"end put'/'do"Activado desde un PUT"end delete'/'do"Activado desde un DELETE"end patch'/'do"Activado desde un PATCH"end options'/'do"Activado desde un OPTIONS"end

Si probamos la petición GET y POST utilizando el comando curo podemos ver como responden.

$ curl -X POST localhost:4567 Activado desde un POST% $ curl -X GET localhost:4567 Hola, mundo!%

1234 $curl-XPOST localhost:4567Activado desde un POST%   $curl-XGET localhost:4567Hola,mundo!%

De la misma manera funcionan el resto de los recursos cuando le pasamos el tipo de verbo que queremos usar!

¿Qué pasa si existen varias rutas con funciones similares?

Debemos recordar que mientras menos código repetido tengamos en nuestra aplicación mejor es para todos. Por eso es que el concepto de DRY (no te repitas) aplica también para las rutas.

Si tenemos 3 rutas que hacen exactamente lo mismo o algo muy parecido podemos realizar lo siguiente:

En el archivo server.rb

require 'sinatra' ['/uno', '/dos'].each do |route| get route do "Hola desde #{route} via GET" end post route do "Triggered #{route} via POST" end end

1234567891011 require'sinatra' ['/uno','/dos']eachdo|route|  get route do  "Hola desde #{route} via GET"  end   post route do  "Triggered #{route} via POST"  endend

si probamos con cURL

% curl --request POST localhost:4567/uno Triggered /uno via POST% % curl --request POST localhost:4567/dos Triggered /dos via POST% % curl --request GET localhost:4567/uno Hola desde /uno via GET% % curl --request GET localhost:4567/dos Hola desde /dos via GET%

12345678 %curl--requestPOSTlocalhost:4567/unoTriggered/unoviaPOST%  %curl--requestPOSTlocalhost:4567/dosTriggered/dosviaPOST%  %curl--requestGETlocalhost:4567/unoHoladesde/unoviaGET%  %curl--requestGETlocalhost:4567/dosHola desde/dos via GET%

Por lo que podemos observar si dos URL son relativamente similares podemos realizar algo similar. Esto es muy útil para realizar los famosos CRUD ya que necesitamos varias peticiones similares, entre GET y POSTS.


Conclusión

En este segundo capítulo, aprendimos los conceptos básicos a cerca de Enrutamiento en Sinatra. Cuales son los verbos existentes, como se usan y que hacemos cuando queremos tener nuestra aplicación sin código repetido. Si te surge algún tipo de duda no te detengas y déjanos un comentario, que gustosamente lo responderemos.

¡Hasta el próximo capítulo!


Volver a la Portada de Logo Paperblog