Files

Лабораторная работа №1

Как запустить лабораторную работу

  1. Переносим в Visual Studia Code нашу папку с docker-compose.yml и остальными файлами.
  2. Открываем сочитанием Ctrl + Shift + ` терминал.
  3. Вводим туда команду docker-compose up --build (Нужно подождать пока все пакеты загрузятся). При вводе команды нужно убедится что Docker Desktop запущен.
  4. Далее в Docker Desktop мы можем запустить через порт наш сервис, например запустим порт 5001 и вывод будет вот таким:
{
"category": "processor",
"name": "Intel Core i5",
"price": 25000,
"uuid": "comp-1"
},
{
"category": "graphics_card",
"name": "NVIDIA RTX 4070",
"price": 60000,
"uuid": "comp-2"
}
  1. Как тестировать и пользоваться данной программой будет в пункте Тесты.

Какие технологии использовали

  1. Docker - контейнеризация приложений
  2. Docker Compose - оркестрация многоконтейнерного приложения
  3. Nginx - API gateway и reverse proxy
  4. Flask - веб-фреймворк для создания REST API
  5. Python - основной язык программирования
  6. Requests - библиотека для HTTP-запросов
  7. Postman - тестирование запросов программного продукта

Что она делает

Это веб-приложение для сборки компьютеров, построенное на микросервисной архитектуре. Оно состоит из двух основных сервисов: один управляет комплектующими (процессоры, видеокарты, память), а другой отвечает за сборки ПК.

Пользователь может создавать сборки компьютеров, добавляя в них различные компоненты по их идентификаторам. Когда запрашивается информация о конкретной сборке, система автоматически обращается к сервису комплектующих и подгружает полные данные о всех компонентах - их названия, категории и цены.

Все запросы проходят через единый шлюз на Nginx, который перенаправляет их к нужному микросервису.

Тесты

Для тестирования программы использовался Postman

Нам нужно проверить 5 запросов у двух сервисов: component и build. Виды запросов:

  1. GET - получить список всех компонентов или сборок ПК
  2. GET /{uuid} - получить элемент списка компонентов или сборок ПК по его id (в случии вызова сборки ПК так же будет выводится подробная информация о комплектующем)
  3. POST - Создать элемент компонентов или сборок ПК
  4. PUT /{uuid} - обновить элемент списка компонентов или сборок ПК по его id
  5. DELETE /{uuid} - удалить элемент списка компонентов или сборок ПК по его id

Для начала тестирования нам нужно:

  1. Создать новую коллекцию(у нас их будет 2: build, component)
  2. Добавить туда 5 requast и каждому из них присвоить соответствующие запросы
  3. Далее в URL нужно добавить наш порт, и в зависимости он запроса, нужно добавить id в таком формате: http://localhost:5002/id
  4. Если нужно изменить или создать элемент то нажимаеем на пункт Body, далее нажимаем на raw и после добавляем или изменяем запись в json формате

Разберем на примере build все запросы:

  1. Post
  • Правильный запрос

    URL: http://localhost:5002/

    {
        "name": "PC1",
        "component_id": [
            "comp-1"
        ]
    }
    

    Результат: 200 OK

  • Неправильный запрос URL: http://localhost:5002/

    {
        "component_id": [
            "comp-1"
        ]
    }   
    

    Результат: Ошибка 500 (INTERNAL SERVER ERROR)

  1. Get
  • Правильный запрос

    URL: http://localhost:5002/

    {
        "components": [
            "comp-1"
        ],
        "name": "PC1",
        "uuid": "e32976c4-9e9d-44c8-bcf1-81b3238d23f0"
    }
    

    Результат: 200 OK

  1. Get /{uuid}
  • Правильный запрос

    URL: http://localhost:5002/e32976c4-9e9d-44c8-bcf1-81b3238d23f0

    {
        "components": [
            "comp-1"
        ],
        "components_details": [
            {
                "category": "processor",
                "name": "Intel Core i5",
                "price": 25000,
                "uuid": "comp-1"
            }
        ],
        "name": "PC1",
        "uuid": "e32976c4-9e9d-44c8-bcf1-81b3238d23f0"
    }
    

    Результат: 200 OK

  • Неправильный запрос

    URL: http://localhost:5002/e32

    Результат: Ошибка 404 NOT FOUND

  1. PUT /{uuid}
  1. DELETE /{uuid}

Видеоотчет

https://rutube.ru/video/private/6e4e75bb7d1ede9f1fa45627d33fa73c/?p=QtwDp85zXK3jVJ77Tl3azw