# Лабораторная работа №1 ## Как запустить лабораторную работу 1. Переносим в Visual Studia Code нашу папку с docker-compose.yml и остальными файлами. 2. Открываем сочитанием Ctrl + Shift + ` терминал. 3. Вводим туда команду docker-compose up --build (Нужно подождать пока все пакеты загрузятся). При вводе команды нужно убедится что Docker Desktop запущен. 4. Далее в Docker Desktop мы можем запустить через порт наш сервис, например запустим порт 5001 и вывод будет вот таким: ```json { "category": "processor", "name": "Intel Core i5", "price": 25000, "uuid": "comp-1" }, { "category": "graphics_card", "name": "NVIDIA RTX 4070", "price": 60000, "uuid": "comp-2" } ``` 5. Как тестировать и пользоваться данной программой будет в пенкту Тесты. ## Какие технологии использовали 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/ ```json { "name": "PC1", "component_id": [ "comp-1" ] } ``` Результат: 200 OK * Неправильный запрос URL: http://localhost:5002/ ```json { "component_id": [ "comp-1" ] } ``` Результат: Ошибка 500 (INTERNAL SERVER ERROR) 2. Get * Правильный запрос URL: http://localhost:5002/ ```json { "components": [ "comp-1" ], "name": "PC1", "uuid": "e32976c4-9e9d-44c8-bcf1-81b3238d23f0" } ``` Результат: 200 OK 3. Get /{uuid} * Правильный запрос URL: http://localhost:5002/e32976c4-9e9d-44c8-bcf1-81b3238d23f0 ```json { "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 4. PUT /{uuid} * Правильный запрос URL: http://localhost:5002/e32976c4-9e9d-44c8-bcf1-81b3238d23f0 ```json { "components": [ "comp-2" ], "name": "PC3" } ``` Результат: 200 OK * Неправильный запрос URL: http://localhost:5002/e32 Результат: Ошибка 404 NOT FOUND 5. DELETE /{uuid} * Правильный запрос URL: http://localhost:5002/e32976c4-9e9d-44c8-bcf1-81b3238d23f0 Результат: 200 OK * Неправильный запрос URL: http://localhost:5002/e32 Результат: Ошибка 404 NOT FOUND ## Видеоотчет https://rutube.ru/video/private/6e4e75bb7d1ede9f1fa45627d33fa73c/?p=QtwDp85zXK3jVJ77Tl3azw