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.
1
get '/' do
2
.. show something ..
3
end
4
5
post '/' do
6
.. create something ..
7
end
8
9
put '/' do
10
.. replace something ..
11
end
12
13
patch '/' do
14
.. modify something ..
15
end
16
17
delete '/' do
18
.. annihilate something ..
19
end
Copied!
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:
1
get '/foo' do
2
# No coincide con "GET /foo/"
3
end
Copied!

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:
1
get '/' do
2
[200, { "Content-Type" => "text/html" }, "Hola Mundo"]
3
end
Copied!
Es equivalente a:
1
get '/' do
2
status 200
3
headers "Content-Type" => "text/html"
4
body "Hola Mundo"
5
end
Copied!

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]:
1
get '/greet' do
2
"Hola #{params[:name]}"
3
end
Copied!
Los valores siempre se retornan como cadenas de texto. Si esperas un número debes convertirlo manualmente. Por ejemplo:
1
get '/age-in-5-years' do
2
age = params[:age].to_i
3
"Tu edad en 5 años será: #{age + 5}"
4
end
Copied!

Variables de path

Puedes utilizar variables en las rutas que puedes obtener a través del hash params:
1
get '/hello/:name' do
2
# coincide con "GET /hello/juan" and "GET /hello/pedro"
3
# params['name'] is 'juan' or 'pedro'
4
"Hello #{params['name']}!"
5
end
Copied!

El objeto request

En tu código puedes utilizar el objeto request para acceder a toda la información de la petición HTTP:
1
request.url # retorna el URL completo
2
3
request.request_method # GET, POST, PUT, etc.
4
request.path # el path del URL
5
request.host # el host del URL
6
request.port # el port
7
request.scheme # http o https
8
request.query_string # todo lo que va después de ? en la URL
9
10
request.body # el cuerpo del mensaje (si tiene)
11
request.ip # la IP desde donde se hizo la petición
12
13
request.accept # el valor del encabezado Accept
14
request.user_agent # el valor del encabezado User-Agent
15
request.referrer # el valor del encabezado Referrer
16
request.content_type # el valor del encabezado Conten-Type
Copied!
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:
1
env['HTTP_X_HEADER'] # Retorna el valor del encabezado X_Header
Copied!
Last modified 3yr ago