# Лабораторная работа №3 - REST API, шлюз и синхронный обмен данными между микросервисами ## Задание ### Цель: Изучение принципов проектирования с использованием паттерна шлюза, организации синхронной передачи данных между микросервисами и применения архитектурного стиля RESTful API. ### Задачи: 1. Создание двух микросервисов, которые реализуют операции CRUD для связанных сущностей. 2. Реализация механизма синхронного обмена данными между микросервисами. 3. Настройка шлюза на базе Nginx в качестве прозрачного прокси-сервера. ### Микросервисы: 1. **books_service** — сервис, который управляет информацией о книгах. 2. **subscriptions_service** — сервис, который обрабатывает данные об абонементах. ### Связь между микросервисами: - Один абонемент может быть связан с несколькими книгами. Взаимодействие между сервисами осуществляется через синхронные HTTP-запросы. ## Как запустить проект: Для запуска приложения необходимо выполнить команду: ```bash docker-compose up --build ``` После этого проект будет доступен на следующих адресах: Books Service: http://localhost:5000/books/ Subscriptions Service: http://localhost:5001/subscriptions/ ## Описание работы: Для разработки микросервисов был выбран язык программирования Python, с использованием фреймворка Flask для реализации API. ## Синхронный обмен данными Сервис books_service обращается к subscriptions_service для получения информации о подписках, связанных с каждой книгой. Все запросы между сервисами выполняются синхронно с использованием HTTP-запросов, что позволяет обеспечить актуальность данных при выполнении операций CRUD. Docker Compose Конфигурационный файл docker-compose.yml представляет собой многоконтейнерное приложение, которое включает в себя три сервиса: books_service, subscriptions_service и nginx. С помощью Docker Compose можно удобно запустить все сервисы одновременно. ## Nginx Конфигурация Nginx настроена так, чтобы обрабатывать входящие HTTP-запросы и перенаправлять их на соответствующие сервисы. Это позволяет использовать один общий адрес для доступа к разным API-сервисам. Nginx будет действовать как шлюз, который будет маршрутизировать запросы от пользователей в соответствующие микросервисы. ### Видео https://disk.yandex.ru/i/b12BECyaGmbqUQ