Создание простейшего веб-приложения на Roda
Цель занятия: научиться создавать простые веб-приложения, принимающие ввод данных от пользователя.
При разработке приложения следуйте модели расположения файлов для маленьких приложений, описанной в официальной документации.
Обработка различных запросов
В рамках данной задачи вам необходимо научиться обрабатывать различные HTTP-пути с помощью RODA
- Реализуйте обработчик для пути
/hello
. Он должен возвращать строкуЗдравствуйте!
. - Реализуйте обработчик для пути
/get/rng
. Он должен возвращать строкуСлучайное значение: 535
, где число — случайное значение в диапазоне от 100 до 5000. - Реализуйте обработчик для пути
/cool/hello/NAME/SURNAME
. Он должен возвращать строкуЗдравствуйте, NAME SURNAME!
. - Реализуйте обработчик для пути
/calc/min/NUM_ONE/NUM_TWO
. Он должен возвращать минимальное значение из двух целых чисел, переданных в качестве значенийNUM_ONE
иNUM_TWO
. Пример запроса:/calc/min/500/-100/
- Реализуйте обработчик для пути
/calc/multiply/NUM_ONE/NUM_TWO
. Он должен возвращать результат перемножения двух чисел, переданных в качестве значений путиNUM_ONE
иNUM_TWO
. Пример запроса:/calc/multiply/6.5/5.5
. Приложение должно корректно обрабатывать ситуации, когда в качестве вещественных чисел были переданы строки. - Реализуйте обработчик для пути
/get/sophisticated/rng
. Он принимает пару аргументов:min
иmax
. Аргументы контролируют минимальные и максимальные значения для генератора случайных чисел. Маршрут должен корректно обрабатывать ситуации, когда- не были переданы данные аргументы, надо сообщать об этом пользователю;
- в качестве значений были переданы не целые числа, надо сообщать об этом пользователю.
Примеры запросов:
/get/sophisticated/rng?min=100&max=5000
,/get/sophisticated/rng?min=100
,/get/sophisticated/rng?min=sto&max=5000
-
Реализуйте обработчик для пути
/worker/ID
. По запросу должен возвращаться JSON-документ, содержащий информацию о сотруднике. Приложение должно корректно обрабатывать ситуации:- В качестве ID было передано не целое число. В результате должен быть возвращён следующий документ
{ "status": "error", "message": "Идентификатор сотрудника — целое число." }
- По указанному ID не было найдено информации о сотруднике. В результате такого запроса должен быть возвращён следующий документ:
{ "status": "error", "message": "Сотрудник ID не найден в базе." }
- По указанному ID был найден сотрудник. Ответ сервера:
{ "status": "success", "data": { "name": "Иван", } }
В качестве источника данных используйте YAML-документ из прошлого занятия.
--- people: - name: Иван patronymic: Иванович surname: Семёнов email: ivan.semenov@example.com avatar: https://www.gravatar.com/avatar/c941144838e03143e77a9fd40cb36dfa?d=retro&s=400 - name: Сергей patronymic: Александрович surname: Краснов email: sergey.krasnov@example.com avatar: https://www.gravatar.com/avatar/d15aaf8ed63262edbc364c9395d54da4?d=retro&s=400 - name: Наталья patronymic: Владимировна surname: Лихачёва email: natalia.lihacheva@example.com avatar: https://www.gravatar.com/avatar/4a236e4c48d7a8acb16e7221fdad03e3?d=retro&s=400 - name: Пётр patronymic: Алексеевич surname: Соловьёв email: petr.soloviev@example.com avatar: https://www.gravatar.com/avatar/267d7ae01920c7ed15b40fdac2c5eed8?d=retro&s=400
Рекомендации по реализации
- Добавьте в Gemfile библиотеки
roda
иrerun
. -
Сформируйте пустое приложение на Roda:
require 'roda' class Application < Roda route do |r| r.root do 'It is working!' end end end
-
Подключите приложение в файле
config.ru
:require_relative 'application' run Application.freeze.app
- Запустите приложение с помощью
rerun
:bundle exec rerun rackup
- Используйте обработчик
r.on
, чтобы сформировать обработчики для дерева запросов. Используйте обработчикr.get
для обработки GET-запросов по данному пути