GH GambleHub

Technologia i infrastruktura → API Wersioning

Wersioning API

1) Dlaczego go potrzebujesz

Wersioning jest możliwym do opanowania sposobem zmiany umów między usługami a klientami bez podziałów. W produktach o dużej liczbie integracji (płatności, KYC/AML, gry, rozliczenia, raportowanie), „stare” i „nowe” klienci żyją jednocześnie. Poprawna polityka wersji:
  • zmniejsza ryzyko incydentów podczas uwalniania,
  • pozwala na zaplanowanie ulepszeń i bezpieczeństwa,
  • daje przedsiębiorstwom przewidywalny harmonogram migracji partnerskich.

2) Klasyfikacja zmian

PATCH (nie łamanie): korekty bez zmiany umowy (dodanie pól opcjonalnych, poprawki do walidacji).
MINOR: rozszerzenia kompatybilne z powrotem (nowe punkty końcowe, pola domyślnie).
MAJOR (łamanie): zmiana struktury, semantyki lub usunięcie pól/punktów końcowych.

SemVer 'Major jest zalecany. DROBNE. PATCH 'dla artefaktów (SDK/schematy), natomiast „zewnętrzny” numer API można uprościć (v1, v2).

3) Modele wersji REST

1. DO URI:

„GET/v1/payments/{ id}”

Plusy: przezroczysty, cachable, łatwy w trasie. Wady: powielanie dokumentacji, trudniejsze do subtelnej ewolucji.

2. W nagłówkach (negocjacje treści):

"Akceptuj: wniosek/vnd. przedsiębiorstwo. płatności. v2 + json "

Plusy: elastyczność, brak „śmieci” w adresie URL, wygodna ewolucja typu mediów. Minusy: trudniej jest debugować w przeglądarce, potrzebujesz zdyscyplinowanego klienta.

3. W nagłówku niestandardowym:

„X-API-Wersja: 2” (ила „Api-Wersja: 2025-09-01”)

Plusy: tylko na śluzie. Minusy: brak standardu, ostrożność z pamięci podręcznej.

4. Wersja oparta na dacie:

Dobre dla fintech/sprawozdawczości: przewidywalne „cięcia” zmian (np. kwartalnie).

5. Weryfikacja zasobów/modeli:

Ten sam punkt końcowy może zwrócić różne widoki: 'fields =...' lub 'profile = litepełne ". Jest to dodatek, a nie zamiennik do wersji.

Zalecenie: dla integracji zewnętrznych - „URI vN” + Odmowa/nagłówki zachodu słońca; dla wewnętrznych - można 'zaakceptować' lub nagłówek wersji, jeśli brama i platforma obsługują go.

4) GraphQL

Preferencje - brak globalnych wersji. Ewolucja poprzez dodanie pól/typów i depryfikacji ('@ deprecated (powód:... "")').
Zerwanie zmian - tylko w „dużych” oknach (przekrojowy obszar nazw schematów) z przewodnikiem migracji.
Uważaj na „n + 1” i nie zmieniaj znaczenia istniejących pól.

5) gRPC/Protobuf

Numery pola są niezmienne. Zaznacz usunięte pola jako „zarezerwowane”.
Dodaj pola jako opcjonalne z bezpiecznym domyślnie.
Użyj buf breaking/lint do automatycznego sprawdzania zgodności.
Pakiety/moduły wersji: 'płatności pakietowe. v1; płatności „→”. v2 ".

6) API zdarzeń (EDA)

Program imprez jest tą samą umową. Przechowywać w rejestrze schematów (Avro/JSON-Schema/Protobuf).
Tematy i wersje: 'płatności. v1. autoryzowane płatności „,”. v2. autoryzowany ".
Łamanie zmian - nowy typ zdarzenia lub nowy temat.
Gwarancje rozwoju: wstecznie kompatybilne dla konsumentów w okresie LTS.

7) Polityka w zakresie deprymacji i EBI

Wdrożenie przejrzystych zasad:
  • Deprecation: etykiety w changelogu i w specyfikacjach (OpenAPI/GraphQL SDL), nagłówek
  • „Depresja: prawdziwa” i w miarę możliwości „Zachód słońca: Wt, 31 Mar 2026 00:00:00 GMT”.
  • Komunikacja: e-mail/portal partnerski, powiadomienia o hakach internetowych, notatki o wydaniu.
  • Warunki: MINOR - 3-6 miesięcy wsparcia, MAJOR - 9-18 miesięcy (w zależności od krytyki).
  • Okna czasowe: naprawić w „API Versioning Policy”.

8) Routing i wydania

Gateway API (Kong/Apigee/Nginx/Envoy): zasady według prefiksu '/v1/', nagłówka lub mediatype.

Przykładowa trasa:

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

Canary/Blue-Green/Shadow: zwiń nową wersję na 1-5% ruchu, porównaj metryki i rejestry błędów kontraktowych.
Flagi funkcji: Ukryj zachowanie bez zmiany umowy.
Migracja zero-przestoju: z MAJOR, zapewnić podwójne zapisywanie/odczytywanie schematu danych.

9) Badanie kontraktu i kontrola zgodności

OpenAPI Diff (lub swagger-diff) - Sprawdź, czy MINOR/PATCH nie łamie schematów.
Spektralne linking - styl, wymagane metadane (wersja, Deprecation).
Umowy konsumenckie (Pact) - gwarantuje, że dostawca nie złamie klientów.
buf łamanie дла protobuf.
CI powinny spaść w łamaniu zmian bez podniesienia MAJOR.

10) Dokumentacja i SDK

Wersja specyfikacji: '/docs/api/v1/openapi. json ', '/docs/api/v2/...'.
Generuj SDK według wersji (npm/maven/pypi) z SemVer i changelog.
Zaznacz metody przestarzałe w SDK z adnotacjami/deprecated.

11) Obserwacja według wersji

Zbierać mierniki oddzielnie:
  • RPS/latency/errors per version (etykieta „api _ version”).
  • Mapy użytkowania punktu końcowego: Kto jeszcze jest na v1?
  • Wpisy: „> 10% 4xx z powodu niedopasowania kontraktu”, „starzy klienci> X% po dacie T”.

12) Buforowanie i wersje

Wersja tranzytowa poprawia pamięć podręczną CDN.

Z nagłówkiem/wersjami multimedialnymi - ostrożnie z Vary:
  • 'Vary: Accept, X-API-Version'.
  • Nie zmieniaj semantyki odpowiedzi w MINOR, aby złamać klawisze pamięci podręcznej.

13) Bezpieczeństwo

Nie szyfruj ani nie zszywaj wersji do JWT - wersja jest określona przez żądanie, a nie token.
Nie ujawniać numerów montażu wewnętrznego. Użyj „v1/v2” dla wiadomości zewnętrznych.
W MAJOR, weryfikacja walidacji, limity, maskowanie PII.

14) Migracje i auto-pomocnicy

Publikacja „Przewodnik migracyjny v1 → v2”: tabela mapowania pól, przykładowe żądania/odpowiedzi, przypadki krawędzi.
Oferujemy linery dla klientów (CLI), które podkreślają przestarzałe pola.
Dla dużych partnerów - piaskownica z dwiema wersjami i zestawem danych testowych.

15) Anty-wzory

„Wieczny v1”: brak terminów i wskaźników użytkowania.
Ukryte zmiany łamania MINOR/PATCH.
„Wersja w łańcuchu zapytań” ('? v = 2 ') - rozbija pamięć podręczną i czytelność.
„Jeden punkt końcowy to sto wartości flagi”: trudne do przetestowania/udokumentowania.

16) Lista kontrolna wdrażania

1. Wybrany model (URI/Accept/Header) dla klientów zewnętrznych i wewnętrznych.
2. SemVer dla specyfikacji i SDK, automatyczne sprawdzanie w CI.
3. Deprecation/Sunset zasad i szablonów komunikacji.
4. Brama routing + kanary, deski rozdzielcze według wersji.
5. CDC/Testy kontraktowe dla integracji krytycznych (płatności, KYC, sprawozdawczość).
6. Dokumentacja/SDK/przewodnik migracyjny jest publikowany w tym samym czasie co wydanie.
7. Plan EOL z datami i odpowiedzialnością.

17) Przykłady

17. 1 ODPOCZYNEK (URI + nagłówki)

Żądanie:

GET /v2/withdrawals/12345
Accept: application/json
Idempotency-Key: 4a1c-…-9f
Odpowiedź:
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"}]
}
Nagłówki deprymacji (na v1):

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

17. 2 Negocjacje w sprawie treści


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

17. 3 GraphQL (deprykacja w terenie)

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 Model zdarzenia

Tematy:
  • 'portfel. v1. saldo. zaktualizowany "
  • 'portfel. v2. saldo. zmieniony "(nowe zdarzenie z rozszerzonym schematem)

Programy są przechowywane w rejestrze, producent nie publikuje zdarzeń z systemem, który narusza zgodność.

18) Kontekst iGaming/fintech (praktyka)

Płatności: wejście v2 dla nowych dostawców usług płatniczych, w przypadku których rozszerza się „status ”/„ decline _ reason”; na bramce, mapowanie v1 → v2 do raportowania.
KYC: MINOR dodaje pole 'pep _ screening', klienci ignorują v1, v2 - wymaga.
Odpowiedzialne gry/limity: MAJOR zmienia model limitów (dziennie/tygodniowo). Podwójny eksport do raportu przed EOL v1.
Sprawozdawczość dla organów regulacyjnych: stałe wersje-daty: „sprawozdawczość-2025-01”.

19) Mini-polityka (przykład dla wiki)

Model: dla zewnętrznych API - „URI/vN/”; dla wewnętrznych - 'Accept:... vN + json 'lub' X-API-Version: N'.
SemVer: Dane techniczne i SDK są publikowane jako 'N. drobne. patch '. MAJOR wymaga RFC/ADR.
Kompatybilność: MINOR/PATCH - bez zmian. Łamanie → tylko przez MAJOR.
Deprecation/EOL: ≥ 90-dniowe ogłoszenie; Data wygaśnięcia w nagłówkach; Oddział LTS dla klientów krytycznych.
Kontrola: OpenAPI diff/buf breaking w CI, CDC dla integracji kluczowych.
Obserwowalność: mierniki/dzienniki z etykietą „api _ version”.
Uwolnienia: kanarka 5% ≥ 24h, a następnie w etapach do 100% z zielonych metryk.


Wynik

Wersioning nie dotyczy „/v2 w URL „, ale procesu: wyraźnych zasad ewolucji, automatycznych kontroli kompatybilności, zarządzanych wydań i poszanowania integracji. Wprowadź jasną politykę, zautomatyzuj monitorowanie i obserwowalność - a zmiany nie będą już zagrożeniem dla produktu.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.