Руководство по Python WebSocket для API Backpack Exchange
Это руководство демонстрирует, как использовать Backpack Exchange WebSocket API с Python. WebSockets обеспечивают потоки данных в реальном времени для рыночных данных и обновлений аккаунта.
Предварительные требования
Получите ваши API ключи, если вы собираетесь использовать приватные потоки: https://backpack.exchange/portfolio/settings/api-keys
Установите необходимые библиотеки Python:
websockets - для WebSocket соединений
cryptography - для X-Signature (только приватные потоки)
pip install websockets cryptographyУстановите dotenv-python для безопасного управления вашими ключами с помощью переменных окружения, если вы собираетесь использовать приватные потоки
pip install python-dotenvСоздайте файл .env и храните ваши ключи так:
PUBLIC_KEY=zDIJj9qneWIY0IYZ5aXoHcNMCm+XDhVcTssiT0HyY0A=
SECRET_KEY=4odxgSUxFrC/zsKWZF4OQwYAgnNu9hnWH3NxWfLAPz4=Создайте файл .gitignore и добавьте .env, чтобы исключить его из контроля версий.
.envИмпортируйте необходимые библиотеки:
import json
import asyncio
import websockets
import base64
from time import time
import os
from cryptography.hazmat.primitives.asymmetric import ed25519
from dotenv import load_dotenv, find_dotenvОсновы WebSocket API
Backpack Exchange WebSocket API доступен по адресу wss://ws.backpack.exchange.
Потоки WebSocket именуются в формате: <type>.<symbol>
Например:
depth.SOL_USDC- Книга ордеров для SOL/USDCtrade.SOL_USDC- Сделки для SOL/USDC
Почему использовать Async с WebSockets
WebSockets предназначены для долгоживущих соединений, которые получают данные в реальном времени. Использование асинхронного программирования с WebSockets предлагает несколько преимуществ:
Неблокирующий I/O: Async позволяет вашему приложению обрабатывать множество соединений без блокировки основного потока.
Эффективность ресурсов: Async использует меньше ресурсов, чем создание множества потоков для параллельных соединений.
Лучшая производительность: Async может обрабатывать много соединений с меньшими накладными расходами, чем синхронные подходы.
Обработка в реальном времени: Async идеален для потоков данных в реальном времени, где вам нужно непрерывно получать и обрабатывать данные.
Синхронные подходы имеют несколько недостатков:
Сложное управление потоками: Требует ручного управления потоками
Ресурсоемкость: Каждое соединение нуждается в своем собственном потоке
Сложная обработка ошибок: Распространение ошибок через потоки является сложным
Проблемы масштабирования: Плохо масштабируется при многих соединениях
Асинхронный подход (как показано в наших примерах) намного чище, эффективнее и проще в обслуживании.
Публичные потоки
Публичные потоки не требуют аутентификации. Вы можете подписаться на них напрямую.
Пример: Подписка на публичный поток
Пример: Подписка на несколько публичных потоков
Приватные потоки
Приватные потоки требуют аутентификации с вашими API ключами. Эти потоки имеют префикс account. и предоставляют обновления о вашем аккаунте.
Аутентификация для приватных потоков
Для аутентификации приватных потоков вам нужно:
Создать строку подписи в форме:
instruction=subscribe×tamp=1614550000000&window=5000Подписать её вашим приватным ключом
Включить данные подписи в ваше сообщение подписки как массив:
"signature": ["<verifying key>", "<signature>", "<timestamp>", "<window>"]
Приватные потоки имеют префикс account. и требуют отправки данных подписи в параметрах подписки. Ключ проверки и подпись должны быть закодированы в base64.
Пример: Подписка на приватный поток
WebSocket Ping/Pong
Соединения WebSocket требуют механизма ping-pong для поддержания соединения в активном состоянии. Хорошая новость в том, что библиотека Python websockets обрабатывает это автоматически
Источники
Для получения дополнительной информации посетите официальную документацию: https://docs.backpack.exchange/#tag/Streams
