GH GambleHub

Versioning semantico

Semantic Versioning (SemVer) - Un contratto per capire come il numero di versione riflette la natura delle modifiche. Formato MAGGIORE. MINOR. PATCH[-PRERELEASE][+BUILD].

Il punto è:
  • MAJOR - Modifiche incompatibili (breaking).
  • MINOR - Fici/estensioni riconducibili.
  • PATCH - Correzioni di errore/protezione invertite.

Obiettivo: l'evoluzione prevedibile di API, eventi, schemi di dati, SDK e configure senza guasti improvvisi dei consumatori.


1) Convenzione dei numeri


X.Y.Z[-alpha.1    -rc.1][+build.sha]

Pre-release - Assemblaggi instabili non promettono compatibilità.
Build metadata ('+ sha') - Non influisce sull'ordine di confronto, utile per la traccia.
Fino a 1. 0. 0 qualsiasi modifica può essere considerata breaking (ma è meglio rispettare le regole fin dall'inizio).


2) Cosa conta breaking/minore/patch

PATCH (Z):
  • Registrazioni di bagagli e sicurezza senza cambio di contratto.
  • I Doc Update che non interessano il contratto.
  • Ottimizzazioni senza modificare risposte/eventi/diagrammi.
MINOR (Y):
  • Aggiunge nuovi campi/metodi/endpoint opzionali.
  • Espansione enum con valori se i consumatori sono tollerati con valori sconosciuti.
  • Nuovi indici di database, colonne nullable con default, nuovi eventi in aggiunta ai vecchi.
MAJOR (X):
  • Elimina o rinomina i campi, modifica i tipi e l'obbligatorietà.
  • Modifica semantica/stato/codice di errore.
  • Cambia il formato di serializzazione, lo schema delle chiavi, il protocollo di trasporto.
  • Compressione/fusione di topic, trasferimento del significato dell'evento, modifica dello schema di partitura.
  • Migrazioni di database che richiedono un failover dual-fase senza interoperabilità.
💡 Regola: Producer è obbligato a salvare backward compatibility all'interno di MINOR/PATCH. Se non è possibile, aumentare MAJOR e supportare due linee per il periodo di migrazione.

3) Versioning per manufatti

3. 1 REST

Le opzioni sono "URI/v1/...", intestazioni ("Accept: application/vnd. acme. game+json; versione = 1 '), parametro.
Raccomandazione: versione URI per API pubbliche; per interni - attraverso il titolo c negotion.
MINOR - Aggiungere campi opzionali, nuovi filtri/risorse non cambiare le risposte esistenti.
PATCH - Fissi, descrizioni, ordinamenti stabili.

3. 2 gRPC

Cambia le firme/tipi di → MAJOR (nuovo pacchetto/servizio: 'acme. wallet. v2`).
Nuovi campi con etichetta optional; il server deve ignorare quelli sconosciuti.
I campi non vengono eliminati: «depricate + prenotare il numero», ma solo in MAGGIORE.

3. 3 GraphQL

MINOR: nuovi campi/tipi/query; rimuovendo - «@ deprecated» + la finestra di migrazione, l'eliminazione completa è MAGGIORE.
Modifica nullable→non -nullable - MAJOR.

3. 4 Eventi e topici (Kafka/SQS)

Schemi in Schema Registry - Evoluzione additive (aggiungere campi con default).
La nuova versione incompatibile → un nuovo subject/topic ('bet. settled. v2`).
La chiave di partitura è invariata all'interno di MAJOR.

3. 5 Diagrammi di database

«Espandi, poi abbassa»:

1. Aggiungi colonna (nullable/con default)

2. Riempire il backfill

3. Traduce le letture

4. Rimuovi il vecchio (solo in MAJOR).

Cambia il tipo/RC/Unicità - MAGGIORE, sotto il phicheflag e il doppio record.

3. 6 SDK/CLI

Metodi/firme pubblici sono le stesse regole.
Per la genetica automatica (OpenAPI/Proto), la versione del nome batch e degli artefatti.


4) Politica di depricaggio e ciclo di vita

Ogni modifica breaking è preceduta da depricaggio (generalmente 90-180 giorni per gli esterni, 30-60 per quelli interni).
Comunicazioni: changelog, e-mail/webhoop ai partner, banner sul portale dello sviluppatore.
Modalità dual-run: in parallelo, teniamo v1 e v2, monitor la quota di traffico v1.
Sunset headers (REST): `Sunset: 2026-03-31`, `Link: <url>; rel="deprecation"`.


5) Version negotiation

Il client invia la versione desiderata + massima supportata (ad esempio, 'Accept-Variante: 1,2').
Il server risponde à Content-Variante: 2 "se è stato in grado di aumentare.
Nei protocolli bidirezionali (WebSocket, gRPC), lo scambio di cornici Hello con'supported _ variations '.


6) Integrazione con i provider (ACL)

Il provider esterno cambia schema - all'interno dell'adattatore, teniamo i maker v1/v2 e rilasciiamo MINOR per l'evento interno, mantenendo il nostro contratto di dominio.
Se le modifiche esterne vengono apportate all'interno, sono MAJOR del nostro evento di dominio e un nuovo subject.


7) Changelog e etichette dei commiti

Segui Keep a Changelog e Conventional Commits:
  • `feat:...` → MINOR
  • "fix:... '/' chore ',' docs', 'perf' (senza contratto) → PATCH
  • "feat!: '/' fix!: '/' refactor! 'o' BREAKING CHANGE: 'NEL CORPO DEL MAGGIORE
Esempio di scrittura:

[2.3.0] - 2025-10-31
Added
- GET /v1/games?capabilities=jackpot (optional)
Changed
- GraphQL: field Game.volatility @deprecated, use Game.riskProfile

8) Automazione dei lanci

CI: Validatori di diagrammi (OpenAPI/Protobuf/Avro/JSON-Schema), oggetto di breaking-diffusi.
SemVer-bot - L'analisi Conventional Commits calcola bump (major/minore/patch), crea un tag, genera changelog.
CD: deploy separati e release (phicheflagi/confighi attivano una nuova versione).
Controllo: non pubblichiamo «latest» su PRO prima di canary di successo e SLO concordati.


9) Semantica per configurazioni e regole

Anche i confighi (YAML/JSON) hanno una versione dello schema: 'schema _ variante: 3'.
MINOR - nuovi campi o regole facoltativi MAJOR - Cambia struttura/obbligatorietà.
Supporto v2/v3 nel valico; Un migratore di configurazioni con un rapporto di incompatibilità.


10) Test di compatibilità

Consumer-driven contract test (Pact) - Per ogni integrazione.
Schema-evolution test: prova dei vecchi payload su un nuovo schema e viceversa.
Replay: riproduce il traffico «v1» su «v2» nell'ombra.
Property-based - Resistenza a campi/enum sconosciuti.


11) Osservazione delle versioni

Etichetta metriche/logi: 'api _ version', 'schema _ version', 'event _ variante'.
Dashboard migrazione: quota di traffico su versioni, errore/latitanza su «v1/v2».
Alert: se «v1» non diminuisce come previsto; 4xx/5xx dopo il lancio dì v2 ".


12) Pattern migratori senza interruzioni

Expand → Migrate → Contract (БД).
Dual write + confronto di divergenze prima di passare alla lettura.
Shadow compare per classificare/regole.
Canary per tenanti/regioni; feature flags per i rimborsi rapidi.
Read-compat/Write-compat della finestra: la nuova versione legge i vecchi dati, ma scrive in un nuovo formato.


13) Anti-pattern

Versione in ogni campo invece di versionare la risorsa/evento.
Modifiche di breaking nascoste sotto MINOR (ad esempio, modifica dei default).
Rimuove i senza finestra e le metriche di consumo.
«Per sempre v1» non c'è nessun piano per rimuovere le vecchie versioni di tecnologia e vulnerabilità.
Combinazione tra la versione aziendale e quella dell'immagine contenitore.


14) Foglio di assegno del criterio di versioning

  • Il formato di versione e le origini di verità sono stati registrati.
  • L'elenco dei criteri di breaking per gli artefatti (REST/gRPC/GraphQL/events/DB) è stato approvato.
  • Processo di depricaggio: tempi, comunicazioni, sunset/banner, dual-run.
  • Checker di diagrammi differente automatico e Conventional Commits.
  • Dashboard di consumo di versioni e alert.
  • Playbook di migrazione (expand/migrate/contract, dual-write, shadow).
  • Confighi e SDK hanno le proprie versioni e minuscole.
  • Documentazione «come scegliere una versione» per i client e «come aumentare» per i comandi.

15) Esempi di versioning (valigette iGaming)

Evento «BetSettled v1» → «v2»: aggiungono «void _ reason» e «tax». amount` (optional) — MINOR. Riassegnato' payout'→'win_amount '- MAGGIORE, nuovo subject.
REST'/wallets/transfer ': hanno aggiunto il filtro'? tenant _ id = '- MINOR. Ho cambiato il codice di errore «409'→'422» - MAGGIORE.
GraphQL: contrassegnato «Player». age'comè @ deprecated ', a favore dì Player'. ageGroup - rilascio in MINOR, rimozione in MAJOR dopo il periodo X.
BD: aggiungono la colonna bonus _ wager _ left'nullable - MINORE. Hanno eliminato «bonus _ left» - MAJOR (tramite expand/contract).


Conclusione

La versione semantica non riguarda i numeri, ma la fiducia e la prevedibilità. Regole chiare, controlli automatici, depricaggi controllati e telemetria trasparente permettono di evolvere API, eventi e schemi senza dolore per le integrazioni e rilasciare cambiamenti frequenti, sicuri e sensibili.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.