GH GambleHub

Strategii de versionare API

De ce este nevoie de versioning

API se schimbă mai repede decât clienții. Versioning vă permite să eliberați caracteristici și să editați erori fără a rupe integrările, setează ritualul schimbării și face evoluția previzibilă. Cheie: modificări aditive implicite, majoruri - numai pentru rupere, verificări automate ale compatibilității și politici de apus de soare grijulii.


Principii de bază

1. Aditiv-first: noi câmpuri opționale/metode/evenimente - ok; ștergeri și modificări semnificative - majore.
2. MGC (contract minim de garantie) este stabil; îmbogăţire - prin capacităţi/'? include = '.
3. Cititor tolerant: clienții ignoră câmpurile necunoscute și supraviețuiesc corect extensiilor de enum.
4. Versioning semantic: 'MAJOR. MINOR. PATCH "pentru artefacte, SDK, și evenimente.
5. Automate: schema-diff, lintere, și teste CDC bloc modificări de rupere.


În cazul în care pentru a stoca versiunea (mecanica de adresare)

REST/HTTP

URI versiune: '/v1/comenzi '→ ușor de trasat, convenabil în gateway-uri. Minus - „ascunde” evoluția ideilor.
Media/Header: 'Acceptă: cerere/vnd. exemplu. comenzi. v1 + json '- controlul exact al formatului; mai greu de demascat.
Versiunea de interogare: '? api-version = 1 '- convenabil pentru A/B, dar ușor de pierdut în cache-uri/jurnale.
Recomandare: URI pentru linii majore + feature/capability flags și negarea conținutului pentru extensii minore.

gRPC/Protobuf

Pachete/servicii: "pachete de plăți. v1; PaymentsV1 de servicii; "- linii explicite.
Numerotarea etichetelor este neschimbată; etichetele șterse nu pot fi reutilizate.
Câmpuri noi - „opțional”; breaking → new '.v2'.

GraphQL

Schema fără majorări explicite în adresa URL. Evolutie prin ferestre @ depreciate si migrare; „real” major este o nouă schemă criteriu final.
Complexitatea/adâncimea controlului face parte din contract.

Bazat pe evenimente (Kafka/NATS/Pulsar)

Numele evenimentului: 'plata. autorizat. v1 'este versiunea din text.
Registrul schemei (Avro/JSON Schema/Protobuf) cu moduri de compatibilitate (BACKWARD/FORWARD/FULL).
Major → dual-emit „v1” și „v2” pentru perioada de tranziție.


Modelul versiunii și politica de schimbare

Versioning semantic

MAJOR - modificări de rupere: ștergerea/redenumirea câmpurilor, schimbarea cheilor de membru, semnificația diferită a statutelor, strângerea validării.
MINOR - aditiv: noi câmpuri opționale/endpoints/evenimente, noi valori ale enumului cu cititor tolerant.
PATCH - stabilește fără a schimba contractul și semantica.

Depreciere și apus de soare

Mark învechit („Depreciat: adevărat”, „@ depreciat”), publică data apusului, ghidul alternativ și de migrare.
În HTTP - anteturile „Apus de soare”, „Depreciere”; în evenimente - o ".depreciere separată. notificare ".
Telemetrie de utilizare pentru a decide dacă pentru a elimina.


Strategii de versioning după stil

ODIHNĂ

Linii majore pe/v1 ,/v2.
Prelungirea schemei, '? fields = ','? include = '; extensii enum securizate.
ETag/If-Match și POST idempotent pentru consistență non-rupere.
Erori - format stabil ('type', 'code', 'trace _ id').

gRPC

Introducerea de noi servicii/metode de rupere: "PaymentsV2. Capturează.
Stările de eroare și semantica termenului limită fac parte din contract; schimba → noua metoda/serviciu.
Streaming: Conveniți asupra comenzii mesajelor și nu o schimbați în minor.

GraphQL

Adăugați câmpuri și tipuri în mod liber; deletions - prin fereastra „@ depreciated” + migration; reproiectare mare → noua schema ('/graphql-v2 ').
Introspecție și descrieri - must-have pentru migrațiile clienților.

Evenimente

Core vs îmbogățit: miezul este stabil, îmbogățește locuiesc în apropiere și sunt versionate separat.
Cheia de partiție este neschimbată în cadrul liniei majore.
Migrații majore - „dual-emit” + proiecție/migrație a consumatorilor.


Steaguri de negociere și capacitate

Capabilități: client trimite 'X-Capabilities: risk_score,price_v2'; serverul răspunde cu o vizualizare extinsă.
Preferați (HTTP) și sugestii pentru răspunsuri parțiale.
În prize/fluxuri - un mesaj de strângere de mână cu o listă de extensii acceptate.


Eliberarea versiunilor majore fără durere

1. RFC/ADR: de ce este necesar major, ce pauze, matrice de risc.
2. Dual-run: lansarea paralelă a „v1” și „v2” (publicarea de evenimente duble, două direcții de gateway, oglindirea traficului).
3. Adaptoare de migrare: proxy-uri/traducători 'v1↔v2' pentru clienți grei.
4. Canare: dupa grupul de clienti/topic/tag in gateway.
5. Planul Sunset: date, comunicare, standuri, date de testare, monitorizarea utilizării.


Roluri de platformă și infrastructură

API Gateway/Service Mesh: rutare după versiune, antete, trasee; tarif limită и auth per versiune.
Schema Registry & Catalog: Sursa de adevăr pentru specificații/scheme cu istorie difuză.
CI/CD: линтеры (Spectral, Buf), schema-diff (OpenAPI-diff, Buf breaking), CDC (Pact).
Observație: versiunea trebuie inclusă în jurnalele/traseele/metrica.


Testarea versiunii

Schema-diff în PR: bloc de rupere.
Contracte bazate pe consumatori: Furnizorul este testat pe contracte reale pentru consumatori.
Eșantioane de aur: răspunsuri de referință la versiuni.
E2E canar: compararea p95/p99, erori și timeout-uri între versiuni.
Replay pentru evenimente: proiecțiile sunt reasamblate la v2 fără discrepanțe.


Migrarea datelor și a bazelor de date

Pentru REST/gRPC: migrările bazelor de date sunt coordonate prin extindere și contract (adăugați o coloană → începeți scrierea → comutați citirea → ștergeți vechiul).
Pentru evenimente: dual-emit și migrația consumatorilor; uneori - reluarea jurnalului pe proiecții noi.
Nu face „explozii mari” - împărțite în trepte cu rollback.


Relația de securitate

Scopuri pentru fiecare versiune: OIDC-scopes individuale/roluri pentru v1/v2.
Secretele/revendicările tokenului fac parte din contract; schimbarea lor = major.
PII/PCI - nu extinde inutil sarcina utilă; domenii noi - cu un minim de privilegii.


Anti-modele

Swagger-wash: caietul de sarcini actualizat, server nu (sau invers).
Reutilizarea etichetelor protobuf este o corupere liniștită a datelor.
Schimbarea sensurilor enum fără majore.
Global '/v2 '„de dragul produselor cosmetice”: o versiune fără a rupe.
Am uitat metricile de apus/utilizare: este imposibil să eliminați versiunea veche în siguranță.
Un subiect comun pentru diferiți majori: un amestec de ordine și chei.


Lista de verificare înainte de lansare

  • Modificările sunt aditive sau se prepară o linie majoră separată.
  • Linterele și schema-diff sunt verzi (ruperea nu s-a târât).
  • Actualizat SDK/exemple/documentație, note de subsol de compatibilitate.
  • Activat cititor tolerant pe clienți; enum-rezervă testată.
  • Pentru major - plan dual-run, adaptoare, canar, datele de apus de soare și de corespondență.
  • Metrics/busteni/trasee conțin o versiune și segmentare de către acesta.
  • Există un stand și seturi de aur pentru compararea v1↔v2.
  • Pentru evenimente, registrul schemei este în modul BACKWARD/FULL, tastele de partiție sunt neschimbate.

Șabloane de probă

REST (URI + negociere)

Traseu: '/api/v2/orders/{ id} '

Заголовок: 'Prefer: incluse = items, customer', 'X-Capabilities: risk_score'

Depreciere: 'Apus de soare: 2026-06-30', 'Legătură: ; rel = "supleant" "

Protobuf/gRPC

proto package payments.v2;

service PaymentsV2 {
rpc Capture (CaptureRequestV2) returns (CaptureResponseV2);
}
💡 În v1 - marcă depreciată în descrierea și data apusului în documentație.

Evenimente

"plata. capturat. v2 „(nucleu) și” plată. îmbogățit. v2 '(detalii).
Pentru perioada de tranziţie, producătorul face „v1” şi „v2”.


ÎNTREBĂRI FRECVENTE

Când este nevoie de „/v2 ”?
Când invarianții/semantica se schimbă, câmpurile/metodele sunt eliminate, formatul identificatorilor, cheia de partiționare, SLA/temporizările se schimbă astfel încât clienții să se rupă.

Poți trăi fără o versiune explicită în REST?
Numai pentru sistemele mici. Pentru integrările externe, liniile majore explicite sunt mai bune.

Cât timp pentru a păstra versiunea învechită?
Depinde de ecosistem. Pentru partenerii externi, de obicei 6-12 luni cu notificare timpurie și canar.

Cum este diferită versiunea evenimentului de API?
Evenimente - numai pentru adăugare; noi semantici = nou tip „.v2” și dual-emit. Cheia de partiționare face parte din contract.


Rezultat

Strategiile de versionare sunt procesele și instrumentele: evoluția aditivă implicită, liniile majore clare, capacitatea de negociere, dual-run și apusul soarelui. Adăugați verificări automate de compatibilitate, telemetrie de utilizare și disciplină de documentare - iar API-urile vor evolua rapid, fără „migrații de noapte” și scăderi neașteptate ale clienților.

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ă.