GH GambleHub

Tecnologia e Infrastruttura → Versioning API

Versioning API

1) Perché è necessario

Versioning è un modo gestito per modificare i contratti tra servizi e clienti senza interruzioni. Nei prodotti con più integrazioni (pagamenti, KYC/AML, giochi, bollo, rapporti) vivono contemporaneamente clienti «vecchi» e «nuovi». Criteri di versione corretti:
  • riduce il rischio di incidenti di rilascio
  • consente di implementare miglioramenti e sicurezza,
  • fornisce alle imprese tempi prevedibili per le migrazioni dei partner.

2) Classificazione delle modifiche

PATCH (non spezzanti) - Correzioni senza modifica del contratto (aggiunta di campi facoltativi, registri di convalida).
MINOR - Estensione back-compatibile (nuovi endpoint, campi default).
MAGGIORE - Modifica della struttura, semantici o rimozione dei campi/endpoint.

Raccomandato «MAJOR». MINOR. PATCH'per gli artefatti (SDK/diagrammi) e il numero API «esterno» può essere semplificato (v1, v2).

3) Modelli di versioning REST

1. IN URI:

`GET /v1/payments/{id}`

Pro: trasparente, cache, facile da instradare. Contro: duplicazione della documentazione, più difficile da evolvere.

2. Nelle intestazioni (content negotion):

`Accept: application/vnd. company. payments. v2+json`

I vantaggi sono la flessibilità, la mancanza di «spazzatura» nell'URL, l'evoluzione del mediatip. Contro - più difficile da ritardare nel browser, serve un cliente disciplinato.

3. Nel titolo di custode:

`X-API-Version: 2` (или `Api-Version: 2025-09-01`)

I vantaggi sono solo sul gateway. Contro - Niente standard, attenzione alla cache.

4. Versione-data (data-based):

Bene per fintech/report: prevedibili «tagli» variazioni (ad esempio trimestrali).

5. Versioning della risorsa/modello:

Lo stesso endpoint può restituire viste diverse: 'fields =...' o 'profile = litefull`. Questo è un supplemento, non sostituisce la versione.

Raccomandazione per le integrazioni esterne - «URI» + Deprecation/Sunset intestazioni; interno - È possibile «Accept» o titolo versione se il gateway e la piattaforma lo supportano.

4) GraphQL

Preferenza: nessuna versione globale. Evoluzione attraverso l'aggiunta di campi/tipi e la deprecazione ('@ deprecated (reason: "...)').
I cambiamenti che rompono sono solo nelle finestre «grandi» (versioned schema namespace) con l'hide migratorio.
Attenta a «n + 1» e non modificare i campi esistenti.

5) gRPC / Protobuf

I numeri di campo sono invariati. Contrassegnare i campi eliminati comè riserved ".
Aggiungere campi come optional con default sicuro.
Utilizzare il buf breaking/lint per verificare automaticamente la compatibilità.
Versionare pacchetti/moduli: 'package payments. v1;` → `payments. v2`.

6) API eventi (EDA)

Lo schema dell'evento è lo stesso contratto. Memorizzatelo in Schema Registry (Avro/JSON-Schema/Protobuf).
Top e versioni: 'payments. v1. authorized`, `payments. v2. authorized`.
Le modifiche distruttive sono un nuovo tipo di evento o un nuovo topic.
Garanzia di evoluzione: backward-compatibile per i consumatori durante il periodo LTS.

7) Politica di deprecazione e EOL

Implementare regole trasparenti:
  • Deprecation: etichette in changelog e specifiche (OpenAPI/GraphQL SDL), titolo
  • «Deprecation: true» e quando possibile «Sunset: Tue, 31 Mar 2026 00:00:00 GB».
  • Comunicazioni: email/portale partner, notifiche webhooks, release note.
  • MINOR - 3-6 mesi di supporto, MAJOR - 9-18 mesi (dipende dalle criticità).
  • Finestre temporali: fissa in Criteri di versioning API.

8) Routing e rilascio

API Gateway (Kong/Apigee/Nginx/Avvoy) - Regole per il prefisso «/v1/», per titolo o mediatip.

Esempio di percorso:

if ($http_accept ~ "vnd.company.payments.v2") { proxy_pass http://payments-v2; }

Canary/Blue-Green/Shadow: cattura la nuova versione dell '1-5% del traffico, confronta le metriche e i fogli degli errori contrattuali.
Feature Flags - Nascondiamo il comportamento senza modificare il contratto.
Migrazione zero-downtime - Con MAJOR, fornire una doppia scrittura/lettura (dual-write/read) dello schema dati.

9) Contratto-test e controllo di compatibilità

(o swagger- ) - Controlla che MINOR/PATCH non rompa gli schemi.
Spectral linting - Stile, metadati obbligatori (versione, Deprecation).
Consumer-Driven Contracts (Pact) - Garantisce che il provider non comprometta i clienti.
buf breaking для protobuf.
Il CI deve cadere quando si rompe il cambiamento senza aumentare il MAJOR.

10) Documentazione e SDK

Versionare gli specchi: '/docs/api/v1/openapi. json`, `/docs/api/v2/…`.
Generare SDK in versione (npm/maven/pypi) con SemVer e changelog.
Contrassegna i metodi obsoleti con annotazioni/Deprecated SDK.

11) Osservabilità versione

Raccogli le metriche separate:
  • RPS/latitanza/errore di versione ('api _ version'etichetta).
  • Schede di utilizzo degli endpoint: chi altro è su v1?
  • Alert: «> 10% 4xx due to contract mismatch», «vecchi client> X% dopo la data T».

12) Cache e versioni

La versione del percorso migliora la cache del CDN.

Quando le versioni di intestazione/mediatip sono accurate con Vary:
  • `Vary: Accept, X-API-Version`.
  • Non modificare la semantica di risposta in MINOR per rompere le chiavi di kash.

13) Sicurezza

Non cifrare o includere la versione in JWT - La versione definisce la query anziché il token.
Non aprire i numeri interni degli assiemi. Utilizzare «v1/v2» nei messaggi esterni.
Con MAJOR, rivedere la validazione, i limiti, la maschera PII.

14) Migrazione e assistenza automatica

Pubblicare «Migration Guide v1 → v2»: tabella delle corrispondenze dei campi, esempi di richieste/risposte, edge-valige.
Offre liner client (CLI) che evidenziano campi obsoleti.
Per i partner di grandi dimensioni, sandbox con due versioni e test dataset.

15) Anti-pattern

«Eternity v1»: assenza di deadline e metriche di utilizzo.
Modifiche distruttive nascoste in MINOR/PATCH.
Versione in query string ('? v = 2') - Rompe la cache e la lettura.
«Un endpoint - Cento valori di flag», difficile da testare/documentare.

16) Assegno-foglio di implementazione

1. È stato selezionato un modello (URI/Accept/Header) per i client interni e esterni.
2. SemVer per specifiche e SDK, breaking-check automatico in CI.
3. Deprecation/Sunset criteri e modelli di comunicazione.
4. Gateway-routing + canarini, dashboard secondo le versioni.
5. CDC/Contract test sulle integrazioni critiche (pagamenti, KYC, report).
6. Documentazione/SDK/Migration Guide pubblicati contemporaneamente al lancio.
7. Un piano EOL con date e responsabilità.

17) Esempi

17. 1 REST (URI + titoli)

Richiesta:

GET /v2/withdrawals/12345
Accept: application/json
Idempotency-Key: 4a1c-…-9f
Risposta:
json
{
"id": "12345",
"status": "PENDING_REVIEW",
"amount": {"value": "100.00", "currency": "EUR"},
"limits": {"daily": "500.00"},
"created_at": "2025-10-02T10:00:00Z",
"links": [{"rel": "cancel", "href": "/v2/withdrawals/12345/cancel", "method": "POST"}]
}
Intestazioni di depricaggio (v1):

Deprecation: true
Sunset: Tue, 31 Mar 2026 00:00:00 GMT
Link: </v2/docs>; rel="successor-version"

17. 2 Content Negotion (mediatip)


GET /payments/987
Accept: application/vnd.company.payments.v2+json
Vary: Accept

17. 3 GraphQL (deprimere il campo)

graphql type Payment {
id: ID!
amount: Money!
status: PaymentStatus!
method: PaymentMethod!
legacyCode: String @deprecated(reason: "Use field `method`")
}

17. 4 gRPC (protobuf)

proto package payments.v2;

message Withdrawal {
string id = 1;
Money amount = 2;
string status = 3; // previously enum, now string with documented values reserved 4; // legacy field removed in v1 -> v2
}

17. 5 Modello evento

Topic:
  • `wallet. v1. balance. updated`
  • `wallet. v2. balance. changed '(nuovo evento con schema avanzato)

Gli schemi sono memorizzati in Registry, il produttore non pubblica eventi con uno schema di interoperabilità.

18) Contesto iGaming/Fintech (pratica)

Pagamenti: invio v2 per i nuovi PSP in cui status'/' decline _ reason'esteso; nel gateway mapping v1 v2 per la segnalazione.
KYC: MINOR aggiunge il campo «pep _ screening», i client v1 ignorano, v2 richiede.
Giochi/Limiti: MAJOR cambia il modello dei limiti (giornalieri/settimanali). Doppia esportazione in report fino a EOL v1.
Report ai regolatori: versione-data fissa «reporting-2025-01».

19) Mini-criterio (esempio wiki)

Modello per API esterne - «URI/ vN/»; per interni - 'Accept:... vN+json' o'X-API-Variante: N '.
SemVer: le specifiche e SDK sono pubblicate comè N. minor. patch`. MAJOR richiede RFC/ADR.
Compatibilità MINOR/PATCH - Nessuna modifica compromettente. L'unico modo per rompere è attraverso MAJOR.
Deprecation/EOL: annuncio di ≥90 giorni; Data sunset nelle intestazioni Un ramo LTS per i clienti critici.
Controllo: diff/buf breaking in CI, CDC per le integrazioni chiave.
Osservabilità: metriche/loga con etichetta api _ variante.
Release: canary 5% ≥ 24h, poi graduale al 100% con metriche verdi.


Totale

La versioning non è un «/v2 in URL », ma un processo: regole esplicite per l'evoluzione, controlli automatici di compatibilità, rilasci gestiti e rispetto delle integrazioni. Immettere una politica comprensiva, automatizzare il controllo e l'osservabilità e le modifiche non saranno più una minaccia per il prodotto.

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.