GH GambleHub

სემანტიკური ვერსია

Semantic Versioning (SemVer) - ხელშეკრულება იმის შესახებ, თუ როგორ ასახავს ვერსიის ნომერი ცვლილებების ბუნებას. ფორმატი: MAJOR. MINOR. PATCH[-PRERELEASE][+BUILD].

მნიშვნელობა:
  • MAJOR - შეუთავსებელი ცვლილებები.
  • MINOR - საპირისპირო ფიჩები/გაფართოება.
  • PATCH - შეცდომების/უსაფრთხოების საპირისპირო კორექტირება.

მიზანი: API- ს პროგნოზირებადი ევოლუცია, მოვლენები, მონაცემთა სქემები, SDK და კონფიგურაცია მომხმარებელთა უეცარი ავარიის გარეშე.


1) ნომრების კონვენცია


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

Pre-release ('-alpha', '-beta', '-rc') - არასტაბილური შეკრებები; არ გვპირდებიან თავსებადობას.
Build metadata ('+ sha') - არ მოქმედებს შედარების პროცედურაზე, სასარგებლოა ტრეკისთვის.
1-მდე. 0. ნებისმიერი ცვლილება შეიძლება ჩაითვალოს breaking (მაგრამ უმჯობესია დაიცვან წესები თავიდანვე).


2) რა ითვლება breaking/minor/patch

PATCH (Z):
  • შეცდომებისა და უსაფრთხოების ფიქსიები ხელშეკრულების შეცვლის გარეშე.
  • Doc apdates, რომლებიც გავლენას არ ახდენენ ხელშეკრულებაზე.
  • ოპტიმიზაცია პასუხების/მოვლენების/სქემების შეცვლის გარეშე.
MINOR (Y):
  • ახალი არჩევითი ველების/მეთოდების/ენდოინტების დამატება.
  • Enum- ის გაფართოება მნიშვნელობებით, თუ მომხმარებლები მოუთმენლად ელიან უცნობ მნიშვნელობებს.
  • ახალი BD ინდექსები, nullable სვეტები ნაგულისხმევი, ახალი მოვლენები ძველების გარდა.
MAJOR (X):
  • ველების მოცილება/შეცვლა, ტიპების შეცვლა, სავალდებულო.
  • სემანტიკის/სტატუსის/შეცდომების კოდების შეცვლა.
  • სერიალიზაციის ფორმატის შეცვლა, გასაღების სქემები, ტრანსპორტის პროტოკოლი.
  • ტოპიკების შეკუმშვა/შერწყმა, მოვლენის მნიშვნელობის გადაცემა, გარიგების სქემის შეცვლა.
  • მონაცემთა ბაზის მიგრაცია, რომელიც მოითხოვს „ორფაზიან“ გადართვას საპირისპირო თავსებადობის გარეშე.
💡 წესი: Producter ვალდებულია შეინარჩუნოს backward კომპოზიცია MINOR/PATCH ფარგლებში. თუ არ შეგიძლიათ, გაზარდეთ MAJOR და შეინარჩუნეთ მიგრაციის პერიოდის „ორი ხაზი“.

3) არტეფაქტების ვერსია

3. 1 REST

პარამეტრები: 'URI/v1/...', სათაურები ('Accept: განაცხადი/vnd. acme. game+json; version = 1 '), პარამეტრი.
რეკომენდაცია: URI ვერსია საჯარო API- სთვის; შიდა - სათაურით negotiation.
MINOR: არჩევითი ველების, ახალი ფილტრების/რესურსების დამატება; არ შეცვალოთ არსებული პასუხები.
PATCH: ფიქსიები, აღწერილობების დახვეწა, სტაბილური დახარისხება.

3. 2 gRPC

ხელმოწერების/ტიპების შეცვლა MAJOR (ახალი პაკეტი/მომსახურება: 'acme. wallet. v2`).
ახალი ველები - ეტიკეტით optional; სერვერმა უნდა უგულებელყოს უცნობი.
ჩვენ ვერ ვიშორებთ მინდვრებს: „depricate + დაიცავით ნომერი“, წაშლა - მხოლოდ შემდეგ MAJOR- ში.

3. 3 GraphQL

MINOR: ახალი ველები/ტიპები/query; მოცილება - '@ deprecated' + მიგრაციის ფანჯრის მეშვეობით, სრული მოცილება - MAJOR.
არაკომერციული - არაკომერციული - MAJOR.

3. 4 მოვლენები და ტოპიკა (Kafka/SQS)

სქემები Schema Registry- ში: additive ევოლუცია (დაამატეთ ველები ნაგულისხმევი).
ახალი შეუთავსებელი ვერსია არის ახალი subject/topic ('bet. settled. v2`).
განაწილების გასაღები უცვლელია MAJOR- ის შიგნით.

3. 5 DD სქემები

„გააფართოვე, შემდეგ ჩამოიბანეთ“:

1. დაამატეთ სვეტი (nullable/ერთად ნაგულისხმევი)

2. შეავსეთ ზურგჩანთა

3. კითხვის თარგმნა

4. ამოიღეთ ძველი (მხოლოდ MAJOR- ში).

ტიპის/RK/უნიკალურობის ცვლილება - MAJOR, ფიჩფლაგის ქვეშ და ორმაგი ჩანაწერი.

3. 6 SDK/CLI

საჯარო მეთოდები/ხელმოწერები - იგივე წესები.
ავტო წარმოებისთვის (OpenAPI/Proto) - პაკეტის სახელისა და არტეფაქტების ვერსია.


4) დეკრიმინალიზაციის პოლიტიკა და სასიცოცხლო ციკლი

თითოეულ breaking ცვლილებას წინ უძღვის დეკრიმინალიზაცია (ჩვეულებრივ, გარეგნობისთვის 90-180 დღე, შიდა 30-60).
კომუნიკაციები: changelog, el-mail/webhuks პარტნიორები, ბანერები დეველოპერის პორტალში.
ორმაგი რეჟიმში: პარალელურად ჩვენ ვატარებთ 'v1' და 'v2', ვაკვირდებით 'v1' ტრაფიკის წილს.
Sunset headers (REST): `Sunset: 2026-03-31`, `Link: <url>; rel="deprecation"`.


5) Version negotiation

კლიენტი აგზავნის სასურველ ვერსიას + მაქსიმალური მხარდაჭერილი (მაგალითად, 'Accept-Version: 1.2').
სერვერი პასუხობს 'შინაარსის ვერსიას: 2', თუ მას შეეძლო გაზრდა.
ორმხრივ ოქმებში (WebSocket, gRPC) - Hello ჩარჩოების გაცვლა „მხარდაჭერილი _ ვერსიებით“.


6) ინტეგრაცია პროვაიდერების ადაპტერებთან (ACL)

გარე პროვაიდერი ცვლის სქემას - ადაპტერის შიგნით, ჩვენ ვატარებთ mappers v1/v2 და ვაძლევთ MINOR- ს შიდა მოვლენისთვის, ინახავს ჩვენს დომენის კონტრაქტს.
თუ გარე ცვლილებები იშლება შიგნით, ეს არის ჩვენი დომენის ღონისძიების MAJOR და ახალი ქვეგრაფი.


7) Changelog და Commites ეტიკეტები

ჩვენ მივყვებით Keep a Changelog და Conventional Commits:
  • `feat:...` → MINOR
  • 'fix:... '/' chore', 'docs', 'perf' (ხელშეკრულების გარეშე )/PATCH
  • 'feat!: '/' fix!: '/' refactor!:' ან 'BREAKING CHANGE:' სხეულში MAJOR
ჩაწერის მაგალითი:

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

8) გამოშვების ავტომატიზაცია

CI: სქემების შემსრულებლები (OpenAPI/Protobuf/Avro/JSON-Schema), breaking დიფების დეტალი.
SemVer-bot: Conventional Commits- ის ანალიზი - ითვლის bump- ს (major/minor/patch), ათავსებს ჭდეებს, წარმოქმნის changelog.
CD: ცალკეული deploy და release (ficheflagies/კონფისკაცია ააქტიურებს ახალ ვერსიას).
კონტროლი: ჩვენ არ ვაქვეყნებთ 'latest- ს PRO- ს წარმატებულ კანარამდე და შეთანხმებულ SLO- სთან.


9) კონფიგურაციის სემანტიკა და პოლიტიკოსი

კონფიგურაციებს (YAML/JSON) ასევე აქვთ სქემის ვერსია: 'schema _ version: 3'.
MINOR - ახალი არჩევითი ველები/წესები; MAJOR - სტრუქტურის/სავალდებულო ცვლილება.
V2/v3 მხარდაჭერა მოვალეობის შემსრულებელში; ჩამორთმევის მიგრანტი შეუთავსებლობის ანგარიშით.


10) თავსებადობის ტესტირება

Consumer-driven კონტრაქტები: თითოეული ინტეგრაციისთვის.
Schema-evolution tests: ძველი payload- ის გაშვება ახალ სქემაზე და პირიქით.
Replay: სარეკლამო ტრაფიკის რეპროდუქცია 'v1' on 'v2' ჩრდილში.
Property-based: უცნობი მინდვრების წინააღმდეგობა/enum.


11) დაკვირვება ვერსიით

დააკვირდით მეტრიკებს/ლოგებს: 'app_ version', 'schema _ version', 'event _ version'.
მიგრაციის დაშბორდები: ტრეფიკის წილი ვერსიით, შეცდომა/ლატენტობა 'v1/v2'.
ალერტა: თუ 'v1' არ მცირდება გეგმის მიხედვით; სიმაღლე 4xx/5xx გამოშვების შემდეგ 'v2'.


12) მიგრაციის ნიმუშები

Expand → Migrate → Contract (БД).
Dual write + Divergents- ის შედარება კითხვის შეცვლამდე.
Shadow compare რანგის/წესებისთვის.
ჩრდილები/რეგიონები; feature flags სწრაფი დარტყმისთვის.
Read-compat/Write-compat ფანჯარა: ახალი ვერსია კითხულობს ძველ მონაცემებს, მაგრამ წერს ახალ ფორმატში.


13) ანტი შაბლონები

„ვერსია თითოეულ სფეროში“ რესურსის/ღონისძიების ვერსიის ნაცვლად.
ფარული breaking ცვლილებები MINOR- ის ქვეშ (მაგალითად, ნაგულისხმევი ცვლილება).
გამორთული ფანჯრის გარეშე და მოხმარების მეტრიკა.
„სამუდამოდ v1“: ძველი ვერსიების მოხსნის გეგმის არარსებობა სხვადასხვა დოლგებისა და დაუცველების შესახებ.
ბიზნეს ვერსიისა და კონტეინერის გამოსახულების ვერსიის ნაზავი.


14) ვერსიის პოლიტიკის სია

  • დაფიქსირდა ვერსიების ფორმატი და ჭეშმარიტების წყაროები (რეგისტრი/პორტალი).
  • დამტკიცდა არტეფაქტების კრიტერიუმების სია (REST/gRPC/GraphQL/events/DB).
  • დეკრიმინალიზაციის პროცესი: ვადები, კომუნიკაცია, sunset/ბანერები, ორმაგი რუნი.
  • ავტომატური diff ჩეკერი სქემები და Conventional Commits.
  • დაშბორდები ვერსიისა და ალერტის მოხმარებისთვის.
  • მიგრაციის playbows (expand/migrate/contract, ორმაგი write, shadow).
  • კონფისკაციებს და SDK- ს აქვთ საკუთარი ვერსიები და რეესტრი.
  • დოკუმენტაცია „როგორ ავირჩიოთ ვერსია“ მომხმარებლებისთვის და „როგორ გავზარდოთ“ გუნდებისთვის.

15) ვერსიების მაგალითები (iGaming შემთხვევები)

ღონისძიება 'BetSettled v1' v2 ': დაამატა' void _ reason '(optional) და' tax. amount` (optional) — MINOR. გადაკეთდა 'payout' '' win _ amount '- MAJOR, ახალი ქვეგრაფი.
REST '/wallets/transfer ': დაამატეთ ფილტრი'? tenant _ id = '- MINOR. შეცვალა შეცდომის კოდი '409' '' 422 '- MAJOR.
GraphQL: დაიმახსოვრე 'Player. age 'როგორც' @ deprecated '' 'Player- ის სასარგებლოდ. aGeGroup '- გამოშვება MINOR- ში, წაშლა MAJOR- ში X- ის შემდეგ.
BD: დაამატეთ სვეტი 'bonus _ wager _ left' nullable - MINOR. მათ გააკეთეს non-null და წაშალეს 'bonus _ left' - MAJOR (ექსპანსიის/კონტრაქტის საშუალებით).


დასკვნა

სემანტიკური ვერსია არ ეხება ციფრებს, არამედ ნდობასა და პროგნოზირებას. მკაფიო წესები, ავტომატური შემოწმებები, კონტროლირებადი დეფექტები და გამჭვირვალე ტელემეტრია საშუალებას გაძლევთ განვითარდოთ API, მოვლენები და სქემები ინტეგრაციისთვის ტკივილის გარეშე - და ხშირად, უსაფრთხო და მნიშვნელოვანი ცვლილებები გამოიტანოთ.

Contact

დაგვიკავშირდით

დაგვიკავშირდით ნებისმიერი კითხვის ან მხარდაჭერისთვის.ჩვენ ყოველთვის მზად ვართ დაგეხმაროთ!

ინტეგრაციის დაწყება

Email — სავალდებულოა. Telegram ან WhatsApp — სურვილისამებრ.

თქვენი სახელი არასავალდებულო
Email არასავალდებულო
თემა არასავალდებულო
შეტყობინება არასავალდებულო
Telegram არასავალდებულო
@
თუ მიუთითებთ Telegram-ს — ვუპასუხებთ იქაც, დამატებით Email-ზე.
WhatsApp არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.