GH GambleHub

Compatibilidad de API y actualizaciones

1) Principios básicos de interoperabilidad

Additive-first: añadir uno nuevo sin romper el antiguo (nuevos campos/endpoints opcionales, nuevos valores enum).
Contratos estables: «lo prometido en la especificación es lo que funciona»; el comportamiento está documentado.
Backward> Forward: prioridad de compatibilidad retroactiva; forward está permitido a través de tolerant-readers.
Los documentos son primarios: la única fuente de verdad es la versión del esquema en el registro (OpenAPI/AsyncAPI/Proto).
Una clara evolución: el breaking es solo a través de la nueva versión mayor y guía migratoria.

2) Taxonomía de cambios

2. 1 Compatible (MINOR/PATCH)

Añadir campos/headers opcionales, nuevos endpoints, parámetros de query con impagos.
Aumentar los límites ('page _ size', TTL), aclarar errores sin cambiar códigos/semántica.
Agregar valores de enum si los clientes ignoran los «desconocidos» (tolerant-reader).

2. 2 Ambiguos (Behavioral)

Cambiar los impagos, el orden de clasificación, los temporizadores sutiles, las cuotas... puede «romper» la lógica empresarial. Requiere RFC + anuncio y Canarias.

2. 3 Rompiendo (MAYOR)

Cambio de nombre/eliminación de campos, cambio de tipo/formato, sustitución de códigos de error, incompatibilidad inversa de contratos/esquemas de autenticación.

3) Política de versionamiento

Estrategia: 'path versioning' ('/v1 ', '/v2').
Menor/parche: «añadir, no romper».
Encabezados fechados (dop.): 'X-API-Version-Date' para cambios graduales suaves.
Tipos de medios (ops.) : `Accept: application/vnd. acme. v1 + json 'para granulación fina.

4) Depresiones y sunset

4. 1 Títulos de comunicación


Deprecation: true
Sunset: 2026-03-31T00:00:00Z
Link: </guides/reports-v2>; rel="successor-version"

4. 2 Orden de salida

1. Anuncio en el portal/boletín/notas SDK release.
2. Ventana de advertencia ≥ 90-180 días.
3. Estados en dashboard adoption.
4. Después de sunset - 410 Gone o modo «read-only» para el período de grace, si se acuerda.

5) Migración y coexistencia de versiones

Dual-write/dual-read durante el período de transición e informes de conciliación.
Adaptadores (temporales): transformaciones de gateway de payload antiguos → nuevos esquemas; la vida útil del adaptador es limitada.
Asistencia SDK: versiones que admiten ambas versiones, con alertas de depreciación (1 vez por proceso).
Banderas de fichas: inclusión de una nueva semántica sobre la lista de claves/tenantes.

6) Backward y forward compatibilidad

6. 1 Backward (clientes antiguos ↔ nuevo servidor)

No cambiar los formatos de tipo/obligatoriedad.
Los nuevos campos son sólo opcionales.
Los errores son los anteriores 'error _ code', los nuevos códigos añadir, no reemplazar.

6. 2 Forward (nuevos clientes ↔ antiguo servidor)

Comprobar la disponibilidad de capacidades (capabilities) a través de 'OPTIONS '/'/versions'.
Comportamiento Grace: el cliente debe tolerar las fichas faltantes.

7) Contratos e inspecciones automáticas

Registro: almacena versiones de esquemas; Los diphs de PR → los informes de «breaking/non-breaking».
Linter: nombres/tipos, idempotencia, paginación, códigos estables.
CDC (Consumer-Driven Contracts): pruebas de integradores en el CI del proveedor (Aprox y análogos).
Puerta: PR se bloquea cuando se rompe sin 'bump mayor '/RFC.

Ejemplo de paso CI:
yaml
- name: API Diff run: api-diff --from main --to $PR_SHA --fail-on=breaking --format junit --out diff. xml

8) Liberación canaria y retroceso

Canario: 10% → 25% → 50% → 100% de tráfico; retroceso automático en el deterioro de SLO (5xx/latency/429).
Claves Beta: acceso a nuevas versiones a través de allowlist.
Release freeze: cuando se quema error-budget.
Análisis de aceptación: proporción de tráfico/clientes en la nueva versión, tiempo de migración.

9) Compatibilidad en detalles: errores, paginación, idempotencia

9. 1 Errores

No cambie los estados HTTP en las secuencias de comandos existentes.
'error _ code' - estable; sólo añadir nuevos códigos.
'application/problem + json' es un formato único.

9. 2 Paginación

Cambiar a cursor/keyset = MINOR si se admite el antiguo 'offset/limit'.
Documente la clasificación de '(updated_at,id)' y la estabilidad del cursor.

9. 3 Idempotency

Para escribir - 'Idempotency-Key' + '409 IDEMP_REPLAY' en conflicto.
Las migraciones no deben cambiar la semántica de la idempotencia.

10) Transformación de Gateway (cuando corresponda)

Mapa v1→v2 campos, normalizar errores, convertir formatos de fecha/dinero.
Guardrails: las transformaciones son transparentes y lógicas; no esconda el breaking, sino que utilice como un puente de duración limitada.

11) Comunicaciones y Portal

Changelog с датами (`added/changed/deprecated/removed/fixed`).
Tarjeta de versión: estado (beta/GA/deprecated), fecha sunset, referencias a gaidas.
Webhooks de notificaciones: 'deprecation. notice`, `version. released`, `plan. change`.
SDK release notes + banner en el portal.

12) Métricas de éxito

Adoption rate v2 (según solicitudes/clientes).
Backward-compat incidentes (cole-in «rompimiento»).
Error mix (share 4xx/5xx/429) antes/después del lanzamiento.
Time-to-Adapt mediana.
Support load (tickets/ned).
Costo al servicio (costo de infraestructura por llamada).

13) Plantillas y ejemplos

13. 1 Títulos de versiones y deprecaciones


X-API-Version: v1
Deprecation: true
Sunset: 2026-03-31T00:00:00Z
Link: </v2/reports>; rel="successor-version"

13. 2 Política de versiones (fragmento YAML)

yaml versioning:
strategy: "path"
compatibility:
minor: "additive-only"
patch: "bugfix/perf, no schema change"
deprecation:
min_notice_days: 120 rollout:
canary_steps: [10,25,50,100]
rollback_checks: ["5xx_rate","p95_latency","429_rate","adoption"]

13. 3 OpenAPI: adición compatible del campo

yaml components:
schemas:
Report:
type: object required: [id, createdAt]
properties:
id: { type: string }
createdAt: { type: string, format: date-time }
cursor: { type: string, description: "optional for v1. 2+" } # additive

14) Lista de comprobación de lanzamiento (MINOR/MAJOR)

MINOR

  • DIFF: no breaking, linter verde
  • Documentación/SDK actualizada (ejemplos/codecs)
  • Canario + retroceso automático por SLO
  • Plan de Comm, página en el portal
  • Dashboards adoption y errores

MAJOR

  • RFC/ADR, fecha sunset y ventana ≥90 -180 días
  • Puente v1↔v2 (gateway) y guía migratoria
  • Dual-escritura/lectura y conciliación
  • SDK con ambas API + alertas
  • Piloto con integradores clave

15) Plan de implementación (3 iteraciones)

1. Fundación (2 semanas):

Registry esquemas, lentes y auto-diff en CI; Política de compatibilidad; encabezados 'Deprecation/Sunset'.

2. Versiones administradas (3-4 semanas):

Canarios, banderas ficha, alertas SLO; portal de versiones; Versiones SDK con soporte para 2 ramas.

3. Automatización y escala (continua):

Pruebas de consumo de CDC en CI, pronóstico de sunset sobre tendencias de adopción, notificaciones automáticas y recordatorios.

16) Mini preguntas frecuentes

¿Se puede cambiar el tipo de campo sin mayor?
No. Incluso «stroka→chislo» - breaking. Escriba un campo nuevo, antiguo - deprecate.

Enum: ¿puedo agregar valores?
Sí, si los clientes son tolerantes-lectores. De lo contrario, primero alerta y beta.

¿Cuánto tiempo guardaré la versión antigua?
Por ahora, la adopción del nuevo ≥95% y la ventana de deprecación se ha mantenido. Fije el plazo en la política.

La compatibilidad de la API es una disciplina: enfoque additive, esquemas formales y diphs, lanzamientos canarios, deprecaciones claras y migraciones gestionadas. Afianzar la política de cambio, automatizar las verificaciones y las comunicaciones, medir la adaptación - y sus actualizaciones dejarán de romper los clientes, y la velocidad de evolución aumentará sin perder confiabilidad.

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.