Currency Exchange Api — веб-приложение, созданное на основе FastAPI, предназначенное для облегчения доступа к актуальным данным о курсах валют и выполнения операций, связанных с конвертацией валют в реальном времени. Приложение интегрируется с внешними API обменных курсов, что обеспечивает его актуальность и надежность предоставляемых данных.
Основные возможности:
- Аутентификация и безопасность
- Актуальные курсы валют
- Конвертация валют
- Поддержка основго списка мировых валют
- Регистрация и аутентификация пользователей
- Использование WebSocket для мгновенного обновления данных о валютных курсах и операциях конвертации, улучшая взаимодействие пользователя с приложением.
- Доступ к админ-панели
- Кэширование с помощью Redis
- Лимит запросов от пользователей
currency_exchange_api/
├── alembic/
│ ├── versions/
│ └── env.py
├── app/
│ ├── api/
│ │ ├── admin/
│ │ ├── auth/
│ │ └── endpoints/
│ ├── commands/
│ ├── core/
│ ├── exceptions/
│ ├── media/
│ ├── models/
│ ├── schemas/
│ └── services/
│ └── utils/
├── docker/
├── tests/
├── .env
├── .gitignore
├── alembic.ini
├── docker-compose.yaml
├── Dockerfile
├── LICENSE
├── main.py
├── poetry.lock
├── pyproject.toml
├── README.md
└── requirements.txt
-
Клонируйте репозиторий:
git clone https://github.com/Rishat-Ver/currency_exchange_api.git
-
Перейдите в папку проекта:
cd currency_exchange_api
-
Создайте виртуальное окружение (рекомендуется):
python3 -m venv venv source venv/bin/activate # On Windows, use venv\Scripts\activate.bat
-
Переименовать шаблон-файл переменных окружения
.env.example
в.env
.Ввести свои настройки в .env (с настройками по-умолчанию не безопасно).
Для получения API-key требуется регистрация на https://apilayer.com/ Выбрать Free Plan на https://apilayer.com/marketplace/currency_data-api
-
Запустите Docker Compose:
docker-compose up --build -d
Примечания:
В контейнере поднимается БД, redis и само приложение.
Создаётся тестовый суперпользователь admin с паролем admin(можно поменять эти значения).
Приложение готово к работе по адресу http://localhost:8001/
POST /api/auth/#/
Авторизует пользователя и возвращает JWT токен для доступа к защищенным маршрутам.
-
GET /api/currency/exchange_rate
- Получение актуальных курсов обмена валют относительно базовой валюты (по умолчанию USD). -
GET /api/currency/show_convert
- Конвертация указанной суммы из одной валюты в другую на заданную дату. -
GET /api/currency/show_change
- Показывает изменение курса валют за определенный период времени. -
GET /api/currency/historical
- Возвращает исторические курсы валют для заданной даты. -
GET /api/currency/list
- Выводит список доступных валют и соответствующих стран. -
GET /api/currency/timeframe
- Запрашивает курсы валют за определенный период времени. Требует аутентификации.
-
POST /api/users/create
- Регистрация пользователя с возможностью загрузки изображения профиля. -
GET /api/users/me
- Получение данных о профиле и балансе текущего пользователя. Требуется аутентификация. -
PATCH /api/users/top_up_balance/
- Позволяет пользователю пополнить свой баланс. Требуется аутентификация. -
PATCH /api/users/change_currency/
- Конвертация валютного баланса из одной валюты в другую. Требуется аутентификация. -
DELETE /api/users/me/delete
- Удаление учетной записи пользователя. Требуется аутентификация. -
GET /api/users/evaluate_balance
- Оценка суммарного баланса пользователя в выбранной валюте. Требуется аутентификация.
WS /api/users/ws/
- Устанавливает соединение WebSocket обновления статуса баланса пользователя в реальном времени. Требуется аутентификация.
После успешного установления соединения через WebSocket, приложение обеспечивает двусторонний канал связи между сервером и клиентом, позволяя отправлять и получать сообщения в реальном времени.
-
Пополнение баланса: Когда пользователь пополняет свой баланс, через установленное WebSocket соединение отсылается уведомление с информацией о успешном пополнении.
-
Конвертация валюты: При успешной конвертации валюты пользователя отправляется сообщение через WebSocket, информирующее о деталях совершенной транзакции, включая исходную и целевую валюту, а также сумму конвертации.
- Аутентификация пользователя с использованием токена, полученного при входе.
- Управление подключениями с помощью
WebSocketManager
. - Ограничение частоты сообщений (Rate Limiter) — пользователь может отправлять сообщения не чаще одного раза в 5 секунд.
- При превышении лимита отправки сообщений пользователю будет отправлено уведомление об этом.
- В случае неожиданного разрыва соединения WebSocket со стороны пользователя,
WebSocketManager
отключит пользователя.
После запуска API вы можете получить доступ к Swagger UI по следующему URL:
http://localhost:8001/docs
Используйте Swagger UI для:
- Просмотра конечных точек
- Отправки запросов
- Просмотра ответов
- Тестовые проверки
Для тестирования с помощью Swagger UI выполните следующие действия для каждой конечной точки, описанной выше:
-
Откройте ваш веб-браузер и перейдите по указанному выше пути
/docs
. -
Изучите доступные конечные точки и выберите ту, которую вы хотите протестировать.
-
Нажмите на кнопку "Try it out" для открытия интерактивной формы, где вы можете ввести данные.
-
Заполните необходимые параметры и тело запроса (если применимо) согласно документации API, приведенной выше.
-
Нажмите кнопку "Execute", чтобы отправить запрос на API.
-
Ответ будет отображен ниже, показывая код состояния и данные ответа.
-
Вы также можете просмотреть примеры запросов и ответов, что может быть полезно для понимания ожидаемого формата данных.
В проекте Currency Exchange API использованы следующие инструменты:
- FastAPI - веб-фреймворк приложения.
- Pydantic - для валидации и управления данными на основе аннотации типов.
- SQLAlchemy - для работы с базами данных через ORM и асинхронный SQL.
- AsyncPG - асинхронный драйвер для работы с PostgreSQL.
- Alembic - инструмент миграций для SQLAlchemy.
- PyJWT - реализация JWT для безопасной работы с токенами аутентификации.
- AIOHTTP - асинхронный HTTP-клиент/сервер для модуля asyncio.
- FastAPI Cache2 - кэширование для FastAPI с поддержкой Redis.
- SQLAdmin - админ-панель для FastAPI и SQLAlchemy.
- Googletrans - Python клиент для Google Translate API.
- FastAPI Limiter - для установки лимитов на запросы к API.
- Docker - для контейнеризации и развертывания приложения.
- Poetry - для управления зависимостями и пакетами.