GH GambleHub

Semantik versiya

Semantic Versioning (SemVer) - versiya nömrəsinin dəyişikliklərin xarakterini necə əks etdirdiyinə dair müqavilə. Format: MAJOR. MINOR. PATCH[-PRERELEASE][+BUILD].

Mənası:
  • MAJOR - Uyğunsuz dəyişikliklər (breaking).
  • MINOR - əks-uyumlu fiş/uzantılar.
  • PATCH - əks-uyğun səhv/təhlükəsizlik düzəlişləri.

Məqsəd: API-nin, hadisələrin, məlumat sxemlərinin, SDK-ların və konfiqurasiyaların gözlənilən təkamülü.


1) Nömrələrin konvensiyası


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

Pre-release ('-alpha', '-beta', '-rc') - qeyri-sabit yığımlar; uyğunluq vəd etmir.
Build metadata ('+ sha') - müqayisə qaydasına təsir etmir, izləmə üçün faydalıdır.
1 qədər. 0. 0 hər hansı bir dəyişiklik breaking hesab edilə bilər (lakin əvvəldən qaydalara riayət etmək daha yaxşıdır).


2) Breaking/minor/patch saymaq üçün nə

PATCH (Z):
  • Kontrakt dəyişdirilmədən bug və təhlükəsizlik fiksləri.
  • Müqaviləyə təsir etməyən Doc Update.
  • Cavabları/hadisələri/sxemləri dəyişdirmədən optimallaşdırma.
MINOR (Y):
  • Yeni isteğe bağlı sahələrin/metodların/end nöqtələrinin əlavə edilməsi.
  • İstehlakçılar naməlum dəyərlərə dözümlü olduqda enum dəyərlərinin genişləndirilməsi.
  • Yeni DB indeksləri, nullable sütunları, köhnə əlavə yeni hadisələr.
MAJOR (X):
  • Sahələrin silinməsi/adının dəyişdirilməsi, növlərin dəyişdirilməsi, məcburiyyət.
  • Semantika/status/səhv kodlarının dəyişdirilməsi.
  • Serializasiya formatının, açar sxeminin, nəqliyyat protokolunun dəyişdirilməsi.
  • Topiklərin sıxılması/birləşməsi, hadisənin mənasının köçürülməsi, partizan sxeminin dəyişdirilməsi.
  • Əks uyğunluq olmadan «iki fazalı» keçid tələb edən BD miqrasiyası.
💡 Qayda: Producer MINOR/PATCH daxilində backward compatibility saxlamağa borcludur. Edə bilmirsinizsə, MAJOR-u artırın və miqrasiya dövründə «iki xətt» saxlayın.

3) Artefaktlara görə versiyalaşdırma

3. 1 REST

Variantlar: 'URI/v1/...', başlıqlar ('Accept: application/vnd. acme. game+json; version = 1 '), parametr.
Tövsiyə: ictimai API üçün URI versiyası; daxili üçün - c negotiation başlığı vasitəsilə.
MINOR: isteğe bağlı sahələrin, yeni filtrlərin/resursların əlavə edilməsi; mövcud cavabları dəyişdirməyin.
PATCH: fiks, təsvirin dəqiqləşdirilməsi, sabit çeşidləmə.

3. 2 gRPC

MAJOR (yeni paket/xidmət: 'acme. wallet. v2`).
Yeni sahələr - optional işarəsi ilə; server naməlum görməməzlikdən gəlməlidir.
Sahələr silinmir: «deprikeyt + bir nömrə ayırın», silmək - yalnız növbəti MAJOR-da.

3. 3 GraphQL

MINOR: yeni sahələr/növləri/query; silinir - '@deprecated' + miqrasiya pəncərəsi vasitəsilə, tam silinir - MAJOR.
Dəyişmək nullable → qeyri-nullable - MAJOR.

3. 4 Hadisələr və Topiklər (Kafka/SQS)

Sxemlər Schema Registry: təkamül additive (defolt ilə sahələr əlavə).
Yeni uyğun olmayan versiya → yeni subject/topic ('bet. settled. v2`).
Partizan açarı MAJOR daxilində dəyişməz olaraq qalır.

3. 5 DB sxemləri

«Genişləndirin, sonra çevirin»:

1. Sütun əlavə edin (nullable/c defolt) →

2. Arxanı doldurun →

3. Oxu tərcümə →

4. Köhnəni silin (yalnız MAJOR-da).

/ RK/unikallığının dəyişdirilməsi - MAJOR, ficheflag və ikiqat qeyd altında.

3. 6 SDK/CLI

İctimai metodlar/işarələr eyni qaydalardır.
Avtogenerasiya üçün (OpenAPI/Proto) - paket adı və artefaktların versiyası.


4) Deprikasiya siyasəti və həyat dövrü

Hər bir fasilə dəyişikliyindən əvvəl deprikasiya baş verir (adətən xarici üçün 90-180 gün, daxili üçün 30-60 gün).
Rabitə: changelog, e-mail/veb-hook partnyorları, geliştirici portalında banner.
Dual-run rejimi: paralel olaraq 'v1' və 'v2' saxlayırıq, trafikin payını 'v1' izləyirik.
Sunset headers (REST): `Sunset: 2026-03-31`, `Link: <url>; rel="deprecation"`.


5) Version negotiation

Müştəri istədiyiniz + maksimum dəstəklənən versiyanı göndərir (məsələn, 'Accept-Version: 1,2').
Server 'Content-Version: 2' cavab verir.
İki yönlü protokollarda (WebSocket, gRPC) - 'supported _ versions' ilə Hello-frame mübadiləsi.


6) Provayder adapterləri ilə inteqrasiya (ACL)

Xarici provayder sxemi dəyişir - adapter daxilində v1/v2 mapperlərini saxlayırıq və domen müqaviləmizi saxlayaraq daxili hadisə üçün MINOR buraxırıq.
Xarici dəyişikliklər içəriyə girirsə - bu bizim domen hadisəsinin MAJOR və yeni subject.


7) Changelog və kommit işarələri

Keep a Changelog və Conventional Commits aşağıdakı:
  • `feat:...` → MINOR
  • 'fix:... '/' chore', 'docs', 'perf' (müqaviləsiz) → PATCH
  • 'feat!: '/' fix!: '/' refactor!:' və ya 'BREAKING CHANGE:' bədən → MAJOR
Qeyd nümunəsi:

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

8) Buraxılışların avtomatlaşdırılması

CI: sxem validatorları (OpenAPI/Protobuf/Avro/JSON-Schema), breaking-diff detekti.
SemVer-bot: Conventional Commits → analizi bump (major/minor/patch) hesablayır, etiket qoyur, generit changelog.
CD: ayrı deploy və release (fitness/konfiqlər yeni versiyanı aktivləşdirir).
Nəzarət: uğurlu canary və razılaşdırılmış SLO qədər PRO-da 'latest' dərc etmirik.


9) Konfiqurasiya və siyasət üçün semantika

Konfiqlərin də sxem versiyası var: 'schema _ version: 3'.
MINOR - yeni isteğe bağlı sahələr/qaydalar; MAJOR - strukturun/öhdəliyin dəyişdirilməsi.
Validatorda v2/v3 dəstəyi; uyğunsuzluq hesabatı ilə konfiqurasiya miqratoru.


10) Uyğunluq testi

Consumer-driven contract tests (Pact): hər inteqrasiya üçün.
Schema-evolution tests: yeni sxemdə köhnə payload 'və əksinə.
Replay: gölgədə 'v1' na 'v2' prod trafikini oynatmaq.
Property-based: naməlum sahələrə/enum müqavimət.


11) Versiyalara görə müşahidə

Ölçü/logları etiketləyin: 'api _ version', 'schema _ version', 'event _ version'.
Daşbordlar miqrasiyası: versiyalar üzrə trafik payı, səhv/gecikmə 'v1/v2'.
Alertlər: əgər 'v1' plan üzrə azalmasa; 'v2' buraxıldıqdan sonra 4xx/5xx artım.


12) Dayanmadan miqrasiya patternləri

Expand → Migrate → Contract (БД).
Dual write + oxu keçid əvvəl divergency müqayisə.
Sıralama/qaydalar üçün Shadow compare.
Tenant/regionlarda Canary; sürətli geri dönüş üçün feature flags.
Read-compat/Write-compat pəncərələri: yeni versiya köhnə məlumatları oxuyur, lakin yeni formatda yazır.


13) Anti-nümunələr

«Hər sahədə versiya» əvəzinə resurs/hadisə versiyası.
MINOR altında gizli fasilə dəyişiklikləri (məsələn, defolt dəyişikliyi).
Pəncərə və istehlak metrləri olmadan deprikate aradan qaldırılması.
«Əbədi v1»: Köhnə versiyaların çıxarılması planının olmaması → texniki borclar və zəifliklər.
Biznes versiyası və konteyner görüntü versiyası qarışdırılması.


14) Version siyasətinin çek siyahısı

  • Versiya formatı və həqiqət mənbələri qeydə alınmışdır (Registry/Portal).
  • Artefaktlar üzrə breaking-meyarlar siyahısı təsdiq edilmişdir (REST/gRPC/GraphQL/events/DB).
  • Deprikasiya prosesi: vaxt, rabitə, sunset/banner, dual-run.
  • Avtomatik diff-checker sxemləri və Conventional Commits.
  • Dashboard istehlak versiyası və alert.
  • Miqrasiya playbook (expand/migrate/contract, dual-write, shadow).
  • Konfiqlər və SDK öz versiyaları və registrləri var.
  • Müştərilər üçün «versiyanı necə seçmək» və komandalar üçün «necə artırmaq» sənədləşdirilməsi.

15) Version nümunələri (iGaming-cases)

Hadisə 'BetSettled v1' → 'v2': əlavə 'void _ reason' (optional) və 'tax. amount` (optional) — MINOR. 'payout' → 'win _ amount' - MAJOR, yeni subject.
REST '/wallets/transfer ': əlavə filter'? tenant _ id = '- MINOR. Səhv kodu dəyişdirildi '409' → '422' - MAJOR.
GraphQL: 'Player. age 'kimi' @deprecated 'Player lehinə. ageGroup '- MINOR-da buraxılış, X dövründən sonra MAJOR-da çıxarılma.
BD: 'bonus _ wager _ left' nullable - MINOR sütunu əlavə edildi. Qeyri-null etdi və silindi 'bonus _ left' - MAJOR (expand/contract vasitəsilə).


Nəticə

Semantik versiyalaşdırma rəqəmlərlə deyil, etimad və proqnozlaşdırılabilirliklə bağlıdır. Aydın qaydalar, avtomatik yoxlamalar, nəzarət edilən deprikasiyalar və şəffaf telemetriya API-ni inkişaf etdirməyə imkan verir, inteqrasiya üçün ağrısız hadisələr və sxemlər - və dəyişiklikləri tez-tez, təhlükəsiz və mənalı şəkildə buraxın.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.