- Клиент для внешнего API для Deribit(https://docs.deribit.com/)
-
Клиент для Deribit API
- Получение index price для BTC/USD и ETH/USD каждую минуту
- Сохранение с UNIX timestamp
-
FastAPI Backend
- 3 GET endpoints с обязательным параметром
ticker - Получение всех сохраненных данных по валюте
- Получение последней цены
- Фильтрация по дате (формат YYYY-MM-DD)
- 3 GET endpoints с обязательным параметром
-
База данных
- PostgreSQL с SQLAlchemy ORM
- Модель для хранения цен валют
-
Периодические задачи
- Celery для планирования задач
- Redis как брокер сообщений
deribit-api/
├── src/
│ ├── currency/ # Модуль для работы с валютами
│ │ ├── celery_config.py # Конфигурация Celery
│ │ ├── models.py # SQLAlchemy модели
│ │ ├── schemas.py # Pydantic схемы
│ │ ├── router.py # Основной роутер
│ │ └── service.py # Операции с БД
│ ├── main.py # Точка входа FastAPI
│ ├── config.py # Класс для взаимодействия с переменными окружения
│ ├── logger.py # Конфигурация для логирования (logger)
│ ├── utilits.py # Задача celery
│ └── database.py # Настройки БД
├── alembic/ # Миграции БД
│ ├── env.py # Настройка окружения миграций
│ └── script.py.mako №
├── tests/ # Unit тесты
│ ├── unit/
│ │ └── test_api.py # Файл с тестами
├── .env.example # Шаблон для переменных окружения
├── .gitignore
├── poetry.lock # Конфигурация Poetry
├── pyproject.toml # Зависимости Poetry
└── README.md # Документация
git clone https://github.com/N1chegons/Deribittask.git
cd Deribittaskpoetry install3. Создайте свой .env и измените переменные, исходя из ваших настроек для работы с переменными окружения на основе .env.example. Составляющее файла:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=my_db
DB_USER=user
DB_PASS=pass
REDIS_URL=redis://localhost:6379/0 < Можете оставить по умолчанию, т.к. запуск будет производиться через Docker с стандартным портом
alembic revision --autogenerate -m "First Initial"
alembic upgrade headdocker run -d -p 6379:6379 --name redis-celery redis:alpine celery -A src.currency.celery_config.celery_app worker --loglevel=info --pool=geventcelery -A src.currency.celery_config.celery_app beat --loglevel=infouvicorn src.main:app --reload # стандартный запуск
uvicorn src.main:app --reload --port 1000 # если хотите изменить порт - Все методы используют GET запросы с обязательным параметром ticker.
GET http://127.0.0.1:8000/ticker/data/?ticker=BTCUSD
[
{
"id": 1,
"ticker": "BTCUSD",
"price": 87662.53,
"timestamp": 1769534255,
"created_at": "2026-01-27T17:17:36.085877"
},
{
"id": 3,
"ticker": "BTCUSD",
"price": 87559.44,
"timestamp": 1769534311,
"created_at": "2026-01-27T17:18:31.480640"
}
]
GET http://127.0.0.1:8000/ticker/latest_price/?ticker=BTCUSD
{
"Последняя цена BTCUSD": 87632.2
}
GET http://127.0.0.1:8000/ticker/prices/filtered/?ticker=ETHUSD&date_from=2026-01-27&date_to=2026-01-27
- date_from (опционально): Начальная дата в формате YYYY-MM-DD
- date_to (опционально): Конечная дата в формате YYYY-MM-DD
{
"Тикер: ": "ETHUSD",
"Период с: ": "2026-01-27",
"Период по: ": "2026-01-27",
"Цена: ": [
2945.21,
2942.42,
2939.98
]
}
pytest -s -vИспользована модульная архитектура с разделением на слои:
- models.py - SQLAlchemy модели для работы с БД
- schemas.py - Pydantic схемы для валидации данных
- service.py - операции с базой данных
- utilits.py - Celery задачи для фоновых операций
- FastAPI для синхронного API
- Request для синхронных HTTP-запросов к Deribit
- Celery с gevent пулом для фоновых задач
- Использую gevent т.к. Celery не поддерживает Windows
- Использую синхронность потому что: Проект не высоконагруженный, первый опыт работы с Celery.
- PostgreSQL как основная реляционная БД
- SQLAlchemy с синхронным драйвером psycopg2
- Alembic для управления миграциями
- Celery Beat для планирования задач
- Redis как брокер сообщений
- Изоляция задач получения цен от основного API
- Использую logger для логирования API
- Богдан
- GitHub: N1chegons
- Telegram: @Nichegons
- Email: nichegons@gmail.com