@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 предоставляет богатый функционал для настройки роутинга и обработки запросов, что позволяет создавать гибкие и мощные веб-приложения.