# Лабораторная работа 3 - REST API, Gateway и синхронный обмен между микросервисами ### ПИбд-42 || Бондаренко Максим > Цель: Изучение шаблона проектирования gateway, построения синхронного обмена между микросервисами и архитектурного стиля RESTful API. > Задачи: 1. Создать 2 микросервиса, реализующих CRUD на связанных сущностях. 2. Реализовать механизм синхронного обмена сообщениями между микросервисами. 3. Реализовать шлюз на основе прозрачного прокси-сервера nginx. > Описание В данной лабораторной работе мы разворачиваем два микросервиса: 1. Authors - микросервис для управления авторами. 2. Books - микросервис для управления книгами. > Файлы-конфигурации 1. docker-compose.yml ``` version: '3.7' services: authors: build: context: ./authors ports: - "3000:3000" networks: - app-network books: build: context: ./books ports: - "3001:3001" networks: - app-network depends_on: - authors nginx: image: nginx:latest ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf depends_on: - authors - books networks: - app-network networks: app-network: driver: bridge ``` authors: Микросервис, отвечающий за управление данными об авторах, доступный на порту 3000. books: Микросервис, отвечающий за управление данными о книгах, доступный на порту 3001. Зависит от микросервиса authors. nginx: Сервис, работающий как обратный прокси-сервер, маршрутизирующий запросы к другим сервисам authors и books, слушая на порту 80. 2. nginx.conf ``` events { worker_connections 1024; } http { upstream authors_service { server authors:3000; } upstream books_service { server books:3001; } server { listen 80; location /authors { proxy_pass http://authors_service; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; } location /books { proxy_pass http://books_service; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; } } } ``` location /authors: Все запросы, начинающиеся с /authors, будут проксироваться к микросервису authors, который работает на порту 3000. location /books: Все запросы, начинающиеся с /books, будут проксироваться к микросервису books, который работает на порту 3001. ### Шаги для запуска: Переходим в корневую папку всего решения и пишем команду: ``` docker-compose up --build ``` > Видео демонстрация работы https://cloud.mail.ru/public/hLWs/iuqweU92e