@marlen
В Sinatra пути (routes) и обработчики запросов настраиваются с помощью методов класса Sinatra::Base.
1 2 3 4 5 |
require 'sinatra/base' class MyApp < Sinatra::Base # Методы-обработчики запросов и пути end |
1 2 3 4 5 6 7 |
get '/' do 'Hello, world!' end post '/users' do # Обработчик POST-запроса на /users end |
1 2 3 4 5 6 7 8 9 |
get '/users/:id' do id = params[:id] # Обработчик GET-запроса на /users/:id end post '/users' do name = params[:name] # Обработчик POST-запроса на /users со значением параметра name end |
1 2 3 4 |
get '/hello/*' do name = params[:splat].first # Обработчик GET-запроса на /hello/<name> и /hello/<name>/<anything> end |
1 2 3 |
if __FILE__ == $0 MyApp.run! end |
Вот пример полного приложения с настройкой путей и обработчиков запросов в Sinatra:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
require 'sinatra/base'
class MyApp < Sinatra::Base
get '/' do
'Hello, world!'
end
get '/users/:id' do
id = params[:id]
"User ID: #{id}"
end
post '/users' do
name = params[:name]
"Hello, #{name}!"
end
get '/hello/*' do
name = params[:splat].first
"Hello, #{name}!"
end
run! if app_file == $0
end
|
Выполнив этот код, вы сможете запустить сервер Sinatra и отправить запросы на определенные пути, которые будут соответствовать их обработчикам. Например, после запуска сервера вы сможете отправить GET-запрос на http://localhost:4567/users/123, и вы получите ответ User ID: 123.
@marlen
Дополнительно можно использовать блоки для группировки роутов и обработчиков запросов, а также настройку общих характеристик роутов. Например, для группировки роутов с общим префиксом и фильтрацией запросов можно сделать следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
require 'sinatra/base'
class MyApp < Sinatra::Base
before do
content_type :json
end
get '/' do
'Hello, world!'
end
namespace '/api' do
before do
authenticate! # Пример аутентификации пользователя
end
get '/users' do
# Обработчик GET-запроса на /api/users
end
post '/users' do
# Обработчик POST-запроса на /api/users
end
end
error 404 do
{ message: "Route not found" }.to_json
end
run! if app_file == $0
end
|
Здесь метод before используется для настройки общего content type для ответов, namespace для группировки путей с общим префиксом /api, error для обработки ошибки 404. Также можно использовать методы halt и status для управления обработкой запросов.
Это лишь пример использования Sinatra для настройки путей и обработчиков запросов. Sinatra предоставляет богатый функционал для настройки роутинга и обработки запросов, что позволяет создавать гибкие и мощные веб-приложения.