Sinatra — це веб-фреймворк, який використовується для створення веб-застосунків за допомогою мови програмування Ruby. Це легкий фреймворк, який надає простий, але потужний інтерфейс для створення веб-застосунків.
Sinatra часто називають “мікро”-фреймворком, оскільки він забезпечує лише базові функції, необхідні для створення веб-застосунку. Завдяки мінімалістичному дизайну Sinatra розробники отримують повний контроль над архітектурою та дизайном свого застосунку, не відволікаючись на зайві функції. У цьому посібнику ми розглянемо основи Ruby Sinatra та навчимося створювати простий веб-застосунок із динамічними маршрутами.
Установка
Відкрийте ваш редактор коду та створіть новий репозиторій. Встановіть гем Sinatra, відкривши термінал і ввівши команду:
gem install sinatra
Створіть файл server.rb
і додайте на початку такий код:
require 'sinatra'
Визначте початковий маршрут для домашньої сторінки:
get '/' do
"Hello, world!"
end
Це все, щоб почати. Sinatra дозволяє розпочати роботу з мінімумом коду. У терміналі виконайте: ruby server.rb
.
Ви маєте побачити в терміналі щось на зразок цього:
== Sinatra (v2.2.3) has taken the stage on 4567 for development with backup from Thin
2023-04-24 12:47:39 -0400 Thin web server (v1.8.2 codename Ruby Razor)
2023-04-24 12:47:39 -0400 Maximum connections set to 1024
2023-04-24 12:47:39 -0400 Listening on localhost:4567, CTRL+C to stop
::1 - - [24/Apr/2023:12:47:56 -0400] "GET / HTTP/1.1" 200 13 0.0043
::1 - - [24/Apr/2023:12:47:56 -0400] "GET /favicon.ico HTTP/1.1" 404 469 0.0008
Я вже маю встановлений гем Thin для запуску сервера. Однак Sinatra рекомендує використовувати гем Puma на початковому етапі. Якщо виникнуть проблеми, виконайте команду gem install puma
, а потім перезапустіть сервер командою ruby server.rb
. Тепер перейдіть до localhost:4567
у вашому браузері, і ви побачите відповідь “Hello, World!” від сервера.
Маршрутизація
Маршрути визначають, що Sinatra робить, коли користувач переходить за певною URL-адресою. У Sinatra маршрут — це HTTP-метод, наприклад, GET, POST, PUT, PATCH, DELETE, OPTIONS, LINK, UNLINK, у поєднанні з URL-шляхом. Кожен маршрут пов’язаний із блоком коду, який виконується, коли сервер отримує запит на вказаний шлях.
get '/' do
"Hello, world!"
end
post '/' do
.. створити щось ..
end
delete '/' do
.. видалити щось ..
end
Розглянемо наш початковий маршрут.
get '/' do
"Hello, world!"
end
Цей код визначає маршрут для кореневого URL (тобто домашньої сторінки). Коли користувач переходить на кореневий URL, код виконає блок коду всередині do … end
і поверне рядок “Hello, world!”
Динамічні маршрути
Окрім статичних маршрутів, ви також можете створювати динамічні маршрути, які приймають параметри з URL. Ось приклад:
get '/greeting/:name' do
"Hello, #{params[:name]}!"
end
У цьому прикладі маршрут приймає параметр із назвою :name.
Коли користувач переходить за URL, що відповідає цьому маршруту http://localhost:4567/greeting/ry
, код виконає блок коду всередині do … end
і поверне рядок “Hello, ry!”. Якщо шлях містить ":"
, наприклад, :name
, Sinatra додає цей параметр до хеша params
. У нашому коді доступ до параметра можна отримати за ключем, використовуючи рядок або символ: params['name']
або params[:name]
.
Під час роботи з викликами до бази даних ми можемо використовувати динамічні маршрути та хеш params
у Sinatra. Наприклад, якщо ми хочемо оновити пост у вигаданій соціальній мережі.
Знаючи, які дані будуть у тілі запиту клієнта, ми можемо отримати доступ до цих даних за допомогою хеша params
.
patch '/post/:id' do
social_media_post = DB.find(params[:id])
social_media_post.update(
body = params[:body]
)
social_media_post.to_json
end
Параметри запиту (Query Parameters)
Ви також можете отримати доступ до параметрів запиту, переданих в URL, використовуючи хеш params
. Ось приклад:
get '/search' do
"You searched for #{params[:q]}"
end
У цьому прикладі маршрут приймає параметр запиту :q
, який може бути будь-яким рядком. Коли користувач переходить за URL, що відповідає цьому маршруту http://localhost:4567/search?q=ruby
, код виконає блок коду всередині do … end
і поверне рядок “You searched for ruby”.
Висновок
Сподіваюся, ця коротка стаття допоможе вам у навчанні та використанні Sinatra. Це дуже простий у використанні мінімалістичний фреймворк. Його можливості маршрутизації "з коробки" забезпечують зрозумілий код, який легко писати та читати. Незалежно від того, чи створюєте ви простий веб-застосунок, чи складний API, Sinatra — чудовий вибір для вашого наступного проєкту.
Перекладено з: Intro to Sinatra: the Ruby framework