Обработка HTTP-запросов с помощью http4k #
Основы обработки HTTP-запросов #
Презентацию можно посмотреть по ссылке.
Видео-запись на Rutube
Маршрутизация HTTP-запросов #
Презентацию можно посмотреть по ссылке.
Видео-запись на Rutube
Документация #
- Официальный сайт http4k
- Инструменты разработчика
Задача № 1. Реализация команды сервера #
Добавьте в приложение по управлению списком треугольников команду по умолчанию, по вызову которой запускается HTTP-сервер. Т.е. если приложению не была передана команда, то должен быть запущен HTTP-сервер.
У данной команды должно быть 2 обязательных аргумента:
--triangles-file
— путь к файлу с треугольниками.--port
— номер порта, по которому приложение должно принимать HTTP-запросы. Далее будем рассматривать, что
После обращения клиента к корневому маршруту приложение должно возвращать текст “Приложение для управления списком треугольников”.
Ниже представлен подход к решению задачи.
- Подключите к приложению необходимые библиотеки: ядро
http4k-core
и сервер Nettyhttp4k-server-netty
. - Реализуйте логику по вызову подсистемы сервера в случае отсутствия команды.
- Создайте обработчик HTTP-запроса. Параметры запроса для него не важны. В
качестве ответа данный обработчик должен возвращать ответ со статусом
OK
, с телом ответа “Приложение для управления списком треугольников”. - В рамках логики по обработке команды сервера:
- Обработайте аргументы. Удостоверьтесь, что в качестве значения аргумента
--port
передано целое число. Возможные значения от 1024 до 2^16. - Создайте экземпляр обработчика HTTP-запроса.
- Преобразуйте данный обработчик в HTTP-сервер с помощью Netty-сервера.
- Запустите данный сервер.
- Обработайте аргументы. Удостоверьтесь, что в качестве значения аргумента
- Проверьте, что запущенное приложение доступно по ссылке http://localhost:9000 (или по другому порту, который был указан при старте сервера). По переходу на данной ссылке
- Остановите приложение с помощью среды разработки.
- Удостоверьтесь, что по ссылке HTTP-сервер не доступен.
Задача № 2. Отображение списка треугольников. #
Добавьте в приложение вывод списка треугольников, которые известны приложению,
по пути /v1/list-triangles
. В ответе на данный запрос приложение должно
вернуть JSON-документ следующего содержимого:
[
{
"Id": "782418f0-86d3-4de0-8450-05e2e1083766",
"RegistrationDateTime": "2024-08-01T00:00:00.0",
"Description": "обычный сине-красный треугольник"
}
]
Корнем документа является массив. Внутри массива находятся объекты, описывающие треугольник. У объектов должны быть определены следующие поля:
Id
— уникальный идентификатор треугольника.RegisttationDateTime
— дата добавления треугольника в систему.Description
— текстовое описание треугольника.
Список треугольников приложение должно считывать с жёсткого диска. Путь к
CSV-файлу с описанием треугольников передаётся с помощью аргумента
--triangles-file
.
Ниже представлен подход к решению задачи.
- Добавьте в приложение подсистему маршрутизации. Рекомендуется расположить её
пакете, название которого заканчивается на
web.routes
. Напримерru.yarsu.web.routes
. - В корне данного пакета создайте файл
ApplicationRoutes.kt
. В данном файле опишите маршрутизатор с помощью функцииroutes
. Функцию, которая возвращает маршрутизатор можно назватьapplicationRoutes
. Она должна возвращать объект типа RoutingHttpHandler. - Внутри данной функции свяжите путь
/
с HTTP-обработчиком, созданным в рамках предыдущего задания. - Код HTTP-обработчика рекомендую разместить в пакете
web.routes
, в файлеIndex.kt
. СловомIndex
обычно обозначают файл, который должен отобразиться при обращении к корневому маршруту. - Измените логику команды сервера таким образом, чтобы вместо создания объекта
HTTP-обработчика происходило создание маршрутизатора, т.е. вызов функции
applicationRoutes
. - Запустите приложение и удостоверьтесь, что его поведение осталось прежним.
- Добавьте обработчик HTTP-запроса, который должен возвращать JSON-документ со
списком треугольников.
- Создайте пакет
web.routes.v1
(полное названиеru.yarsu.web.routes.v1
). - Создайте файл
ListTriangles.kt
, в котором расположите HTTP-обработчик с соответствующим названием. - Конструктору HTTP-обработчика передайте хранилище треугольников.
- В рамках обработки HTTP-запроса извлеките из хранилища список треугольников, преобразуйте его в строковый JSON-документ.
- Сформируйте HTTP-ответ со следующими параметрами:
- Код ответа
OK
. - Должен быть установлен заголовок, указывающий, что возвращается JSON-документ.
- В качестве тела ответа должен быть установлен созданный JSON-документ.
- Код ответа
- Создайте пакет
- Свяжите данный HTTP-обработчик с маршрутом.
- Внутри команды по запуску сервера создайте хранилище данных треугольника.
- Добавьте в функцию по созданию маршрутизатора аргумент — ссылку на хранилище треугольников.
- Передайте ссылку на хранилище в маршрутизатор.
- Внутри маршрутизатора свяжите маршрут
/v1/list-triangles
с HTTP-обработчиком.
- Перезапустите приложение и проверьте, что оно обрабатывает данный
запрос и возвращает список треугольников. С помощью инструментов
разработчика, встроенных в веб-браузер убедитесь, что
- Код ответа был
OK
. - Заголовок
content-type
содержит корректрую запись.
- Код ответа был
Задача № 3. Отображение статистической информации. #
Добавьте в приложение обработку маршрута /v1/statistic-by-color
. В качестве
ответа на запрос приложение должно вернуть JSON-документ следующего содержимого:
{
"statisticByColor": [
{
"color": "GREEN",
"count": 1
},
{
"color": "RED",
"count": 2
}
]
}
Необходимо вернуть количество треугольников по цвету заливки. Необходимо добавить только те цвета, которые используются для заливки известных приложению треугольников.