Logo GH

SDK дизайн и поддержка языков

1) Цели SDK и критерии успеха

Developer Experience (DX): интуитивные API, единая семантика между языками.
Надежность: таймауты/ретраи/идемпотентность «из коробки».
Безопасность: секреты, подписи, TLS, совместимость с прокси/企业 средами.
Наблюдаемость: логи, метрики, трассы в стандартных для языка инструментах.
Экономика: минимум egress/CPU, эффективная пагинация, батчи.
Стабильность: строгий semver, обратная совместимость, LTS-ветки.

2) Архитектурные принципы

1. Thin client, strong contracts: SDK обертка над протоколом (REST/gRPC), без скрытой бизнес-логики.
2. Unified surface: одинаковые понятия (Client, Request, Response, Error, Paginator, WebhookVerifier).
3. Safe by default: разумные таймауты, экспоненциальный backoff + jitter, защита от повторов.
4. Config layering: ENV → конфиг-файл → конструктор → параметры метода.
5. Pluggable transport: HTTP/gRPC сменяемы, совместимы с прокси/池 соединений.
6. Testability: интерфейсы/фейки, dependency injection, record-replay.
7. I18n ошибок: машинный `error_code` стабилен; сообщения локализуемы.
8. Accessibility: асинхронные варианты (обычно `AsyncClient`) там, где это уместно.
9. Security-first: секреты не попадают в логи, PII-редакция, FIPS-совместимые криптобиблиотеки при необходимости.

3) Таблица поддержки и паритет возможностей

ЯзыкМини-версияМодель исполненияПлатформы/дистрибуцияСтатус
TypeScript/JavaScriptNode 18+async/awaitnpm (ESM+CJS), Deno, BunGA
Python3.9+sync + aioPyPI (`sync`/`aio`), Wheels manylinuxGA
Java11+syncMaven Central, Android (опционально)GA
Go1.21+sync (ctx)Go modulesGA
.NETnet6.0+sync/asyncNuGetGA
PHP8.1+syncComposerBeta
Ruby3.0+syncRubyGemsBeta
💡 Паритет API измеряется автогенерируемой матрицей: список эндпоинтов/фич, дата релиза, «has parity?».

4) Базовая поверхность API (каноническая модель)

Общие сущности

Client: настройка транспорта, ключей, ретраев, telemetry hooks.
Request/Response: типобезопасные модели/DTO, пагинация/курсоры.
Error: единый класс с `status`, `error_code`, `trace_id`, `retriable`.
Paginator/Iterator: ленивый перебор страниц/курсоров.
WebhookVerifier: проверка HMAC/mTLS, дедуп по `event_id`.

Мини-пример (TypeScript)

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 })) { /... / }

Мини-пример (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) Конфигурация и среда выполнения

ENV: `GH_API_KEY`, `GH_ENDPOINT`, `GH_TIMEOUT_MS`, `HTTP_PROXY/HTTPS_PROXY`, `GH_REGION`.
Конструктор: переопределяет ENV.
Per-call overrides: таймаут/ретраи на уровне метода.
TLS/mTLS: путь к сертификату/ключу, pinning CA при необходимости.
Пулы соединений: keep-alive, HTTP/2, ограничение параллелизма.

6) Безопасность из коробки

Секреты: не логировать, скрывать в stack traces; redaction ``.
Подписи: HMAC для вебхуков, `X-Key-Id`/ротация ключей, поддержка «двух ключей» active/next.
Идемпотентность: прозрачная установка `Idempotency-Key` для write-операций (перезапуск безопасен).
RBAC/Scopes: удобные перечисления/константы для скоупов.
PII-политика: стандартные интерфейсы редактирования при логировании.

7) Надежность: таймауты, ретраи, бэк-офф

Таймаут по умолчанию: 10–15с; коннект 3–5с.
Ретраи: для 5xx/408/429 (уважать `Retry-After`), экспоненциальный backoff + jitter, предел попыток/времени.
Circuit-breaker: опционально в SDK (или рекомендации по сторонним либам).
Идемпотентные write: автоматический повтор по ключу; коллизии → поднять `409 IDEMP_REPLAY`.

8) Пагинация, курсоры и стриминг

Курсор/итератор: ленивый перебор, авто-повторы при транзиентных ошибках.
Keyset-пагинация: стабильное упорядочивание `(updated_at,id)`.
Backpressure: лимит одновременных запросов; в async-SDK — `async for`/`channels`.
Стриминг (где доступно): SSE/WebSocket/gRPC-stream с авто-reconnect и дедупом по `sequence`.

9) Ошибки и контракт

Единая иерархия:
  • `ApiError` (базовый) → подтипы: `AuthError(401)`, `PermissionError(403)`, `NotFound(404)`, `Conflict(409)`, `RateLimit(429)`, `ValidationError(422)`, `ServerError(5xx)`.
  • Свойства: `status`, `error_code`, `message`, `trace_id`, `retriable`, `details`.
  • Best practice: сообщения — человекочитаемые, `error_code` — стабильный.

10) Языковые идиомы

TypeScript/JS

Promise-based + генераторы для пагинации; ESM+CJS пакеты.
Tree-shaking, минимальные полифилы, abort-сигналы (`AbortController`).

Python

Sync + Async (aiohttp/httpx), контекст-менеджеры, `pydantic` модели (или dataclasses).
Wheels для linux/macos/windows; поддержка proxies/NO_PROXY.

Java

`CompletableFuture` (по необходимости), `AutoCloseable`, `Duration`, `Executor`.
HTTP client: `java.net.http` или OkHttp; SLF4J для логов.

Go

Контексты `context.Context`, `http.Client` с tuned Transport, интерфейсы для тестов.
Error wrapping (`fmt.Errorf("%w", err)`), семантика sentinel ошибок.

.NET

`HttpClientFactory`, `CancellationToken`, `IAsyncEnumerable<T>`.
Политики Polly (retry/circuit-breaker).

…и т. д. для PHP/Ruby (PSR-18, Faraday/Net::HTTP).

11) Логирование, метрики, трассировка

Логи: уровни (ERROR/WARN/INFO/DEBUG), корелляция `trace_id`, отключение чувствительных данных.
Метрики: `requests_total`, `errors_total{status}`, `retry_count`, `latency_ms`, `throttled_total`.
Трассы: OpenTelemetry hooks (span на вызов API, атрибуты endpoint, status, retry).
Debug-mode: переменная среды `GH_SDK_DEBUG=1` — печать HTTP заголовков (без секретов) и времен.

12) Документация и примеры

Quickstart 5 минут: auth, первый запрос, пагинация, обработка 429.
Cookbook: вебхуки (проверка подписи), идемпотентный write, реплей.
Справочник API: автоген из OpenAPI/Protobuf, но с «ручными» примерами.
Snippets: готовые куски кода для популярных задач (Python/TS/Java/Go/.NET).

13) Генерация vs ручное кодирование

Комбинированный подход: codegen (модели/клиенты) + ручные «ручки» для ergonomics/идемпотентности/пагинаторов.
Шаблоны: единые названия методов (`create/get/list/update/delete`), стаб. сигнатуры.
Проверка «diff-совместимости» после регена (CI-гейт).

14) Версионирование, совместимость и депрекации

SemVer: X.Y.Z. Ломающее — только major.
Политика стабильности: минорные релизы — добавляют поля/методы, не меняют контракты.
Deprecation: аннотации/атрибуты @Deprecated/Obsolete, предупреждения в рантайме один раз за процесс, окно ≥ 90 дней.
LTS-ветки: backport критфиксов (без новых фич).

15) Релизы и цепочка поставки

CI/CD: линтеры/форматтеры, unit+integration, контракт-тесты, e2e против песочницы.
Подпись артефактов: Sigstore/GPG, checksums на релизах.
Публикация: npm/PyPI/Maven/NuGet/Go/Composer/RubyGems с changelog и release notes.
SemVer gate: авто-проверка совместимости публичного API (например, `apiregistry diff`).

16) Тестирование (матрица качества)

Unit: модели, сериализация, валидация, ретраи/таймауты.
Contract: против OpenAPI/Protobuf схем (negative/edge cases).
Integration: против sandbox (идемпотентность, 429/5xx, webhooks).
Load/soak: пагинация/стрим, backpressure.
Fuzz: поля/заголовки/границы времени.
Compat: старые SDK ↔ новые API и наоборот.
Smoke-pack: 5 минут, чтобы поймать регресс в CI.

17) Политики телеметрии и приватности

Опционально-opt-in: сбор агрегированных метрик SDK (версия, язык, статусы) без PII.
Конфиг: `telemetry: off|anonymized|full` (по умолчанию off/anonymized).
Прозрачность: документируйте, что и зачем собирается; давайте флажок отключения.

18) Производительность и ФинОпс

Batching: объединять мелкие запросы; лимитировать RPS; gzip/br.
Кэширование ETag/If-None-Match, условные GET.
Экономичные модели: ленивые итераторы вместо загрузки всего в память.
Параллелизм с лимитом: `max_concurrency`, чтобы не «DDOSить» API.

19) Типовые компоненты SDK (скелеты)

Error (TypeScript)

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}`); }
}

Пагинатор (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) Поддержка, SLA и сообщество

SLA по SDK: критические баги — fix ETA, каналы связи, матрица совместимости (SDK↔API).
Issue templates: bug/feature/question, auto-triage по языку/версии.
Roadmap/labels: «good first issue», «help wanted».
Security policy: `SECURITY.md`, канал для отчетов об уязвимостях, CVE при необходимости.

21) Чек-лист качества SDK

  • Единая ошибка-модель (`status`,`error_code`,`trace_id`,`retriable`).
  • Таймауты/ретраи/jitter, уважение `Retry-After`.
  • Идемпотентность write, автоматический `Idempotency-Key`.
  • Пагинация курсором, ленивые итераторы/стримы.
  • WebhookVerifier с HMAC/mTLS и дедупом.
  • Конфигурация через ENV/конструктор/параметры.
  • Логирование/метрики/OTel-хуки, debug-режим без секретов.
  • SemVer, депрекации ≥90 дней, LTS-ветки.
  • Полные примеры и Cookbook по популярным задачам.
  • Матрица паритета фич между языками в CI.

22) План внедрения (3 итерации)

1. MVP (2–3 недели): базовый Client, auth, 3–5 ключевых эндпоинтов, пагинация, единая ошибка-модель, ретраи/таймауты; TS+Python.
2. Scale (3–5 недель): Java/Go/.NET, WebhookVerifier, идемпотентность write, телеметрия hooks, генерация моделей из OpenAPI.
3. Pro (непрерывно): стриминг/SSE/gRPC, perf-оптимизации, LTS-ветки, расширенный Cookbook, инструменты миграций/депрекаций.

23) Мини-FAQ

Генерировать все или писать руками?
Генерируйте модели/клиентов, а ergonomics (пагинаторы, ретраи, идемпотентность, удобные сигнатуры) — вручную.

Нужен ли отдельный async-SDK?
В Python — да (`AsyncClient`); в JS — по умолчанию; в.NET/Java — асинхронные вызовы по возможности.

Как держать паритет языков?
Матрица фич в CI, релизы «по пояскам» (TS→Py→Java→Go→.NET) с авто-репортом «что отстает».

Итог

Сильный SDK — это единая поверхность, надежные дефолты и предсказуемые контракты, одинаковые во всех языках. Дайте разработчикам безопасные настройки «из коробки», понятную ошибку-модель, удобную пагинацию и верификацию вебхуков, завершите это качественной документацией и строгим semver. Тогда интеграции будут быстрыми, поддержка — дешевой, а экосистема — устойчивой и масштабируемой.

Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Telegram
@Gamble_GC
Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

Нажимая кнопку, вы соглашаетесь на обработку данных.