Note: Публикация файлов не нарушило условий задания Суть работы:
- Подключение к Deribit (crypto биржа).
- Получение данных пользователя.
- Подписка на получение данных курса по ticker-у с временным интервалом.
- Отмена подписки.
- Получение данных с фильтром даты.
===APP CryptoMarket
Мы знаем - Полиморфизм. Но это в ООП. Тут же говорю о целом APP. Стараюсь делать единый код для выполнения разных задач
изменения только в args/kwargs
Да, понимаю, что работа занимает более 10 дней указанного deadline. Но и
делать по принципу "а лишь бы было" нет желания.
Да, мог сделать:
- HTTP запросы напрямую по внешнему API.
- Без кеширования.
- Без update базы данных.
- Без шифровани данных.
- С одной базой данных.
Но, сделал:
SSE, WSS, HTTP.
- плановое и по мере запроса - кеширование.
- обновление данных.
- шифрование секретных ключей (не путать с хешем и кешем).
- с двумя базами данных. Для переключения использовать переменную "DEBUG" из ".ENV".
- базы данных на синхронном и/или асинхронном драйвере, для каждой из базы ("SQLite" & "PostgreSQL").
- Запуская docker-compose арр само создаёт базу данных, проверят и добавляем (DEBUG укажите Fasle) schema "crypto".
- В зависимости от "DEBUG" таблицы из базы данных имеют своё уникальное имя.
- файл swagger загрузите в Postman. web-api список по url ниже.
Работа представляет 3-ю версию кода которую готов отправить.
1) В 1-ой версии. Когда получаем access токен, закрываем соединение. Далее по токену делаем новое подключение для получения
новых данных. Но токен выдается именно на сессию/подключение и после закрытого подключения к Deribit токен использовать не было возможности.
2) В 2-ой Получил ограничение по трафику (до 15 запросов в секунду). Стал терять запросы в локальной очереди (asyncio.Queue).
3)Когда один API запрашиваем от APP 9а не от пользователя). Пользователь получает данные уже из db. Снижаем нагрузку.
Возможно стоит учесть, что с этой биржей работал в первый раз. Работа была без какого либо ТЗ, всё создавалось на ходу.
Всё это потребовало время.
HTTP, WSS, SSE
Подключаемся по SSE
Отправляем запрос и:
- основной поток подключается к SSE.
- дополнительный поток данных отправляет запрос на Deribit OAuth. Если пользователь там зарегистрирован, получаем
access tokens и данные пользователя (имя, почту). Пользователь в виде образа (конкретной личности) сохраняется в менеджере,
и на 27 часов в кеше. Через задачу и Celery в полночь загружаем данные в базу данных. В данный момент сервер загрузки
даных о пользователе не создан/востребован (но если надо, сделаю). Данные (время жизни) в кеше часто обновляются.
-Authentication https://docs.deribit.com/articles/authentication
Note
Запрос на подключение к SSE включает в себя обязательные "client_id" & "client_secret".\
Под капотом данные пользователя перехватываются и шифруются. Секретный ключ от шифра через кеш передается к месту где
"client_id" & "client_secret" используются по назначению.
Уже из кеша , когда получаем этот ключ (в одной из задачи) то де-шифровка секретного текста для аутентификации пользователя.
Данные об успешной авторизации кешируем на 27 часов.
Каждый пользователь имеет разовый уникальный ключ шифра на время жизни секретных данных (time live 10-15 секунд). Ключи это результат авто-генератора.