GaiaEx AcademyGaiaEx Academy
Projektowanie API RESTful i integracja WebSocket
DeweloperProgramowanie10 min read

Projektowanie API RESTful i integracja WebSocket

Budowanie i konsumowanie API danych rynkowych i handlowych

Udostępnij posty

REST: zasoby i czasowniki

REST mapuje operacje CRUD na HTTP: GET do odczytu, POST do tworzenia, PATCH do częściowych aktualizacji, DELETE do usuwania. Używaj kodów statusu uczciwie — 200 z JSON-em błędu psuje klientów.

Wersjonuj w ścieżce (/v1/), paginuj długie listy (kursor dla strumieni tylko-do-dopisywania) i dokumentuj zmiany łamiące kompatybilność z oknem wygaszania (deprecation window).

REST vs WEBSOCKET Commands vs streaming—most exchanges use both REST (HTTPS) Request → response → idle Place/cancel, balances, snapshots WebSocket Persistent duplex channel Trades, book deltas, tickers
REST do zmian stanu; WebSocket do ciągłych danych rynkowych — nie odpytuj księgi zleceń przy limitach żądań HTTP.

Klucze i HMAC

Klucze API identyfikują; sekrety uwierzytelniają. Dla endpointów handlowych podpisuj HMAC-em kanoniczny ciąg (metoda + ścieżka + treść + znacznik czasu), żeby sekret nigdy nie przechodził przez sieć. Odrzucaj przestarzałe znaczniki czasu, aby blokować powtórki (replay) — powszechne okno to ±30 s.

OAuth pasuje do aplikacji stron trzecich; czyste boty handlowe zwykle trzymają się klucza i HMAC. Limity żądań: liczy się na 429 i respektuj nagłówek Retry-After.

Aktualizacja do WebSocket

Sesja zaczyna się jako HTTP GET z Upgrade: websocket; serwer odpowiada 101 Switching Protocols. Później ramki są tanie w porównaniu z powtarzanymi uzgodnieniami TLS przy odpytywaniu przez HTTP.

Wiadomości subskrypcyjne to zwykle JSON: metoda, kanały, a czasem sygnatury autoryzacyjne dla prywatnych wypełnień zleceń.

Księgi, transakcje, odbudowa stanu

Strumień transakcji to dane tikowe; księgi zleceń to snapshot + delty z numerami sekwencyjnymi. Jeśli ominiesz sekwencje, zsynchronizuj się ponownie od snapshotu REST, a następnie nakładaj delty z sekwencją większą niż numer snapshotu.

Heartbeat: wysyłaj ping albo oczekuj pingów od serwera; łącz się ponownie z losowym (jittered) narastającym odstępem, żeby uniknąć efektu stada (thundering herd).

ORDER BOOK RESYNC Sequence gaps mean your local book is wrong until fixed WS drop REST snapshot Subscribe deltas apply only if seq > snapshot_seq seq: 10421 gap 10422–10429 snapshot @10429 delta 10430+ Trading on a stale book is worse than pausing quotes for one second
Po rozłączeniu: snapshot, a potem delty — nigdy nie zgaduj brakujących poziomów.

GraphQL i OpenAPI

GraphQL ogranicza nadmiarowe pobieranie danych na potrzeby dashboardów; wiele giełd mimo to eksponuje REST dla krytycznych ścieżek handlowych. Specyfikacje OpenAPI (Swagger) pomagają w generowaniu kodu i testach — utrzymuj przykłady w formie łatwej do skopiowania.

Minimalny wzorzec konsumenta

Uruchom pętlę WebSocket w zadaniu, wpisuj ostatnie ceny do bezpiecznej dla wątków mapy, wystaw HTTP do kontroli stanu. Loguj liczbę ponownych połączeń; alarmuj, gdy nagle wzrasta.

Umieść testy podpisywania i przesunięcia zegara w CI: uszkodzony HMAC na produkcji jest nieodróżnialny od „rynek się poruszył”, dopóki nie przeanalizujesz logów.