GaiaEx AcademyGaiaEx Academy
Дизайн RESTful API та інтеграція WebSocket
РозробникПрограмування10 min read

Дизайн RESTful API та інтеграція WebSocket

Побудова та використання API ринкових даних і торгівлі

Поділитися

REST: ресурси та дієслова

REST відображає CRUD на HTTP: GET для читання, POST для створення, PATCH для часткового оновлення, DELETE для видалення. Використовуйте статус-коди чесно — 200 з JSON-помилкою всередині ламає клієнтів.

Версіонуйте у шляху (/v1/), пагінуйте великі списки (курсорні стрічки для потоків, що лише додаються), і документуйте зворотньо-несумісні зміни з періодом застереження про застарілість (deprecation window).

REST ПРОТИ WEBSOCKET Команди проти потокових даних — більшість бірж використовують обидва REST (HTTPS) Запит → відповідь → простій Виставлення/скасування, баланси, знімки WebSocket Постійний дуплексний канал Угоди, дельти книги ордерів, тікери
REST — для зміни стану; WebSocket — для безперервних ринкових даних. Не опитуйте книгу ордерів на межі лімітів HTTP.

Ключі та HMAC

API-ключі ідентифікують; секрети підтверджують. Для торгових ендпоінтів підписуйте через HMAC канонічний рядок (метод + шлях + тіло + часова метка), щоб секрет ніколи не проходив по мережі. Відхиляйте застарілі часові метки, щоб блокувати повторні відправлення (replay) — ±30 секунд — типове вікно.

OAuth підходить для сторонніх застосунків; чисті торгові боти зазвичай залишаються на схемі ключ+HMAC. Обмеження частоти запитів: очікуйте 429 і поважайте заголовок Retry-After.

Оновлення протоколу WebSocket

Сесія починається як HTTP GET з заголовком Upgrade: websocket; сервер повертає 101 Switching Protocols. Після цього фрейми обходяться дешевше порівняно з повторними TLS-хендшейками при HTTP-опитуванні (polling).

Повідомлення про підписку зазвичай мають формат JSON: метод, канали, а іноді — підписи автентифікації для приватних виконань (fills).

Книги ордерів, угоди, відновлення

Потік угод — це тікові дані; книги ордерів — це знімок + дельта з порядковими номерами (sequence numbers). Якщо ви пропустили номери послідовності, виконайте пересинхронізацію зі знімка REST, а потім застосуйте дельти з sequence > snapshot.

Heartbeat: надсилайте ping або очікуйте пінги від сервера; переприєднуйтесь з випадковою затримкою (jittered backoff), щоб уникнути «стадного ефекту» (thundering herd).

ПЕРЕСИНХРОНІЗАЦІЯ КНИГИ ОРДЕРІВ Розриви в послідовності означають, що ваша локальна книга неправильна, доки не виправлена Розрив WS Знімок REST Підписка на дельти застосовувати лише якщо seq > snapshot_seq seq: 10421 розрив 10422–10429 знімок @10429 дельта 10430+ Торгувати по застарілій книзі гірше, ніж призупинити квоти на одну секунду
Після розриву з’єднання: спершу знімок, потім дельти — ніколи не вгадуйте пропущені рівні.

GraphQL та OpenAPI

GraphQL скорочує надлишкове отримання даних для дашбордів; багато бірж і досі надають REST для торгових «гарячих шляхів». Специфікації OpenAPI (Swagger) допомагають генерації коду та QA — тримайте приклади готовими до копіювання й вставки.

Мінімальний паттерн споживача

Запустіть цикл WebSocket у окремій задачі, вкладайте останні ціни у thread-safe карту, надайте HTTP для перевірок стану (health checks). Логуйте кількість переприєднань; сповіщайте, коли вони зростають.

Розмістіть тести підпису та розбіжності годинника (clock skew) у CI: зламаний HMAC у продакшені неможливо відрізнити від «ринок просто рухнув», доки ви не проаналізуєте логи.