- Технологии
- Описание работы
- Установка приложения
- Запуск тестов
- Запуск приложения
- Удаление приложения
- Автор
Подробнее
Асинхронный проект и асинхронный клиент к внешнему API реализованы с использованием FastAPI и httpx. Асинхронный клиент периодически запускается в фоновой задаче, реализованной на Celery и RabbitMQ. Посмотреть процесс выполнения и результаты фоновых задач можно через удобный интерфейс Flower.
В качестве базы данных используется PostgreSQL + asyncpg драйвер для асинхронных запросов к БД. Кеширование данных реализовано с помощью асинхронной библиотеки aioredis (является официальной частью библиотеки redis-py). Кеширование запускается в background_tasks FastApi для ускорения выдачи ответа пользователю. В качестве ORM используется SQLAlchemy + Alembic для миграций БД.
Асинхронные тесты реализованы с использованием httpx, pytest и плагина pytest-asyncio.
Приложение и тесты могут быть запущены в Docker-контейнерах.
FastAPI-шаблон состоит из основного блока (реализован стандартный CRUD на основе паттерна репозиторий - поэтому легко подключается любая бизнес-логика) и клиента для обращения к внешнему API с возможностью интеграции полученных данных в бизнес-логику основного блока.
- Основной блок - прототип социальной сети:
Неавторизованные пользователи могут получать доступ на чтение либо ко всем постам, либо к конкретному посту.
Авторизованный пользователь дополнительно может создавать посты, редактировать и удалять свои посты (админ имеет права доступа к любым постам), ставить лайки и дислайки для любых постов, кроме своих. Для доступа к этим функциям необходимо авторизоваться в Swagger, используя:
- либо учетные данные из .env-файла (этот пользователь с правами админа создается программно при запуске приложения)
- либо учетные данные нового зарегистрированного пользователя - зарегистрироваться можно через эндпоинт /auth/register в Swagger:
Авторизация:
1. Нажмите:
- на символ замка в строке любого эндпоинта или
- на кнопку `Authorize` в верхней части Swagger.
Появится окно для ввода логина и пароля.
2. Введите учетные данные в поля формы:
- в поле `username` — адрес почты (например значение переменной окружения `ADMIN_EMAIL`),
- в поле `password` — пароль (например значение переменной окружения `ADMIN_PASSWORD`).
В выпадающем списке `Client credentials location` оставьте значение `Authorization header`,
остальные два поля оставьте пустыми; нажмите кнопку `Authorize`.
Если данные были введены правильно, и таблица в БД существует — появится окно с подтверждением авторизации, нажмите Close
.
Чтобы разлогиниться — перезагрузите страницу.
Swagger позволяет осуществлять http-запросы к работающему сервису, тем самым можно управлять постами в рамках политики сервиса (указано в Swagger для каждого запроса).
- Асинхронный httpx-клиент для криптобиржи Deribit:
через определенный интервал времени (задается пользователем, по умолчанию 15 сек) httpx-клиент забирает с биржи текущую цену BTC и ETH и логирует тикер валюты, текущую цену и время в UNIX (данные можно посмотреть по ссылке http://127.0.0.1:5555/tasks). Асинхронный клиент работает по протоколу HTTP/2 в фоновой периодической celery-задаче.
Предварительные условия
Предполагается, что пользователь установил Docker и Docker Compose на локальной машине. Проверить наличие можно выполнив команды:
docker --version && docker-compose --version
Клонируйте репозиторий с GitHub и введите данные для переменных окружения (значения даны для примера, но их можно оставить):
git clone https://github.com/alexpro2022/test-reactive-phone-FastAPI.git
cd test-reactive-phone-FastAPI
cp env_example .env
nano .env
Из корневой директории проекта выполните команду:
docker build -f ./docker/test.Dockerfile -t social_network_tests .
docker run --name tests social_network_tests
docker container rm tests
docker rmi social_network_tests
- Из корневой директории проекта выполните команду:
docker compose -f docker/docker-compose.yml up -d --build
Проект будет развернут в docker-контейнерах по адресу http://127.0.0.1:8000.
Администрирование приложения может быть осуществлено через Swagger доступный по адресу http://127.0.0.1:8000/docs .
Мониторинг фоновых задач Celery осуществляется по адресу: http://127.0.0.1:5555/tasks .
- Остановить docker и удалить контейнеры можно командой из корневой директории проекта:
docker compose -f docker/docker-compose.yml down
Если также необходимо удалить том базы данных:
docker compose -f docker/docker-compose.yml down -v
Из корневой директории проекта выполните команду:
cd .. && rm -fr test-reactive-phone-FastAPI