Interfejsy dostępu do danych
1) Dlaczego przemyślany interfejs
Szybkość i przewidywalność: wskaźniki biznesowe i raporty pasują do SLA, bez „manualnych przesyłek”.
Bezpieczeństwo i prywatność: PII/biometria pod kontrolą, k-anonimowość, geo-granice.
Elastyczność: różni klienci (BI, usługi, partnerzy, DS/ML) otrzymują dokładnie to, czego potrzebują.
Ponowne wykorzystanie „danych jako produktu” z umowami i wersjami.
2) Mapa interfejsu (kiedy co)
SQL/ANSI + dialekty sprzedawcy: interaktywna analityka, BI, ad-hoc.
REST JSON: stabilne agregaty i dane operacyjne, integracja z partnerami.
GraphQL: elastyczny „selektywny” wykres odczytu i nawigacji (wymiary/fakty).
gRPC (protobuf): niskie opóźnienie surfingu online (sklep funkcyjny, punktacja).
Strzałka Lot/Parkiet nad HTTP/S3-presigned: szybkie rzuty kolumn dla DS/ML.
OData: narzędzia dla przedsiębiorstw, model table-as-a-service.
Strumienie (Kafka/Pulsar) + CDC/Webhooks: wydarzenia w czasie rzeczywistym, integracje reaktywne.
Federacja (Trino/Presto): Pojedynczy punkt wejścia do wielu źródeł.
Zasada: kruszywa i stabilne plasterki → REST/MV, bogate arbitralne zapytania → SQL, niskie opóźnienia/funkcje online → gRPC, elastyczny formularz odpowiedzi → GraphQL, masowa wymiana binarna → Arrow/Parkiet.
3) Umowy i wersje (semver)
"MAJOR. DROBNE. PATCH 'dla każdego API/schematu/zdarzenia.
MAJOR: niezgodne ze wspólnym rynkiem zmiany (nowa ścieżka/temat/tabela).
MINOR: Kompatybilne dodatki pola/argumentu.
PATCH: edytuj opisy/limity.
Umowy są stałe: schemat, filtry, limity, prywatność, SLO.
yaml openapi: "3. 0. 3"
info: {title: "Analytics API", version: "2. 4. 0"}
paths:
/v2/payments/metrics:
get:
parameters:
- {name: brand, in: query, schema: {type: string}, required: true}
- {name: country, in: query, schema: {type: string}}
- {name: from, in: query, schema: {type: string, format: date-time}}
- {name: to, in: query, schema: {type: string, format: date-time}}
- {name: group_by, in: query, schema: {type: string, enum: [psp,status,day]}}
- {name: limit, in: query, schema: {type: integer, default: 500}}
responses:
"200": {description: "OK"}
x-slo: {p95_latency_ms: 1200, freshness_max: "PT5M"}
x-privacy: {pii: false, min_group_size: 20}
4) Dostęp do analityki (SQL i federacja)
Brama SQL z rolami/maskami (zabezpieczenie poziomu wiersza/kolumny).
Blizzards/BI projekcje: stabilne nazwy i semantyka; Ciężkie prośby idą do preagregacji.
Federacja (Trino/Presto): pojedynczy punkt wejścia, ale z zasadami: jakie katalogi i jakie funkcje są dostępne.
Lakehouse (Iceberg/Delta/Hudi): podróże w czasie, snapshot-retrievals via SQL/REST.
Квота: skanowane bajty/zapytanie, równoczesność, czas ściany.
5) GraphQL (elastyczna forma)
Dajemy klientowi, aby zebrać pożądane pole, ale wykonać nad przygotowanymi blizzards/projekcje, z głębokości/kości limitów.
graphql type Query {
payments(
brand: String!, country: String, from: DateTime!, to: DateTime!,
first: Int = 200, after: String
): PaymentConnection
}
Zasady: głębokość ≤ 5, całkowite węzły ≤ 5k, zabrania arbitralnego regeksu/podobnie według linii; buforujemy częste prośby.
6) gRPC/Feature Store (niskie opóźnienie)
Funkcje online do oceny przeciwdziałania oszustwom/zalecenia/RG.
proto service FeatureStore {
rpc GetFeatures (FeatureRequest) returns (FeatureResponse);
}
message FeatureRequest { string user_tok = 1; repeated string features = 2; }
message FeatureResponse { map<string, FeatureValue> values = 1; int64 ts_micros = 2; }
Wymagania: p95 ≤ 50-100 ms, dokładna konsystencja offlayn, funkcja TTL, pamięć podręczna LRU, idempotencja i mTLS.
7) Przepływy i CDC
Zdarzenia domeny: 'płatności. deposit_accepted', gra. round_finished'.
CDC (z OLTP): stan/ograniczenie zmian w czasie zbliżonym do rzeczywistego.
Haki dla partnerów: subskrypcja agregatów (np. „Awarie PSP> próg”).
Polityka w zakresie przekwalifikowania/uznawania: dokładnie raz na krytyczne, przynajmniej raz na potrzeby monitorowania.
8) Jeziora i duże próbki
Strzałka Lot dla szybkich zrzutów kolumn do DS/ML.
Podpisany adres URL do parkietu/pióra, z krótkim TTL i podpisanym żądaniem.
Pęknięty transfer i kontrola rozmiaru pliku; Pobierz dziennik (audyt WORM).
9) Filtry, paginacja, sortowanie
Keyset pagination (kursor) zamiast OFFSET dla dużych zestawów.
Filtry: białe listy według pól, typów i operatorów ('=, IN, INTER, prefix').
Sortowanie: ograniczona lista pól, domyślne zamówienie.
Częściowa odpowiedź: 'fields = brand, country, amount' zmniejsza ładunek.
http
GET /v2/game-rounds? brand=X&from=...&to=...&first=1000&after=eyJkYXRlIjoi...
10) Buforowanie i koszt
Pamięć podręczna wyników dla żądań szablonu, wyłączona przez identyfikator migawki.
Pamięć podręczna/CDN krawędzi dla agregatów publicznych/półpublicznych (bez PII).
Parametry budżetu: skanowany limit bajtów, timeout żądania, kontyngenty rps/min.
Priorytety puli: 'bi _ hot', 'adhoc', 'partner _ api'.
11) Bezpieczeństwo i prywatność
AuthN: OAuth2/OIDC (poświadczenia klienta dla usług, PKCE dla osób).
AuthZ: RBAC + ABAC (atrybuty: marka, kraj, licencja, rola).
mTLS między usługami, TLS 1. 2 + out.
Higiena PII: maski/tokenizacja na warstwie API, maski kolumnowe, k-anonimowość kruszyw.
Geo/lokator-izolacja: routing wniosków do regionu licencji; klucze szyfrowania dla marki/regionu.
DSAR/Legal Hold: search by subject token, secrets for freezing sets.
12) Obserwowalność (SLI/SLO) i ochrona
SLI: p50/p95/p99 lat, wskaźnik błędów, rps, skanowane bajty, trafienie pamięci podręcznej, kwoty/limity, udział kolumn zamaskowanych, udział awarii autoryzacji.
SLO: opóźnienie p95, świeżość danych,% udanych żądań, min-grupa-rozmiar odpowiedzi.
Alerty: skanowane bajty wzrastają, spadają, 429/5xx kolce, próby dostępu PII, wycieki kursora.
yaml slo:
p95_latency_ms: 1200 success_rate: 0. 995 freshness_max: "PT5M"
privacy:
pii_allowed: false min_group_size: 20 quotas:
rps: 50 max_scanned_mb: 256
13) Formaty i kompresja
JSON dla kompatybilności; CSV - tylko dla małych i prostych eksportu.
Parkiet/strzałka - domyślnie dla dużych przesyłek.
Kompresja: gzip/zstd (negocjacje za pomocą 'Accept-Encoding').
Negocjacja treści: „Akceptuj: aplikacja/x-parkiet”.
14) Metryki jako API (Analytics/OLAP gateway)
Metryki najwyższego poziomu: GGR/NET, CR, hold, RG incydenty - jako zasoby z parametrami "marka, kraj, okno, grupa _ by '.
Approx (HLL/TDigest) мла distinct/percentiles.
Pamięć podręczna klucza: '(metryczny, params, snapshot_id)'.
15) Specyfika iGaming - gotowe punkty końcowe
"GET/v2/payments/metrics' - awarie/aktualizacje przez PSP/country/brand z oknami 7/30d.
"GET/v2/game-rounds/metrics' - najlepsze gry/dostawcy, czas trwania p95, okna RTP.
„GET/v2/rg/cases” - aktywne ograniczenia/samodzielne wyłączenia (agregaty k-anonimowe).
„POST/v1/features: get” (gRPC) - funkcje online do oceny oszustw/rekomendacji.
„POST/v1/webhooks/psp-alerts” - powiadomienia „wskaźnik spadku> próg”.
16) Przykłady umów
Zapytanie GraphQL cienki plasterek:graphql query {
payments(brand:"X", country:"TR", from:"2025-10-01", to:"2025-10-31", first:500) {
edges { node { day totalAmount declines psp } cursor }
pageInfo { hasNextPage endCursor }
}
}
Kafka (wydarzenie, Avro):
json
{"event_id":"...","occurred_at":169..., "brand":"X","psp":"Papara","status":"declined","amount":"100. 00","currency":"TRY"}
Lot strzałki (długopis):
/flight/v1/query? dataset=gold. payments&from=...&to=...&brand=X&format=arrow
17) Nowy proces publikowania interfejsów
1. ADR: Wydanie/Wartość/Klienci/Bezpieczeństwo/Koszt.
2. Kontrakt: schemat, filtry, limity, prywatność, SLO, wersje.
3. Modelowanie obciążenia: żądania top-N, p95/skanowanie bajtów, koszt.
4. Walidacja/pamięć podręczna/kwoty: domyślnie włączyć.
5. Dokumentacja i SDK: przykłady, limity, błędy, przekładki, idempotencja.
6. Canary:% klientów, testy regresji, alerty.
7. GA: Data Products wersja katalogowa, raport skutków.
18) Anty-wzory
Otwórz „surowy” SQL dla wszystkich - wycieki PII, nieprzewidywalny koszt.
OFFSET pagination i 'SELECT' - ból przez opóźnienie i liczenie.
GraphQL bez ograniczeń głębokości/kosztów.
REST, który zwraca zbyt wiele kolumn bez 'fields =...'.
Brak k-anonimowości i minimalnej wielkości grupy w kruszywach.
Zero kwot/limitów i pamięci podręcznej wyłączonej.
Brak wersji/kontraktów - „zrywamy” klientów z każdą zmianą.
Ten sam interfejs dla wszystkich krajów/marek jest lekceważeniem przepisów regionalnych.
19) Plan działania w zakresie wdrażania
0-30 dni (MVP)
1. Katalog produktów danych (metryki/plasterki) i ich kontrakty OpenAPI/GraphQL.
2. Brama SQL z RLS/CLS, k-anonimowość agregatów, kwoty podstawowe.
3. Jeden metryczny punkt końcowy REST ('/payments/metrics') + cache + pools 'bi _ hot/adhoc'.
4. gRPC Feature Store: czytanie 10-20 kluczowych funkcji online (p95 ≤ 80 ms).
30-90 dni
1. Interfejsy strumieniowe (Kafka/Webhook) dla wpisów PSP/zdarzeń gry.
2. Przesyłanie strzałek/parkietów z prezentowanego adresu URL; katalog migawek.
3. Federacja Gateway (Trino/Presto) z wyraźnymi zasadami.
4. Obserwowalność: deska rozdzielcza SLI/SLO, wpisy dotyczące kosztów/opóźnień/PII.
3-6 miesięcy
1. SDK (ΔScript/Python/Go) z przekładkami/idempotencją/kwotami.
2. Cienkie plasterki GraphQL dla produktów i partnerów.
3. Rozszerzenie gRPC/FS, negocjacje offlayn i onlayn; shadow → kanaryjskie wydania.
4. Audyt prywatności/DSAR; raporty dotyczące zgodności z przepisami.
20) RACI
Platforma danych (R): bramki, pamięć podręczna, kwoty, federacja, obserwacja.
Zarządzanie danymi (A/R): umowy, wersje, prywatność/k-anonimowość.
Właściciele domen (R): semantyka terenowa, niezmienne przedsiębiorstwa, produkty danych.
Bezpieczeństwo/DPO (A/R): AuthN/Z, Geo-izolacja, DSAR/Legal Hold.
SRE/Observability (C): SLO/SLI, alerty, pojemność.
Analityka/BI/DS (C): wymagania dotyczące form/kruszyw, SDK.
21) Sekcje powiązane
Analytical Storage Indexing, Analytical Query Optimization, Data Schemas and Evolution, Data Validation, Praktyki OPS, Analytics and Metrics API, Funkcja Store, Data Security and Encryption, Access Control, Data Retention Policies
Razem
Odpowiednio zaprojektowane interfejsy dostępu do danych zmieniają pamięć masową i wpływają na niezawodny „produkt”: przewidywalne SLA, kontrolowane koszty, zgodność z prywatnością oraz jeden język dla zespołów produktów, analityki, zgodności i partnerów. W iGaming oznacza to szybsze złapanie awarii PSP, zrozumienie zachowania gracza i spełnienie wymogów regulacyjnych - bez ręcznego przesyłania i nocnych migracji.