Чем дольше работаем тем меньше платите!

Денис Королев Trydogolik

Рейтинг: 788
Паспорт верифицирован
Всего отзывов: 14 0
Выполнил заданий: 9
  • Активность:
  • Работ в портфолио: 98
  • Типовых услуг: 0
  • Работ на продажу: 0
  • Возраст: 45 лет
  • Стаж работы: 3 года
  • Зарегистрирован: 30.12.2014
Был на сайте:

Описание

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 секунд). Ключи это результат авто-генератора.

Ссылки на примеры реализации

 github.com/Tryd0g0lik/krypto_market/tree/master

Презентация проекта

Screenshot_122.png
Screenshot_124.png
Screenshot_125.png
Screenshot_126.png
Screenshot_127.png
Screenshot_128.png
Screenshot_129.png
Screenshot_131.png
Postmane_test_server_2.png
Logic_visualization.png

Оценили проект:

0