Обработка HTTP-запросов с помощью http4k

Обработка HTTP-запросов с помощью http4k #

Основы обработки HTTP-запросов #

Презентацию можно посмотреть по ссылке.

Видео-запись на Rutube

Маршрутизация HTTP-запросов #

Презентацию можно посмотреть по ссылке.

Видео-запись на Rutube

Документация #

Задача № 1. Реализация команды сервера #

Добавьте в приложение по управлению списком треугольников команду по умолчанию, по вызову которой запускается HTTP-сервер. Т.е. если приложению не была передана команда, то должен быть запущен HTTP-сервер.

У данной команды должно быть 2 обязательных аргумента:

  • --triangles-file — путь к файлу с треугольниками.
  • --port — номер порта, по которому приложение должно принимать HTTP-запросы. Далее будем рассматривать, что

После обращения клиента к корневому маршруту приложение должно возвращать текст “Приложение для управления списком треугольников”.

Ниже представлен подход к решению задачи.

  1. Подключите к приложению необходимые библиотеки: ядро http4k-core и сервер Netty http4k-server-netty.
  2. Реализуйте логику по вызову подсистемы сервера в случае отсутствия команды.
  3. Создайте обработчик HTTP-запроса. Параметры запроса для него не важны. В качестве ответа данный обработчик должен возвращать ответ со статусом OK, с телом ответа “Приложение для управления списком треугольников”.
  4. В рамках логики по обработке команды сервера:
    1. Обработайте аргументы. Удостоверьтесь, что в качестве значения аргумента --port передано целое число. Возможные значения от 1024 до 2^16.
    2. Создайте экземпляр обработчика HTTP-запроса.
    3. Преобразуйте данный обработчик в HTTP-сервер с помощью Netty-сервера.
    4. Запустите данный сервер.
  5. Проверьте, что запущенное приложение доступно по ссылке http://localhost:9000 (или по другому порту, который был указан при старте сервера). По переходу на данной ссылке
  6. Остановите приложение с помощью среды разработки.
  7. Удостоверьтесь, что по ссылке 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.

Ниже представлен подход к решению задачи.

  1. Добавьте в приложение подсистему маршрутизации. Рекомендуется расположить её пакете, название которого заканчивается на web.routes. Например ru.yarsu.web.routes.
  2. В корне данного пакета создайте файл ApplicationRoutes.kt. В данном файле опишите маршрутизатор с помощью функции routes. Функцию, которая возвращает маршрутизатор можно назвать applicationRoutes. Она должна возвращать объект типа RoutingHttpHandler.
  3. Внутри данной функции свяжите путь / с HTTP-обработчиком, созданным в рамках предыдущего задания.
  4. Код HTTP-обработчика рекомендую разместить в пакете web.routes, в файле Index.kt. Словом Index обычно обозначают файл, который должен отобразиться при обращении к корневому маршруту.
  5. Измените логику команды сервера таким образом, чтобы вместо создания объекта HTTP-обработчика происходило создание маршрутизатора, т.е. вызов функции applicationRoutes.
  6. Запустите приложение и удостоверьтесь, что его поведение осталось прежним.
  7. Добавьте обработчик HTTP-запроса, который должен возвращать JSON-документ со списком треугольников.
    1. Создайте пакет web.routes.v1 (полное название ru.yarsu.web.routes.v1).
    2. Создайте файл ListTriangles.kt, в котором расположите HTTP-обработчик с соответствующим названием.
    3. Конструктору HTTP-обработчика передайте хранилище треугольников.
    4. В рамках обработки HTTP-запроса извлеките из хранилища список треугольников, преобразуйте его в строковый JSON-документ.
    5. Сформируйте HTTP-ответ со следующими параметрами:
      • Код ответа OK.
      • Должен быть установлен заголовок, указывающий, что возвращается JSON-документ.
      • В качестве тела ответа должен быть установлен созданный JSON-документ.
  8. Свяжите данный HTTP-обработчик с маршрутом.
    1. Внутри команды по запуску сервера создайте хранилище данных треугольника.
    2. Добавьте в функцию по созданию маршрутизатора аргумент — ссылку на хранилище треугольников.
    3. Передайте ссылку на хранилище в маршрутизатор.
    4. Внутри маршрутизатора свяжите маршрут /v1/list-triangles с HTTP-обработчиком.
  9. Перезапустите приложение и проверьте, что оно обрабатывает данный запрос и возвращает список треугольников. С помощью инструментов разработчика, встроенных в веб-браузер убедитесь, что
    1. Код ответа был OK.
    2. Заголовок content-type содержит корректрую запись.

Задача № 3. Отображение статистической информации. #

Добавьте в приложение обработку маршрута /v1/statistic-by-color. В качестве ответа на запрос приложение должно вернуть JSON-документ следующего содержимого:

{
  "statisticByColor": [
    {
      "color": "GREEN",
      "count": 1
    },
    {
      "color": "RED",
      "count": 2
    }
  ]
}

Необходимо вернуть количество треугольников по цвету заливки. Необходимо добавить только те цвета, которые используются для заливки известных приложению треугольников.

© A. M. Васильев, 2024, CC BY-SA 4.0, andrey@crafted.su