Как настроить пути (routes) и обработчики запросов в Sinatra?

Пользователь

от marlen , в категории: Ruby , год назад

Как настроить пути (routes) и обработчики запросов в Sinatra?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от hermina.hauck , год назад

@marlen 

В Sinatra пути (routes) и обработчики запросов настраиваются с помощью методов класса Sinatra::Base.

  1. Определите класс, унаследованный от Sinatra::Base:
1
2
3
4
5
require 'sinatra/base'

class MyApp < Sinatra::Base
  # Методы-обработчики запросов и пути
end


  1. Определите обработчики запросов с помощью методов, соответствующих HTTP-методам:
1
2
3
4
5
6
7
get '/' do
  'Hello, world!'
end

post '/users' do
  # Обработчик POST-запроса на /users
end


  1. Доступ к параметрам маршрута и параметрам запроса осуществляется с помощью синтаксиса :имя_параметра:
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. Используйте шаблоны пути для настройки обработчиков запросов с помощью глубинных маршрутов:
1
2
3
4
get '/hello/*' do
  name = params[:splat].first
  # Обработчик GET-запроса на /hello/<name> и /hello/<name>/<anything>
end


  1. Запустите приложение с помощью метода run:
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.

Пользователь

от lori_jast , 7 месяцев назад

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