Guías de Make it Real
  • Introduction
  • Preparación
    • Conceptos básicos
    • El editor de texto
    • La línea de comandos
    • Git y Github
  • Git
    • Instalación y configuración
    • Conceptos y comandos esenciales
    • Ignorando archivos y carpetas
    • Trabajando con ramas
    • Repositorios remotos
    • Etiquetas
    • Reescribiendo la historia
    • Stashing
    • Github
  • HTML y CSS
    • Introducción a HTML
    • Introducción a CSS
    • Más elementos de HTML
    • Tablas
    • Formularios
    • El modelo de caja en CSS
    • Fondos (backgrounds)
    • Posicionamiento
    • Selectores CSS
    • Bordes, sombras y gradientes
    • Media Queries
    • Unidades en CSS
    • Flexbox
  • Bootstrap 3
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Personalizando Bootstrap
    • Utilizando plantillas
  • Bootstrap 4
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Clases utilitarias
    • Personalizando Bootstrap
  • Ruby
    • Primeros pasos
    • Tipos y operadores
    • Variables y entrada de usuario
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Hashes
    • Métodos
    • Manipulación de archivos
    • Gemas
  • Programación Orientada a Objetos en Ruby
    • Clases y objetos
    • Métodos y atributos de clase
    • Herencia
    • Módulos
    • Excepciones
  • JavaScript I
    • Primeros pasos
    • Tipos y operadores
    • Variables
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Funciones
    • Objetos literales
    • Manipulación de archivos
  • JavaScript en el navegador
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Local Storage
    • History API
    • Canvas
    • Notificaciones Web
    • Audio y Video
    • Arrastrar y soltar
    • JSON
    • Realizando peticiones HTTP
  • jQuery
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Plugins
    • Realizando peticiones con AJAX
  • JavaScript II
    • Prototipos
    • Librerías (Node.js)
    • ES6
    • Uso de this (call, apply, bind)
    • Programación funcional
    • Scope, hoisting, closures
    • Programación asincrónica
    • Testing
  • HTTP y Sinatra
    • Primeros pasos con Sinatra
    • El protocolo HTTP
    • Rutas
    • Formularios
    • Cookies y sesión
  • Bases de datos
    • Bases de datos relacionales
    • SQL
    • DDL
    • MongoDB
  • Ruby on Rails I
    • Primeros pasos
    • Arquitectura
    • Rutas
    • Layouts y rendering
    • ActiveRecord - Modelos
    • ActiveRecord - Migraciones
    • ActiveRecord - Validaciones
    • ActiveRecord - Asociaciones
    • ActiveRecord - Scopes
    • ActiveRecord - Callbacks
    • Recursos REST
    • Formularios
    • Autenticación con Devise
    • Sass y Bootstrap
    • Envío de correos
    • Carga de imágenes
    • Seeds
    • Heroku
  • Ruby on Rails II
    • Usando JavaScript (y jQuery) en Rails
    • Testing en Ruby
    • Testing en Rails
    • Creando una Web API
    • Web Sockets
  • Express.js
    • Primeros Pasos
    • El protocolo HTTP
    • Rutas
    • Vistas
    • Middlewares y manejo de errores
    • Formularios
    • Cookies y sesión
  • Express.js II
    • Mongoose
    • Web Sockets
    • Autenticación
    • Envío de correos
    • Cargar imágenes
    • Deployment
    • Testing
    • Creando una Web API
  • React
    • Primeros pasos
    • JSX
    • Componentes
    • Más sobre estado
    • Formularios
    • Peticiones HTTP con Axios
    • React Hooks
    • React Context
    • React Bootstrap
    • React Router
    • Carga de Imágenes
    • Testing
    • Estructura de carpetas
    • Componentes de clase
  • Redux
    • Primeros pasos
    • Action creators
    • Usando la librería react-redux
    • Middlewares
    • Operaciones asincrónicas con redux-thunk
    • Combinando funciones reductoras
    • Testing
    • Redux Tool Kit
  • Algoritmos
    • Describiendo un algoritmo
    • Complejidad (Big-O)
    • Estructuras de datos
    • Recursión
    • Ordenamiento
    • Búsqueda
    • Programación dinámica
  • Python
    • Primeros Pasos
    • Tipos y Variables
    • Funciones
    • Control de Flujo
    • Listas
    • Ciclos
    • Diccionarios, Tuplas y Sets
  • NumPy
    • Primeros Pasos
    • Arreglos
    • Arreglos Multidimensionales
    • Estadística con NumPy
    • Distribución Estadística
  • Pandas
    • Primeros Pasos
    • Inspección y Selección de Datos
    • Modificando Dataframes
    • La Función Lambda
    • Aggregates en Pandas
    • Múltiples Tablas
Powered by GitBook
On this page
  • Escribiendo el cuerpo, código de respuesta y los encabezados
  • Query string
  • Variables de path
  • El objeto request
  1. HTTP y Sinatra

Rutas

En Sinatra las rutas se definen utilizando el verbo (en minúscula) seguido del path y recibe un bloque de Ruby con el código que se quiere ejecutar cuando una petición coincide con el verbo y el path.

get '/' do
  .. show something ..
end

post '/' do
  .. create something ..
end

put '/' do
  .. replace something ..
end

patch '/' do
  .. modify something ..
end

delete '/' do
  .. annihilate something ..
end

Desafortunadamente, desde los navegadores solo podemos realizar peticiones de tipo GET y POST (formularios).

Para realizar peticiones con PUT, PATCH, DELETE, etc. podemos utilizar curl, Postman o algún lenguaje de programación (como Ruby!).

La primera ruta que coincide con la petición es la que se ejecuta.

Las rutas que tienen un slash al final son diferentes de las que no lo tienen:

get '/foo' do
  # No coincide con "GET /foo/"
end

Escribiendo el cuerpo, código de respuesta y los encabezados

Lo que retornes en cada ruta se va a convertir en el mensaje HTTP de respuesta. Puedes devolver:

  • Un string que se va a convertir en el cuerpo de la respuesta.

  • Un número con el código de respuesta (200, 404, etc.)

  • Un arreglo con dos elementos: el código de respuesta y el cuerpo de la respuesta.

  • Un arreglo con tres elementos: el código de respuesta, un hash con los encabezados y el cuerpo de la respuesta.

Si retornas sólo un string el código de respuesta es 200 OK.

También existen los métodos body, status y headers que te permiten escribir el cuerpo, código de respuesta y los encabezados respectivamente, pero lo que se recomienda es definir esta información en lo que retorne el bloque.

El siguiente ejemplo:

get '/' do
  [200, { "Content-Type" => "text/html" }, "Hola Mundo"]
end

Es equivalente a:

get '/' do
  status 200
  headers "Content-Type" => "text/html"
  body "Hola Mundo"
end

Query string

El query string es el conjunto de propiedades que van después del signo de interrogación (?) de un URL. Sinatra automáticamente convierte las propiedades en el hash params.

Por ejemplo, si quieres obtener el valor de una propiedad llamada name utilizarías params[:name]:

get '/greet' do
  "Hola #{params[:name]}"
end

Los valores siempre se retornan como cadenas de texto. Si esperas un número debes convertirlo manualmente. Por ejemplo:

get '/age-in-5-years' do
  age = params[:age].to_i
  "Tu edad en 5 años será: #{age + 5}"
end

Variables de path

Puedes utilizar variables en las rutas que puedes obtener a través del hash params:

get '/hello/:name' do
  # coincide con "GET /hello/juan" and "GET /hello/pedro"
  # params['name'] is 'juan' or 'pedro'
  "Hello #{params['name']}!"
end

El objeto request

En tu código puedes utilizar el objeto request para acceder a toda la información de la petición HTTP:

request.url  # retorna el URL completo

request.request_method  # GET, POST, PUT, etc.  
request.path  # el path del URL
request.host  # el host del URL
request.port  # el port
request.scheme  # http o https
request.query_string  # todo lo que va después de ? en la URL

request.body  # el cuerpo del mensaje (si tiene)
request.ip  # la IP desde donde se hizo la petición

request.accept  # el valor del encabezado Accept
request.user_agent  # el valor del encabezado User-Agent
request.referrer  # el valor del encabezado Referrer
request.content_type # el valor del encabezado Conten-Type

Nota: Si deseas obtener el valor de otro encabezado tienes que utilizar el objeto env, pasar el encabezado a mayúscula y agregarle el prefijo HTTP_. Por ejemplo:

env['HTTP_X_HEADER']  # Retorna el valor del encabezado X_Header
PreviousEl protocolo HTTPNextFormularios

Last updated 2 years ago