Маршруты и параметры
Обрабатывайте HTTP
«Маршруты и параметры» — бесплатный урок Ruby Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Обработка запросов HTTP
Веб-приложения отвечают на запросы, сопоставляя маршруты и считывая параметры.
- Сегменты пути могут быть динамическими
- Строки запроса передают дополнительные данные
- Тела форм содержат отправленные поля
Sinatra предоставляет доступ ко всему этому через хеш params.
require 'sinatra'
get '/echo' do
params['msg'].to_s
endИменованные параметры маршрута
Двоеточие в пути определяет именованный параметр, который захватывает сегмент пути.
/users/:idсоответствует/users/42- Захваченное значение появляется в
params['id']
require 'sinatra'
get '/users/:id' do
"User ID is #{params['id']}"
endНесколько параметров
Маршрут может содержать несколько именованных параметров.
- Каждый сегмент с двоеточием становится ключом в
params - Порядок в пути не влияет на доступ к параметрам
require 'sinatra'
get '/posts/:year/:month' do
"Posts from #{params['month']}/#{params['year']}"
endПараметры строки запроса
Значения строки запроса после ? также попадают в params.
/search?q=rubyдаётparams['q'] == 'ruby'- Несколько пар разделяются с помощью
&
require 'sinatra'
get '/search' do
"Searching for: #{params['q']}"
endРабота с параметрами как с хешем
Объект params ведёт себя как хеш Ruby. Практика с обычным хешем помогает понять эти шаблоны.
- Для безопасности используйте
fetchсо значением по умолчанию - По соглашению ключи являются строками
params = { 'name' => 'Ada', 'lang' => 'Ruby' }
puts params['name']
puts params.fetch('age', 'unknown')Данные формы с POST
В запросах post отправленные поля формы также появляются в params.
- Sinatra автоматически разбирает тело запроса
- Используется тот же способ доступа, что и для параметров строки запроса
require 'sinatra'
post '/signup' do
"Welcome, #{params['username']}"
endПараметры со звёздочкой
Параметр со звёздочкой (*) соответствует любому количеству символов и сохраняет их в массиве params['splat'].
/files/*захватывает оставшуюся часть пути- Несколько параметров со звёздочкой создают несколько элементов массива
require 'sinatra'
get '/files/*' do
"Path: #{params['splat'].first}"
endНеобязательные маршруты и маршруты с регулярными выражениями
Для точного сопоставления в маршрутах можно использовать регулярные выражения.
- Захваченные значения доступны в
params['captures'] - Это удобно для ограничений, например для идентификаторов, состоящих только из цифр
require 'sinatra'
get %r{/item/(\d+)} do
"Item #{params['captures'].first}"
endПроверка параметров
Всегда проверяйте и преобразуйте входящие параметры, поскольку они поступают в виде строк.
- Для чисел используйте
to_iилиInteger() - Отклоняйте отсутствующие обязательные значения с понятной ошибкой
def parse_id(raw)
id = Integer(raw)
raise 'must be positive' if id <= 0
id
end
puts parse_id('42')Значения по умолчанию
Задавайте разумные значения по умолчанию для необязательных параметров, чтобы избежать ошибок из-за отсутствующих значений.
params.fetch('page', '1')- Для безопасной разбивки на страницы сочетайте это с преобразованием типа
params = { 'page' => nil }
page = (params['page'] || '1').to_i
puts "Page: #{page}"Перенаправление
Используйте redirect, чтобы отправить клиента на другой URL.
- По умолчанию выдаётся статус 302
- Часто применяется после успешной отправки формы
require 'sinatra'
post '/login' do
redirect '/dashboard'
endБыстрая проверка
Проверьте, что Вы знаете о маршрутах и параметрах.
Итоги
Вы узнали, как Sinatra обрабатывает входные данные:
- Именованные параметры задаются с помощью
:nameв пути - Строки запросов и поля форм также заполняют
params - Параметры со звёздочкой и маршруты с регулярными выражениями захватывают пути гибкой структуры
- Всегда проверяйте и преобразуйте строковые параметры
- Используйте
redirect, чтобы перенаправлять клиентов между URL
Далее Вы будете возвращать структурированные ответы JSON.
Часто задаваемые вопросы
Урок «Маршруты и параметры» бесплатный?
Да — полный текст урока «Маршруты и параметры» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Маршруты и параметры»?
Обрабатывайте HTTP Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Маршруты и параметры»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы Sinatra
- Маршруты и параметры
- API JSON
- Промежуточное ПО и Rack