Logo GH

Projekt SDK i wsparcie językowe

1) Cele SDK i kryteria sukcesu

Developer Experience (DX): intuicyjne interfejsy API, jednolite semantyki między językami.
Niezawodność: timeouts/retreats/idempotence out of the box.
Bezpieczeństwo: tajemnice, podpisy, TLS, kompatybilność z proksi/企业 środowiskami.
Obserwowalność: dzienniki, mierniki, ślady w standardowych narzędziach dla języka.
Gospodarka: minimalne wyjście/procesor, efektywna paginacja, partie.
Stabilność: ścisły semver, kompatybilność wsteczna, gałęzie LTS.

2) Zasady architektoniczne

1. Cienki klient, silne kontrakty: SDK wrapper over protocol (REST/gRPC), bez ukrytej logiki biznesowej.
2. Jednolita powierzchnia: te same koncepcje (klient, żądanie, odpowiedź, błąd, Paginator, WebhookVerifier).
3. Domyślnie bezpieczne: rozsądne czasy, wykładnicze backoff + jitter, ochrona przed powtarzaniem.
4. Warstwa konfiguracyjna: WG → plik config → konstruktor → parametry metody.
5. Transport wtykowy: HTTP/gRPC jest wymienny, kompatybilny z połączeniem proksi/odtwarzacz.
6. Testability: interfejsy/podróbki, wtrysk zależności, rekord-replay.
7. Błąd I18n: machine 'error _ code' jest stabilny; wiadomości są lokalizowane.
8. Dostępność: warianty asynchroniczne (zwykle „AsyncClient”) w stosownych przypadkach.
9. Security-first: sekrety nie wchodzą w rejestry, wydanie PII, biblioteki kryptograficzne kompatybilne z FIPS w razie potrzeby.

3) Wsparcie parytetu tabeli i okazji

JęzykMini-wersjaModel wykonaniaPlatformy/dystrybucjaStatus
Skrypt/JavaScriptWęzeł 18 +async/czekaćnpm (ESM + CJS), Deno, BunGA
Python3. 9+synchronizacja + aioPyPI ("sync'/" aio"), manylinuks kółGA
Java11+synchronizacjaMaven Central, Android (opcjonalnie)GA
Idź dalej1. 21+synchronizacja (ctx)Przejdź do modułówGA
.NETnet6. 0+synchronizacja/asyncNuGetGA
PHP8. 1+synchronizacjaKompozytorBeta
Rubin3. 0+synchronizacjaRubyGemsBeta
💡 Parytet API jest mierzony przez matrycę autogenerowaną: lista/funkcja punktu końcowego, data wydania ", ma parytet? ».

4) powierzchnia bazowa API (model kanoniczny)

Wspólne podmioty

Klient: konfiguracja transportu, klucze, przekaźniki, haki telemetryczne.
Zapytanie/Odpowiedź: modele bezpieczne/DTO, paginacja/kursory.
Błąd: pojedyncza klasa z 'status', 'error _ code', 'trace _ id',' retriable '.
Paginator/Iterator: leniwe wyszukiwanie stron/kursorów.
WebhookVerifier: HMAC/mTLS check, dedup by 'event _ id'.

Mini Example (ΔScript)

ts const client = new GambleHubClient({
apiKey: process. env. GH_API_KEY!,
timeoutMs: 10_000,
retries: { max: 5, strategy: "expo-jitter" }
});

const { items, nextCursor } = await client. reports. list({ from, to, cursor });
for await (const report of client. reports. iter({ from, to })) { /... / }

Mini-przykład (Python, async)

py from gamblehub import AsyncClient, WebhookVerifier

client = AsyncClient(api_key=API_KEY, timeout=10, retries={"max":5})
async for user in client. users. iter(updated_after=ts):
...

verifier = WebhookVerifier(secret=WEBHOOK_SECRET)
if verifier. verify(headers, body): ack()

5) Konfiguracja i czas trwania

•: 'GH _ API _ KEY', 'GH _ ENDPOINT', 'GH _ TIMEOUT _ MS', 'HTTP _ PROXY/HTTPS _ PROXY', 'GH _ REGION'.

Konstruktor-Nadjeżdża

Overrides per-call: timeout/retray na poziomie metody.
TLS/mTLS: ścieżka do certyfikatu/klucza, w razie potrzeby przypinanie urzędu certyfikacji.
Baseny połączeń: utrzymać przy życiu, HTTP/2, ograniczenia współistnienia.

6) Bezpieczeństwo poza pudełkiem

Sekrety: nie zaloguj się, ukryj ślady stosu; redakcja ".
Podpisy: HMAC dla webhooks, 'X-Key-Id'/key rotation, wsparcie dla' two keys 'active/next.
Idempotencja: przejrzyste ustawienie 'Idempotence-Key' dla operacji zapisu (ponowne uruchomienie jest bezpieczne).
RBAC/Scopes: wygodne numery/stałe dla zakresów.
Polityka PII: standardowe interfejsy edycji do rejestrowania.

7) Niezawodność: Timeouts, Retreats, Backs

Domyślny czas: 10-15s; połączenie 3-5s.
Retrai: dla 5xx/408/429 (szacunek 'Retry-After'), wykładniczy backoff + jitter, termin retry/time.
Wyłącznik-wyłącznik: opcjonalny w SDK (lub zalecenia osób trzecich).

Idempotent write: automatyczne powtarzanie przez klucz; kolizje → podnieść '409. IDEMP_REPLAY'

8) Paginacja, kursory i strumieniowe

Kursor/iterator: leniwa siła brutalna, automatyczne powtarzanie błędów przejściowych.
Paginacja keyset: stabilne zamawianie '(updated_at,id)'.
Backpressure: limit jednoczesnych żądań; мasync-SDK - 'async dla '/' kanałów'.
Streaming (o ile jest dostępny): SSE/WebSocket/gRPC-stream z automatycznym ponownym połączeniem i deduplikacją przez „sekwencję”.

9) Błędy i umowa

Pojedyncza hierarchia:
  • „ApiError” (бабова) → бодтива: „AuthError (401)”, „PerError (403)”, „Nota znaleziona (404)”, „Konflikt (409)”, „Na granicy (429)”, „WalidacjError (422)”, „ServerError (5xx)”.
  • Своства: 'status', 'error _ code', 'message', 'trace _ id',' retriable ',' details '.
  • Najlepsza praktyka: wiadomości są czytelne dla ludzi, „error _ code” jest stabilny.

10) Idioms językowe

Skrypt/JS

Generatory obietnic + dla paginacji; Pakiety ESM + CJS.
Trzęsące się drzewa, minimalne polifile, sygnały przerywania ciąży („AbortController”).

Python

Synchronizator + async (aiohttp/httpx), menedżery kontekstowe, modele „pydantyczne” (lub lasery danych).
Koła дла linux/macos/windows; Wsparcie proxies/NO_PROXY.

Java

„ Future” (w razie potrzeby), „AutoCloseable”, „Duration”, „Executor”.
Klient HTTP: 'java. netto. http 'lub OkHttp; SLF4J do dzienników.

Idź

Kontekst kontekstu. Kontekst „,” http. Klient 'z tuned Transport, interfejsy do testów.
Pakowanie błędów ('fmt. Błąd („% w”, err) '), semantyka wskaźnikowa błędów.

.NET

' ClientFactory', 'CancellationToken', 'IASyncEnumerable <T>'.
Polly policies (retry/circuit-breaker).

... itp. dla PHP/Ruby (PSR-18, Faraday/Net:: HTTP).

11) Wyrąb, mierniki, odwzorowanie

Dzienniki: poziomy (ERROR/WARN/INFO/DEBUG), korelacja 'trace _ id', wyłączanie danych wrażliwych.
Метрика: 'requests _ total', 'errors _ total {status}', 'retry _ count',' latency _ ms ',' throttled _ total '.
Traces: OpenTelemetry haki (rozpiętość do wywołania API, punkt końcowy, status, atrybuty retry).
Tryb debugowania: zmienna środowiskowa 'GH _ SDK _ DEBUG = 1' - drukowanie nagłówków HTTP (bez tajemnic) i czasów.

12) Dokumentacja i przykłady

Szybkie uruchomienie 5 minut: auth, pierwsze żądanie, paginacja, przetwarzanie 429.
Książka kucharska: haki internetowe (weryfikacja podpisu), idempotent napisać, powtórzyć.
Odniesienie API: Autogen z OpenAPI/Protobuf, ale z przykładami „ręcznymi”.
Snippets: gotowe kawałki kodu dla popularnych zadań (Python/TS/Java/Go/.NET).

13) Generacja vs ręczny kodowanie

Podejście połączone: kodegen (modele/klienci) + ręczne „długopisy” dla ergonomii/idempotencji/paginatorów.
Szablony: jednolite nazwy metod ('create/get/list/update/delete'), stab. podpisy.
Sprawdzanie „dyflikacji” po regenie (CI-gate).

14) Wersioning, kompatybilność i depresje

SemVer: X.Y.Z. Breaking - tylko major.
Polityka stabilności: drobne wydania - dodawanie pól/metod, nie zmienianie umów.
Deprecation: adnotacje/atrybuty @ Deprecated/Obsolete, ostrzeżenia runtime raz na proces, okno ≥ 90 dni.
Gałęzie LTS: backport krytyki (brak nowych funkcji).

15) Wydania i łańcucha dostaw

CI/CD: linters/formatters, unit + integration, contract tests, e2e vs. sandbox.
Podpis artefaktowy: Sigstore/GPG, czeki na wydania.
Publikacja: npm/PyPI/Maven/NuGet/Go/Composer/RubyGems with changelog and release notes.
Brama SemVer: automatyczne sprawdzanie zgodności publicznego API (na przykład „apiregistry diff”).

16) Badanie (matryca jakości)

Jednostka: modele, serializacja, walidacja, przekłady/timeouts.
Kontrakt: przeciwko systemom OpenAPI/Protobuf (przypadki negatywne/krawędziowe).
Integracja: kontra piaskownica (idempotencja, 429/5xx, haki internetowe).
Obciążenie/moczenie: paginacja/strumień, ciśnienie wsteczne.
Fuzz: pola/nagłówki/granice czasowe.
Compat - stare SDKs i na odwrót nowe API.
Opakowanie dymne: 5 minut, aby złapać regresję w CI.

17) Polityka telemetrii i prywatności

Opcjonalnie opt-in: zbiór zagregowanych mierników SDK (wersja, język, statusy) bez PII.
Config: 'telemetry: off' anonimowy 'full' (domyślnie jest wyłączony/anonimowy).
Przejrzystość: Udokumentuj, co się stanie i dlaczego; Sprawdźmy pole odłączenia.

18) Wydajność i FinOp

Dozowanie: połączyć małe zapytania; limit RPS; gzip/br.
ETag/If-None-Match buforowanie, warunkowe GET.
Ekonomiczne modele: leniwe iteratory zamiast ładować wszystko do pamięci.
Równoczesność z limitem: 'max _ concurrency', aby nie „DDOS” API.

19) Typowe elementy SDK (szkielety)

Błąd (ΔScript)

ts export class ApiError extends Error {
constructor(
readonly status: number,
readonly errorCode: string,
readonly traceId?: string,
readonly retriable?: boolean,
readonly details?: unknown
) { super(`${status} ${errorCode}`); }
}

Paginator (Python)

py class Paginator(Generic[T]):
def __init__(self, fetch_page):
self._fetch = fetch_page self._cursor = None async def __aiter__(self):
while True:
page = await self._fetch(self._cursor)
for item in page. items:
yield item if not page. has_more: break self._cursor = page. next_cursor

WebhookVerifier (Go)

go func Verify(body []byte, signatureHeader, secret string) bool {
parts:= strings. SplitN(signatureHeader, "=", 2)
mac:= hmac. New(sha256. New, []byte(secret))
mac. Write(body)
expected:= base64. StdEncoding. EncodeToString(mac. Sum(nil))
return hmac. Equal([]byte(parts[1]), []byte(expected))
}

20) Wsparcie, SLA i Wspólnota

SLA przez SDK: błędy krytyczne - naprawić ETA, kanały komunikacyjne, matryca kompatybilności (SDK i API).
Szablony emisji: błąd/funkcja/pytanie, auto-triage według języka/wersji.
Plan działania/etykiety: „dobry pierwszy numer”, „pomoc”.
Polityka bezpieczeństwa: "BEZPIECZEŃSTWO. md', kanał zgłaszania luk, w razie potrzeby CVE.

21) Lista kontrolna jakości SDK

  • Błąd jednego modelu ("status", "error _ code", "trace _ id'," retriable ").
  • Timeouts/retreats/jitter, szacunek dla 'Retry-After'.
  • Idempotence write, automatyczne 'Idempotence-Key'.
  • Paginacja kursora, leniwe iteratory/strumienie.
  • WebhookVerifier z HMAC/mTLS i deduplication.
  • Konfiguracja za pomocą parametrów/konstruktora.
  • Logowanie/metryki/haki OTel, tryb debugowania bez tajemnic.
  • SemVer, zmniejszenie o ≥ 90 dni, oddziały LTS.
  • Kompletne przykłady i Książka kucharska na popularnych zadań.
  • Macierz parytetu funkcji między językami w CI.

22) Plan realizacji (3 iteracje)

1. MVP (2-3 tygodnie): podstawowy klient, auth, 3-5 kluczowych punktów końcowych, paginacja, pojedynczy model błędu, retrai/timeouts; TS + Python.
2. Skala (3-5 tygodni): Java/Go/.NET, WebhookVerifier, pisanie idempotencji, haki telemetryczne, generowanie modeli z OpenAPI.
3. Pro (continuous): streaming/SSE/gRPC, optymalizacja perf, oddziały LTS, rozszerzona książka kucharska, narzędzia migracji/redukcji.

23) Mini-FAQ

Generować wszystko czy pisać rękami?
Generowanie modeli/klientów i ergonomii (paginatory, przekładki, idempotencja, wygodne podpisy) - ręcznie.

Czy potrzebuję osobnego async-SDK?
МаТРА („AsyncClient”); w JS - domyślnie; v.NET/Java - rozmowy asynchroniczne, jeśli to możliwe.

Jak zachować parytet języków?
Matrix funkcja w CI, wydania „przez pasy” (TS → Py → Java → Go → .NET) z auto-raport „, że pozostaje za”.

Razem

Silny SDK to pojedyncza powierzchnia, niezawodne domyślne i przewidywalne umowy, które są takie same we wszystkich językach. Daj programistom bezpieczne ustawienia poza pudełkiem, zrozumiały model błędu, wygodną paginację i weryfikację haków webowych, uzupełnij to o wysokiej jakości dokumentację i ścisły semver. Wtedy integracje będą szybkie, wsparcie tanie, a ekosystem zrównoważony i skalowalny.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Telegram
@Gamble_GC
Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.