Logo GH

SDK diseño y soporte de idiomas

1) Objetivos de SDK y criterios de éxito

Experiencia del desarrollador (DX): API intuitivas, una sola semántica entre lenguajes.
Fiabilidad: temporizadores/retraídos/idempotencia «fuera de caja».
Seguridad: secretos, firmas, TLS, compatibilidad con entornos proksi/企业.
Observabilidad: registros, métricas, trazados en herramientas estándar para el lenguaje.
Economía: mínimo egresos/CPU, paginación efectiva, batches.
Estabilidad: semver estricto, compatibilidad inversa, ramas LTS.

2) Principios arquitectónicos

1. Thin client, strong contracts: envoltura SDK sobre el protocolo (NAT/gRPC), sin lógica de negocio oculta.
2. Surface unificado: los mismos conceptos (Client, Request, Response, Error, Paginator, WebhookVerifier).
3. Seguro por defecto: temporizadores razonables, retroceso exponencial + jitter, protección contra repeticiones.
4. Config layering: ENV → el archivo de configuración → el diseñador → los parámetros del método.
5. Transporte pluggable: HTTP/gRPC es intercambiable, compatible con proksi/池 conexiones.
6. Testability: interfaces/fake, dependency injection, record-replay.
7. I18n de error: máquina 'error _ code' estable; los mensajes son localizables.
8. Accesibilidad: opciones asíncronas (normalmente 'AsyncClient') donde corresponda.
9. Security-first: los secretos no caen en los registros, edición PII, criptotecas compatibles con FIPS si es necesario.

3) Cuadro de apoyo y paridad de oportunidades

IdiomaMini versiónModelo de ejecuciónPlataformas/distribuciónEstado
TypeScript/JavaScriptNode 18+async/awaitnpm (ESM+CJS), Deno, BunGA
Python3. 9+sync + aioPyPI (`sync`/`aio`), Wheels manylinuxGA
Java11+syncMaven Central, Android (opcional)GA
Go1. 21+sync (ctx)Go modulesGA
.NETnet6. 0+sync/asyncNuGetGA
PHP8. 1+syncComposerBeta
Ruby3. 0+syncRubyGemsBeta
💡 La paridad de la API se mide mediante una matriz autogenerada: lista de endpoints/fich, fecha de lanzamiento, "has parity? ».

4) Superficie básica de la API (modelo canónico)

Entidades comunes

Cliente: configuración de transporte, llaves, retrayas, telemetría hooks.
Request/Response: modelos/DTO típicos, paginación/cursores.
Error: una sola clase con 'status', 'error _ code', 'trace _ id', 'retriable'.
Paginator/Iterator: reposicionamiento perezoso de páginas/cursores.
WebhookVerifier: validación HMAC/mTLS, dedoup por 'event _ id'.

Mini ejemplo

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 ejemplo (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) Configuración y entorno de ejecución

ENV: `GH_API_KEY`, `GH_ENDPOINT`, `GH_TIMEOUT_MS`, `HTTP_PROXY/HTTPS_PROXY`, `GH_REGION`.
Constructor: anula ENV.
Por-call overrides: tiempo de espera/retrés a nivel de método.
TLS/mTLS: ruta de acceso al certificado/clave, pinning CA si es necesario.
Grupos de conexiones: keep-alive, HTTP/2, limitación de paralelismo.

6) Seguridad fuera de caja

Secretos: no lógica, ocultar en stack traces; redaction ``.
Firmas: HMAC para webhooks, 'X-Key-Id '/rotación de claves, soporte para «dos claves» active/next.
Idempotencia: instalación transparente de 'Idempotency-Key' para operaciones de escritura (reinicio seguro).
RBAC/Scopes: listas/constantes convenientes para scopes.
Política PII: interfaces de edición estándar durante la lógica.

7) Confiabilidad: temporizadores, retraídos, back-off

Tiempo de espera predeterminado: 10-15s; connect 3-5s.
Retrés: para 5xx/408/429 (respetar 'Retry-After'), retroceso exponencial + jitter, límite de intento/tiempo.
Circuit-breaker: opcional en SDK (o recomendaciones sobre libs de terceros).
Escritura idempotente: repetición automática por clave; colisiones → elevar '409 IDEMP_REPLAY'.

8) Paginación, cursores y streaming

Cursor/iterador: superación perezosa, repeticiones automáticas en errores transitorios.
Keyset-paginación: ordenamiento estable '(updated_at,id)'.
Backpressure: límite de consultas simultáneas; в async-SDK — `async for`/`channels`.
Streaming (donde está disponible): SSE/WebSocket/gRPC-stream con auto-reconnect y dedoop por 'sequence'.

9) Errores y contrato

Jerarquía única:
  • `ApiError` (базовый) → подтипы: `AuthError(401)`, `PermissionError(403)`, `NotFound(404)`, `Conflict(409)`, `RateLimit(429)`, `ValidationError(422)`, `ServerError(5xx)`.
  • Свойства: `status`, `error_code`, `message`, `trace_id`, `retriable`, `details`.
  • Mejor práctica: los mensajes son humanos, 'error _ code' es estable.

10) Idiomas lingüísticos

TypeScript/JS

Promise-based + generadores para la paginación; ESM + paquetes CJS.
Tree-shaking, polífilos mínimos, señales abort ('AbortController').

Python

Sync + Async (aiohttp/http), gestores de contexto, modelos 'pydantic' (o dataclasses).
Wheels для linux/macos/windows; apoyo proxies/NO_PROXY.

Java

'CompletableFuture' (por necesidad), 'AutoCloseable', 'Duration', 'Executor'.
HTTP client: `java. net. http 'o OkHttp; SLF4J para los registros.

Go

Contextos 'context. Context`, `http. Client 'con transporte tuned, interfaces para pruebas.
Error wrapping (`fmt. Errorf («% w», err) '), semántica de errores sentinel.

.NET

`HttpClientFactory`, `CancellationToken`, `IAsyncEnumerable<T>`.
Políticas Polly (retry/circuit-breaker).

... etc. para PHP/Ruby (PSR-18, Faraday/Net:: HTTP).

11) Lógica, métricas, rastreo

Registros: niveles (ERROR/WARN/INFO/DEBUG), correlación 'trace _ id', desactivación de datos sensibles.
Метрики: `requests_total`, `errors_total{status}`, `retry_count`, `latency_ms`, `throttled_total`.
Tracks: OpenTelemetry hooks (span a la llamada API, atributos endpoint, status, retry).
Debug-mode: variable de entorno 'GH _ SDK _ DEBUG = 1' - imprimir encabezados HTTP (sin secretos) y tiempos.

12) Documentación y ejemplos

Quickstart 5 minutos: auth, primera solicitud, paginación, procesamiento 429.
Cookbook: webhooks (verificación de firma), escritura idempotente, réplica.
Referencia API: autógeno de OpenAPI/Protobuf, pero con ejemplos «manuales».
Snippets: piezas de código terminadas para tareas populares (Python/TS/Java/Go/.NET).

13) Generación vs codificación manual

Enfoque combinado: codegen (modelos/clientes) + «plumas» manuales para ergonomía/idempotencia/paginadores.
Plantillas: nombres únicos de métodos ('create/get/list/update/delete'). firmas.
Comprobación de la «compatibilidad diff» después del regen (puerta CI).

14) Versificación, compatibilidad y depreciación

SemVer: X.Y.Z. Rompiendo - sólo mayor.
Política de estabilidad: versiones menores: agrega campos/métodos, no cambia los contratos.
Deprecation: anotaciones/atributos @ Deprecated/Obsolete, advertencias en rantime una vez por proceso, ventana ≥ 90 días.
Ramas LTS: backport de criticas (sin nuevos fichas).

15) Lanzamientos y cadena de suministro

CI/CD: linternas/formateadores, unit + integración, pruebas de contrato, e2e vs sandbox.
Firma de artefactos: Sigstore/GPG, checksums en lanzamientos.
Publicación: npm/PyPI/Maven/NuGet/Go/Composer/RubyGems con notas changelog y release.
SemVer gate: verificación automática de la compatibilidad de la API pública (por ejemplo, 'apiregistry diff').

16) Pruebas (matriz de calidad)

Unidad: modelos, serialización, validación, retraídas/timeouts.
Contrato: contra los esquemas OpenAPI/Protobuf (casos negative/edge).
Integración: contra sandbox (idempotencia, 429/5xx, webhooks).
Load/soak: paginación/stream, retroceso.
Fuzz: campos/encabezados/límites de tiempo.
Compat: los antiguos SDK ↔ las nuevas API y viceversa.
Smoke-pack: 5 minutos para coger una regresión en CI.

17) Políticas de telemetría y privacidad

Opcional-opt-in: recopilar métricas SDK agregadas (versión, idioma, estados) sin PII.
Configuración: 'telemetry: off' anonymized 'full' (por defecto off/anonymized).
Transparencia: documentar qué y por qué se recoge; vamos a marcar la casilla de desactivación.

18) Rendimiento y FinOps

Batching: combinar consultas pequeñas; limitar RPS; gzip/br.
Almacenamiento en caché ETag/If-None-Match, GET condicionales.
Modelos económicos: iteradores perezosos en lugar de cargar todo en la memoria.
Paralelismo con el límite: 'max _ concurrency' para que no sea 'DDOSit' la API.

19) Componentes tipo SDK (esqueletos)

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

Paginador

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) Apoyo, SLA y comunidad

SLA por SDK: errores críticos - fix ETA, canales de comunicación, matriz de compatibilidad (SDK↔API).
Issue templates: bug/feature/question, auto-triage por idioma/versión.
Roadmap/labels: «good first issue», «help wanted».
Security policy: `SECURITY. md ', canal para informes de vulnerabilidad, CVE si es necesario.

21) Lista de verificación de calidad SDK

  • Un único error de modelo ('status', 'error _ code', 'trace _ id', 'retriable').
  • Taimaouts/retraie/jitter, respeto 'Retry-After'.
  • Idempotencia write, automática 'Idempotency-Key'.
  • Paginación con cursor, iteradores/streams perezosos.
  • WebhookVerifier con HMAC/mTLS y dedoop.
  • Configuración a través de ENV/constructor/parámetros.
  • Lógica/métricas/OTel-hooks, modo debug sin secretos.
  • SemVer, deprecaciones ≥90 días, ramas LTS.
  • Ejemplos completos y Cookbook sobre tareas populares.
  • Matriz de paridad fich entre lenguas en CI.

22) Plan de implementación (3 iteraciones)

1. MVP (2-3 semanas): cliente básico, auth, 3-5 endpoints clave, paginación, modelo de error único, retraídas/timeouts; TS+Python.
2. Escala (3-5 semanas): Java/Go/.NET, WebhookVerifier, idempotencia write, telemetría hooks, generación de modelos a partir de OpenAPI.
3. Pro (ininterrumpidamente): streaming/SSE/gRPC, optimización perf, rama LTS, Cookbook avanzado, herramientas de migración/deprecación.

23) Mini preguntas frecuentes

¿Generar todo o escribir con las manos?
Genere modelos/clientes, y ergonómicos (paginadores, retraídos, idempotencia, firmas convenientes) - manualmente.

¿Necesita async-SDK separado?
В Python — да (`AsyncClient`); en JS - predeterminado; v.NET/Java - Llamadas asíncronas siempre que sea posible.

¿Cómo mantener la paridad de idiomas?
Matrix fich en CI, lanzamientos «por cinturones» (TS→Py→Java→Go→.NET) con un auto-reporting «que se queda atrás».

Resultado

Un SDK fuerte es una superficie única, impagos fiables y contratos predecibles, los mismos en todos los idiomas. Dale a los desarrolladores una configuración segura, un modelo de error claro, una paginación conveniente y la verificación de webhooks, completa esto con documentación de calidad y un semver riguroso. Entonces las integraciones serán rápidas, el soporte será barato y el ecosistema sostenible y escalable.

Contact

Póngase en contacto

Escríbanos ante cualquier duda o necesidad de soporte.¡Siempre estamos listos para ayudarle!

Telegram
@Gamble_GC
Iniciar integración

El Email es obligatorio. Telegram o WhatsApp — opcionales.

Su nombre opcional
Email opcional
Asunto opcional
Mensaje opcional
Telegram opcional
@
Si indica Telegram, también le responderemos allí además del Email.
WhatsApp opcional
Formato: +código de país y número (por ejemplo, +34XXXXXXXXX).

Al hacer clic en el botón, usted acepta el tratamiento de sus datos.