GH GambleHub

Tehnologie și infrastructură → API Versioning

Versioning API

1) De ce aveți nevoie de ea

Versionarea este o modalitate ușor de gestionat de a schimba contractele între servicii și clienți fără defecțiuni. În produsele cu un număr mare de integrări (plăți, KYC/AML, jocuri, facturare, raportare), clienții „vechi” și „noi” trăiesc simultan. Politica de versiune corectă:
  • reduce riscul de incidente în timpul eliberărilor,
  • vă permite să programați îmbunătățiri și siguranță,
  • oferă întreprinderilor termene previzibile pentru migrațiile partenerilor.

2) Clasificarea modificărilor

PATCH (nu se rupe): corecții fără modificarea contractului (adăugarea de câmpuri opționale, remedieri de validare).
MINOR: extensii back-compatibile (puncte finale noi, câmpuri cu implicit).
MAJOR (rupere): schimbarea structurii, semanticii sau ștergerea câmpurilor/punctelor finale.

SemVer 'MAJOR este recomandat. MINOR. PATCH "pentru artefacte (SDK/scheme), în timp ce numărul API" extern "poate fi simplificat (v1, v2).

3) Modele de versionare REST

1. PENTRU URI:

'GET/v1/payments/{ id}'

Pro: transparent, cachable, ușor de traseu. Contra: duplicarea documentației, mai dificil de evoluat subtil.

2. În anteturi (negocierea conținutului):

"Accept: cerere/vnd. companie. plăți. v2 + json '

Pro: flexibilitate, fără „gunoi” în URL, evoluție convenabilă a tipului media. Contra: este mai dificil să depanați în browser, aveți nevoie de un client disciplinat.

3. În antetul personalizat:

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

Pro: doar pe feluice. Contra: fără standardizare, atent cu memoria cache.

4. Versiune bazată pe date:

Bun pentru fintech/raportare: „reduceri” previzibile ale schimbării (de ex. trimestrial).

5. Resource/Model Versioning:

Același punct final poate returna vizualizări diferite: 'fields =...' sau 'profile = litecomplet ". Acesta este un plus, nu un înlocuitor pentru versioning.

Recomandare: pentru integrări externe - anteturi „URI vN” + respingere/apus de soare; pentru intern - puteți „Accept” sau antetul versiunii, dacă gateway-ul și platforma îl suportă.

4) GraphQL

Preferință - fără versiuni globale. Evolutia prin adaugarea de domenii/tipuri si depractie ('@ depreciated (motiv:... "")').
Modificări de rupere - numai în ferestre „mari” (namespace schema versioned) cu ghid de migrare.
Urmăriți „n + 1” și nu modificați sensul câmpurilor existente.

5) gRPC/Protobuf

Numerele de câmp sunt imuabile. Marcați câmpurile șterse ca „rezervate”.
Adăugați câmpuri ca opționale cu implicit în condiții de siguranță.
Utilizați ruperea/scame buf pentru verificarea automată a compatibilității.
Versiune pachete/module: "pachete de plăți. v1, „→” plăţi. v2 '.

6) API-uri pentru evenimente (EDA)

Schema de evenimente este același contract. Păstrați-l în Registrul Schema (Avro/JSON-Schema/Protobuf).
Subiecte și versiuni: "plăți. v1. plăți autorizate „,”. v2. autorizat ".
Modificări de rupere - un nou tip de eveniment sau un nou subiect.
Evolutia garanteaza: inapoi-compatibil pentru consumatori in perioada LTS.

7) Politica de depricție și EOL

Punerea în aplicare a unor norme transparente:
  • Depreciere: etichete în changelog și în specificații (OpenAPI/GraphQL SDL), antet
  • "Depresie: true 'și când este posibil" Apus de soare: Tue, 31 Mar 2026 00:00:00 GMT ".
  • Comunicații: portal de e-mail/partener, notificări de carti web, note de lansare.
  • Termeni: MINOR - 3-6 luni de sprijin, MAJOR - 9-18 luni (în funcție de critică).
  • Ferestre de timp: fixați în „Politica de versioning API”.

8) Rutare și versiuni

Gateway API (Kong/Apigee/Nginx/Envoy): reguli prin prefix '/v1/', prin antet sau mediatip.

Exemplu de traseu:

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

Canary/Blue-Green/Shadow: rulați noua versiune pe 1-5% din trafic, comparați valorile și jurnalele erorilor contractuale.
Feature Flags: Ascundeți comportamentul fără a schimba contractul.
Zero-downtime migrare: cu MAJOR, oferi dual-write/citire a schemei de date.

9) Testarea contractelor și controlul compatibilității

OpenAPI Diff (sau swagger-diff) - Verificați dacă MINOR/PATCH nu rupe scheme.
Spectral linting - stil, metadate necesare (versiune, depreciere).
Contracte bazate pe consumatori (Pact) - asigură că furnizorul nu rupe clienții.
buf rupere для protobuf.
CI ar trebui să scadă în modificări de rupere, fără a ridica MAJOR.

10) Documentație și SDK

Versiunea specificațiile: '/docs/api/v1/openapi. json ', '/docs/api/v2/...'.
Generați SDK după versiune (npm/maven/pypi) cu SemVer și changelog.
Marcați metode depreciate în SDK cu/adnotări depreciate.

11) Observarea după versiune

Colecta metrici separat:
  • RPS/latență/erori pe versiune (etichetă „api _ version”).
  • Hărți de utilizare a punctului final: Cine altcineva este pe v1?
  • Alerte: „> 10% 4xx din cauza neconcordanței contractuale”, „clienți vechi> X% după data T”.

12) Caching și versiuni

Versiunea în tranzit îmbunătățește cachability CDN.

Cu versiuni antet/media - cu atenție cu Vary:
  • „Vary: Accept, X-API-Version”.
  • Nu schimbați semantica răspunsului în MINOR pentru a sparge tastele cache.

13) Siguranță

Nu cripta sau cusatura versiunea în JWT - versiunea este determinată de cerere, nu token.
Nu dezvălui numere interne de asamblare. Utilizați „v1/v2” pentru mesaje externe.
În MAJOR, validarea revizuirii, limitele, mascarea PII.

14) Migrații și auto-ajutoare

Publicați „Ghidul de migrare v1 → v2”: tabelul de cartografiere a câmpului, cererile de eșantionare/răspunsurile, cazurile de margine.
Oferim lintere pentru clienți (CLI) care evidențiază câmpurile învechite.
Pentru parteneri mari - sandbox cu două versiuni și un set de date de testare.

15) Anti-modele

„Eternul v1”: lipsa termenelor limită și a metricii de utilizare.
Modificări ascunse de rupere în MINOR/PATCH.
„Versiune în șir de interogare” ('? v = 2 ') - sparge memoria cache și lizibilitatea.
„Un punct final este o sută de valori de pavilion”: dificil de testat/document.

16) Lista de verificare a implementării

1. Modelul selectat (URI/Accept/Header) pentru clienții externi și interni.
2. SemVer pentru specificații și SDK, verificare automată de rupere în CI.
3. Politica de depreciere/apus de soare și șabloane de comunicare.
4. Gateway routing + canare, tablouri de bord după versiune.
5. Teste CDC/Contract pentru integrări critice (plăți, KYC, raportare).
6. Ghidul de documentare/SDK/migrare este publicat în același timp cu lansarea.
7. Planul EOL cu date și responsabil.

17) Exemple

17. 1 REST (URI + antete)

Cerere:

GET /v2/withdrawals/12345
Accept: application/json
Idempotency-Key: 4a1c-…-9f
Răspuns:
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"}]
}
Anteturi de depravare (pe v1):

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

17. 2 Negocierea conținutului


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

17. 3 GraphQL (Depriction câmp)

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 Modelul evenimentului

Subiecte:
  • "umed. v1. echilibru. actualizated '
  • "umed. v2. echilibru. schimbat "(eveniment nou cu schemă extinsă)

Schemele sunt stocate în Registru, producătorul nu publică evenimente cu un sistem care încalcă compatibilitatea.

18) Context iGaming/fintech (practică)

Plăți: intrare v2 pentru noile PSP-uri în care se extinde „status ”/„ decline _ reason”; pe poarta de acces, cartografiere v1 → v2 pentru raportare.
KYC: MINOR adaugă câmpul „pep _ screening”, clienții ignoră v1, v2 - necesită.
Jocuri/limite responsabile: MAJOR modifică modelul de limite (zilnic/săptămânal). Export dublu la raportare înainte de EOL v1.
Raportarea către autoritățile de reglementare: versiuni-date fixe: „raportare-2025-01”.

19) Mini-politică (exemplu pentru wiki)

Model: pentru API-uri externe - „URI/vN/”; pentru intern - "Accept:... vN + json "sau" X-API-Version: N ".
SemVer: Specificațiile și SDK-urile sunt publicate ca 'N. minor. patch-uri ". MAJOR necesită RFC/ADR.
Compatibilitate: MINOR/PATCH - fără modificări de rupere. Spargerea → doar prin MAJOR.
Deprecierea/EOL: anunțul de ≥90 zile; Data de apus în titluri; Filiala LTS pentru clienții critici.
De control: OpenAPI diff/buf rupere în CI, CDC pentru integrări cheie.
Observabilitate: valori/busteni cu eticheta 'api _ version'.
Versiuni: canar 5% ≥ 24h, apoi în etape la 100% cu metrici verzi.


Rezultat

Versionarea nu este despre „/v2 în URL „, ci despre proces: reguli explicite de evoluție, verificări automate ale compatibilității, versiuni gestionate și respectarea integrărilor. Introduceți o politică clară, automatizați monitorizarea și observabilitatea - iar schimbările nu vor mai reprezenta o amenințare pentru produs.

Contact

Contactați-ne

Scrieți-ne pentru orice întrebare sau solicitare de suport.Suntem mereu gata să ajutăm!

Pornește integrarea

Email-ul este obligatoriu. Telegram sau WhatsApp sunt opționale.

Numele dumneavoastră opțional
Email opțional
Subiect opțional
Mesaj opțional
Telegram opțional
@
Dacă indicați Telegram — vă vom răspunde și acolo, pe lângă Email.
WhatsApp opțional
Format: cod de țară și număr (de exemplu, +40XXXXXXXXX).

Apăsând butonul, sunteți de acord cu prelucrarea datelor dumneavoastră.