- FastAPI — фреймворк для создания веб-API.
- PostgreSQL — реляционная база данных для хранения данных.
- gRPC — для межсервисного взаимодействия.
- RabbitMQ — брокер сообщений для передачи данных между сервисами.
- Alembic — инструмент для управления миграциями базы данных.
- JWT — для аутентификации и авторизации пользователей.
- Docker — для контейнеризации сервисов.
- Poetry — для управления зависимостями и виртуальными окружениями.
-
Клонировать репозиторий и перейти в него в командной строке:
git clone https://github.com/nrthbnd/bookshelf.git
-
Cоздать и активировать виртуальное окружение:
-
python -m venv venv
-
source venv/scripts/activate # Для Windows
-
source venv/bin/activate # Для Linux/MacOS
-
Установить зависимости с помощью poetry:
poetry install
-
Заполнить файлы с переменными окружения
.env
и.env.rmq
в соответствии с примерами.env.example
и.env.rmq.example
. -
Соберать и запустить контейнеры с помощью Docker Compose:
docker-compose up --build
После выполнения этой команды будут запущены контейнеры:
- fastapi (веб-приложение);
- grpc (сервис для межсервисного взаимодействия);
- db (база данных);
- rabbitmq (брокер сообщений);
- consumer (обработчик сообщений RabbitMQ).
Документация Swagger для web-api доступна по адресу: http://localhost:8000/docs
Для использования gRPC-сервиса через Postman:
- Выбрать тип запроса gRPC;
- Импортировать файл app/grpc_service/proto/book.proto;
- Установить адрес localhost:50051;
- Выбрать необходимый метод:
- ListBooks — для получения списка всех доступных книг.
- GetBookById — для получения информации о книге по её ID (при этом необходимо указать
message, например,
{"id": 1}
).
При выполнении операций создания, обновления или удаления книг через FastAPI, соответствующие события отправляются в RabbitMQ. Обработчик (Consumer) слушает сообщения и записывает информацию о них в консоль.