# Лабораторная работа №3 - REST API, шлюз и синхронный обмен данными между микросервисами

## Задание

### Цель
Изучение принципов проектирования с использованием паттерна шлюза, организации синхронной передачи данных между микросервисами и применения архитектурного стиля RESTful API.

### Задачи
1. Создание двух микросервисов, которые реализуют операции CRUD для связанных сущностей.
2. Реализация механизма синхронного обмена данными между микросервисами.
3. Настройка шлюза на базе Nginx в качестве прозрачного прокси-сервера.

### Микросервисы
1. **user_service** — сервис, который управляет информацией о пользователях.
2. **order_service** — сервис, который обрабатывает данные о заказах пользователей.

### Связь между микросервисами
- Один документ (user) может иметь множество связанных предметов (orders) (соотношение 1 ко многим).

### Структура проекта

```
lab_3/
|-- nginx/
|   |-- nginx.conf
|-- order_service/
|   |-- Dockerfile
|   |-- main.py
|   |-- requirements.txt
|-- user_service/
|   |-- Dockerfile
|   |-- main.py
|   |-- requirements.txt
|-- docker-compose.yml
```

## Описание работы:

Для разработки микросервисов был выбран язык программирования Python.

### Синхронный обмен данными
Сервис `user_service` отправляет HTTP-запросы к `order_service` при выполнении определенных операций CRUD. Это позволяет получать актуальную информацию о предметах, связанных с конкретными героями.

### Docker Compose
Конфигурационный файл `docker-compose.yml` представляет собой многоконтейнерное приложение, которое включает в себя три сервиса: `user_service`, `order_service` и `nginx`. Функция маршрутизации возложена на сервер Nginx, который обрабатывает запросы и перенаправляет их на соответствующие микросервисы.

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

### Видеозапись работы программы

https://vkvideo.ru/video174596752_456239396