GH GambleHub

Compatibilité API et mises à jour

1) Principes de base de l'interopérabilité

Additive-first : ajoutez un nouveau sans casser l'ancien (nouveaux champs/endpoints optionnels, nouvelles valeurs enum).
Contrats stables : « Ce qui est promis dans le cahier des charges fonctionne » ; le comportement est documenté.
Backward> Forward : priorité de rétrocompatibilité ; forward est autorisé via tolerant-readers.
Les documents sont primaires : la seule source de vérité est la version du schéma dans le registre (OpenAPI/AsyncAPI/Proto).
Une évolution évidente : le breaking ne passe que par une nouvelle version major et un guide migratoire.

2) Taxonomie du changement

2. 1 Compatible (MINEUR/PATCH)

Ajoutez des champs/headers optionnels, de nouveaux endpoints, des paramètres query avec défaut.
Augmentation des limites ('page _ size', TTL), clarification des erreurs sans changement de code/sémantique.
Ajoute des valeurs enum si les clients ignorent les « inconnus » (tolerant-reader).

2. 2 Ambiguïté (Behavioral)

Modifier les défauts, l'ordre de tri, les délais subtils, les quotas - peut « briser » la logique d'entreprise. Nécessite RFC + annonce et canaries.

2. 3 Casseurs (MAJOR)

Renommer/supprimer les champs, modifier le type/format, remplacer les codes d'erreur, inverser l'incompatibilité des contrats/schémas d'authentification.

3) Politique de versioning

Stratégie : 'path versioning' ('/v1 ', '/v2').
Minor/patch : « ajoutez, ne cassez pas ».
Titres datés (dop.) : 'X-API-Version-Date' pour un léger changement progressif.
Types de médias (Opz.) : `Accept: application/vnd. acme. v1 + json 'pour la granulation fine.

4) Dépréciations et sunset

4. 1 Titres de communication


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

4. 2 Ordre de sortie

1. Annonce dans le portail/newsletter/SDK release notes.
2. Fenêtre d'avertissement ≥ 90-180 jours.
3. Statuts dans le dashboard d'adaptation.
4. Après sunset - 410 Gone ou « read-only » mode pour la période grace si convenu.

5) Migration et coexistence des versions

Dual-write/dual-read pendant la période de transition et rapprochement avec les rapports.
Adaptateurs (temporaires) : gateway-conversion d'anciens payload → de nouveaux schémas ; la durée de vie de l'adaptateur est limitée.
Aide SDK : versions supportant les deux versions, avec avertissements de dépréciation (1 fois par processus).
Ficha drapeaux : inclure une nouvelle sémantique sur la liste des clés/tenants.

6) Compatibilité Backward et forward

6. 1 Backward (anciens clients ↔ nouveau serveur)

Ne pas modifier les formats de type/obligatoire.
Les nouveaux champs ne sont qu'optionnels.
Erreurs - ancien 'error _ code', ajouter de nouveaux codes, ne pas remplacer.

6. 2 Forward (nouveaux clients ↔ ancien serveur)

Vérifiez les possibilités (capabilities) via 'OPTIONS '/'/versions'.
Comportement grace : le client doit tolérer les fiches manquantes.

7) Contrats et contrôles automatiques

Registry : nous stockons les versions des schémas ; Les diphes PR → les rapports « breaking/non breaking ».
Linter : noms/types, idempotence, pagination, codes stables.
CDC (Consumer-Driven Contracts) : tests des intégrateurs dans le CI du fournisseur (Pact et analogues).
Gate : PR est bloqué lors du breaking sans 'major bump '/RFC.

Exemple d'étape CI :
yaml
- name: API Diff run: api-diff --from main --to $PR_SHA --fail-on=breaking --format junit --out diff. xml

8) Sortie canarique et marche arrière

Canary : 10 % → 25 % → 50 % → 100 % du trafic ; auto-recule en cas de détérioration du SLO (5xx/latency/429).
Clés bêta : accès aux nouvelles versions par allowlist.
Release freeze : lors de la combustion error-budget.
Analyse d'acceptation : part du trafic/clients sur la nouvelle version, temps de migration.

9) Compatibilité dans le détail : erreurs, pagination, idempotence

9. 1 Erreurs

Ne pas modifier les statuts HTTP dans les scripts existants.
'error _ code 'est stable ; ajouter de nouveaux codes.
'Application/problème + json 'est un format unique.

9. 2 Pagination

Passe à cursor/keyset = MINOR si l'ancien 'offset/limit' est pris en charge.
Documenter le tri '(updated_at,id)' et la stabilité du curseur.

9. 3 Idempotency

Pour write - 'Idempotency-Key' + '409 IDEMP_REPLAY' en cas de conflit.
Les migrations ne doivent pas changer la sémantique de l'idempotence.

10) Gateway-transformation (le cas échéant)

Map v1→v2 les champs, normaliser les erreurs, convertir les formats date/argent.
Guardrails : les transformations sont transparentes et logiques ; ne cachez pas le breaking, mais utilisez-le comme pont à durée limitée.

11) Communications et portail

Changelog с датами (`added/changed/deprecated/removed/fixed`).
Carte de version : statut (beta/GA/deprecated), date sunset, références aux hydes.
Notifications Web : 'deprecation. notice`, `version. released`, `plan. change`.
SDK release notes + bannière dans le portail.

12) Les métriques du succès

Adoption rate v2 (sur demande/clients).
Backward-compat incidents (kol-to « casser »).
Error mix (parts 4xx/5xx/429) avant/après la sortie.
Time-to-Adopt médian.
Charge de support (tickets/ned).
Cost-to-Serve (coût d'infrastructure par appel).

13) Modèles et exemples

13. 1 Titres des versions et dépressions


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

13. 2 Stratégie de version (fragment 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 : Ajout de champ compatible

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) Chèque de libération (MINEUR/MAJEUR)

MINOR

  • DIFF : non breaking, linter vert
  • Documentation/SDK mis à jour (exemples/codecs)
  • Canaria + auto-retour sur SLO
  • Com-plan, page dans le portail
  • Dashboards d'adaptation et d'erreurs

MAJOR

  • RFC/ADR, sunset date et fenêtre ≥90 -180 jours
  • Pont v1↔v2 (passerelle) et guide des migrations
  • Double-écriture/lecture et rapprochement
  • SDK avec les deux API + alertes
  • Pilote avec des intégrateurs clés

15) Plan de mise en oeuvre (3 itérations)

1. Fondation (2 semaines) :

Registry schémas, lint et auto-diff dans CI ; la politique d'interopérabilité ; les titres « Deprection/Sunset ».

2. Versions gérées (3-4 semaines) :

Canaries, drapeaux de ficha, alertes SLO ; le portail des versions ; Versions SDK avec prise en charge de 2 branches.

3. Automatisation et échelle (en continu) :

Les tests CDC des consommateurs en CI, les prévisions sunset sur les tendances d'adaptation, les notations automatiques et les rappels.

16) Mini-FAQ

Puis-je changer le type de champ sans majeur ?
Non. Même « stroka→chislo » - breaking. Entrez un nouveau champ, l'ancien est deprecate.

Enum : Puis-je ajouter des valeurs ?
Oui, si les clients sont des lecteurs tolérants. Sinon, d'abord l'alerte et bêta.

Combien tenir l'ancienne version ?
Jusqu'à présent, addition de la nouvelle ≥95 % et la fenêtre de dépréciation est maintenue. Fixez un délai dans la politique.

Résultat

L'interopérabilité des API est une discipline : approche additive, schémas formels et diphes, sorties canaries, dépressions claires et migrations gérables. Fixez une politique de changement, automatisez les vérifications et les communications, mesurez l'option - et vos mises à jour arrêteront de briser les clients et la vitesse d'évolution augmentera sans perte de fiabilité.

Contact

Prendre contact

Contactez-nous pour toute question ou demande d’assistance.Nous sommes toujours prêts à vous aider !

Telegram
@Gamble_GC
Commencer l’intégration

L’Email est obligatoire. Telegram ou WhatsApp — optionnels.

Votre nom optionnel
Email optionnel
Objet optionnel
Message optionnel
Telegram optionnel
@
Si vous indiquez Telegram — nous vous répondrons aussi là-bas.
WhatsApp optionnel
Format : +code pays et numéro (ex. +33XXXXXXXXX).

En cliquant sur ce bouton, vous acceptez le traitement de vos données.