GH GambleHub

Սեմանտիկ տարբերակումը

Semantic Versioning-ը (SemVer) պայմանագիր է, թե ինչպես է տարբերակի համարը արտահայտում փոփոխությունների բնույթը։ Ձևաչափը 'MAJOR։ MINOR. PATCH[-PRERELEASE][+BUILD].

Իմաստը

MAJOR-ը անհամատեղելի փոփոխություններ են (breaking)։

MINOR-ը հետադարձելի ֆիչեր/ընդարձակումներ է։

PATCH - սխալ/անվտանգության ուղղումներ։

Նպատակը 'API-ի կանխատեսելի էվոլյուցիան, իրադարձությունների, տվյալների սխեմաների, MSK-ի և դելիգների կանխատեսելի էվոլյուցիան առանց սպառողների հանկարծակի խափանումների։


1) Համարների ցանկը


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

Pre-rele.ru («-alpha», «-beta», «-71») - անկայուն հավաքումներ; չեն խոստանում։

Build metadata («+ sha») - չի ազդում համեմատության կարգի վրա, օգտակար է ուղու համար։

Մինչև 1։ 0. 0 ցանկացած փոփոխություն կարող է համարվել breaking (բայց ավելի լավ է հետևել կանոնները հենց սկզբից)։


2) Ի՞ նչ կարելի է համարել breaking/minor/patch

PATCH (Z):
  • Ուղիների և անվտանգության ֆիքսները առանց պայմանագրի փոփոխության։
  • Դոկ-ապդեյտները, որոնք չեն ազդում պայմանագրի վրա։
  • Օպտիմիզացիան առանց պատասխանների/իրադարձությունների/սխեմաների փոփոխության։
MINOR (Y):
  • Նոր էլեկտրամագնիսական դաշտերի/մեթոդների/էնդպոինտների ավելացումը։
  • Enum-ի ընդլայնումը, եթե սպառողները համընկնում են անծանոթ արժեքների հետ։
  • Նոր BD ինդեքսները, nullable սյունակները դեֆոլտով, նոր իրադարձությունները ավելի հին են։
MAJOR (X):
  • Դաշտերի հեռացում/վերանվանումը, տեսակների փոփոխությունը, պարտավորությունը։
  • Սեմանտիկայի/ստատուսների փոփոխությունը/ոչ պաշտոնական սխալները։
  • Սերիզացիայի ձևաչափի փոփոխությունը, կոդավորման սխեմաները, տրանսպորտի արձանագրությունները։
  • Տոպիկների սեղմումը/միաձուլումը, իրադարձության իմաստը փոխելը, կուսակցության սխեմայի փոփոխությունը։
  • BD-ի իրականացումը, որը պահանջում է «երկչափ» ստանդարտ առանց հետադարձ գործողությունների։
💡 Կանոն 'Meder-ը պարտավոր է պահպանել backward compatibility MINOR/PATCH-ում։ Եթե չեք կարող, բարձրացրեք MAJOR-ը և աջակցեք «երկու գծերը» ժամանակի ընթացքում։

3) Արտեֆակտների տարբերակումը

3. 1 REST

Տարբերակներ ՝ "URI/v1/...", վերնագրեր ("Accept: Accept: appronics/vnd. acme. game+json; version = 1 '), պարամետրը։

Առաջարկություն 'URI տարբերակը հանրային API-ի համար։ ներքին համար 'վերնագրի միջոցով c negotiation։

MINOR 'ներմուծման դաշտերի ավելացում, նոր ֆիլտրեր/ռեսուրսներ; մի փոխեք գոյություն ունեցող պատասխանները։

PATCH 'ֆիքսներ, նկարագրության հստակեցում, կայուն տեսակավորում։

3. 2 gRPC

Նոր դաշտերը 'ptional-ով։ սերվերը պետք է անտեսի անհայտ մարդիկ։

Ազդանշանների/տեսակների փոփոխությունը MAJOR (նոր փաթեթ/ծառայություն ՝ «ակտ»։ wallet. v2`).

Դաշտերը չեն հեռացնում '«deprikait + վերացնել համարը», հեռացնել միայն հաջորդ MAJOR-ում։

3. 3 GraphQL

MINOR 'նոր դաշտեր/տեսակներ/query; հեռացումը '«@ deprecated» + պատուհանի միջոցով, ամբողջական հեռացումը MAJOR-ն է։

Nullable non-nullable-MAJOR-ի փոփոխությունը։

3. 4 իրադարձություններ և կացիններ (Kafka/MSS)

Schema Registry-ում սխեմաները 'էվոլյուցիան diitive (ավելացնել դաշտերը դեֆոլտներով)։

Նոր անհամատեղելի տարբերակը նկարագրվում է նոր ստանդարտ ject/topic ('bet. settled. v2`).

Կուսակցության բանալին անփոփոխ է MAJOR-ի ներսում։

3. 5 BD սխեմաներ

«Ընդլայնիր, ապա փոխկապակցիր»։

1. Ավելացնել սյունակը (nullable/c defolt)

2. Լցնել բեքֆիլը

3. Թարգմանել ընթերցանությունը

4. Հեռացնել հինը (միայն MAJOR)։

/ III/եզակի փոփոխությունը MAJOR-ն է, ֆիչֆլագի տակ և կրկնակի ձայնագրությամբ։

3. 6 SDK/CLI

Հանրային մեթոդները/ազդանշանները նույն կանոններն են։

Ավտոմատիզացիայի համար (OpenAPI/Pro) փաթեթային անվանման և արտեֆակտների տարբերակն է։


4) Ապակայունացման քաղաքականությունը և կյանքի ցիկլը

Յուրաքանչյուր breaking փոփոխությունը նախորդում է (սովորաբար 90-180 օր արտաքին, 30-60-ի համար)։

Հաղորդակցություն ՝ changelog, e-mail/webhuki/webhuks 2019, մշակողի պորտալում։

Dance-run: Միևնույն ժամանակ պահում ենք «v1» և «v2», մենք վերահսկում ենք «v1» մասնաբաժինը։

Sunset headers (REST): `Sunset: 2026-03-31`, `Link: ; rel="deprecation"`.


5) Version negotiation

Հաճախորդը ուղարկում է ցանկալի տարբերակը + առավելագույն աջակցվող (օրինակ ՝ «Accept-Version: 1,2»)։

Սերվերը պատասխանում է «Content-Version: 2», եթե կարողանա բարձրացնել։

Երկվորյակ արձանագրություններում (WindSocket, gRPC) - Hello-ֆրեյմերի փոխանակումը 'supronted _ versions "։


6) Ինտեգրումը պրովայդերների ադապտերների հետ (ACL)

Արտաքին պրովայդերը փոխում է սխեման 'հարմարվողի ներսում պահում ենք mappers v1/v2 և արտադրում MINOR ներքին իրադարձության համար' պահպանելով մեր վճարային պայմանագիրը։

Եթե արտաքին փոփոխությունները ներխուժում են ներս, սա MAJOR-ն է մեր երկրորդական իրադարձությունը և նոր ռուսական նախագիծը։


7) Changelog և ռուսական համայնքները

Մենք հետևում ենք Keep a Changelog-ին և Conventional Commits-ին

`feat: ...` → MINOR

«fix: ... »/« chore», «docs», «perf» (առանց պայմանագրի) no PATCH

"feat!: '/' fix!:

Ձայնագրման օրինակ


[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/Eurobuf/Avro/JSON-Schema), breaking-line։

SemVer-bot: Conventional Commits-ի վերլուծությունը հաշվարկում է bump (major/minor/patch), տեղադրում է թեգը, կիսում է changelog։

CD 'առանձին deploy և rele.ru (ficheflagy/wings ակտիվացնում են նոր տարբերակը)։

Վերահսկողությունը 'մենք չենք հրապարակում «latest» RF-ում մինչև հաջողակ canary և SLO-ը։


9) Միգրացիայի և քաղաքական գործչի համար

Արգիգները (YAML/JSON) նույնպես ունեն սխեմայի տարբերակը ՝ «schema _ version: 3»։

MINOR-ը նոր միգրացիոն դաշտեր/կանոններ է։ MAJOR-ը կառուցվածքի/պարտավորության փոփոխությունն է։

V2/v3 աջակցությունը վալիդատորում; կիսագնդերի խմբագիրը անհամատեղելի զեկույցի հետ։


10) Փորձարկումներ

Consumer-driven www.ract tes.ru (Pact) ՝ յուրաքանչյուր ինտեգրման համար։

Schema-evolution tes.ru: հին payload 's-ը նոր սխեմայի վրա և հակառակը։

Replay 'prod-prod' v1 'n' v2 'ստվերում։

Property-based 'դիմադրություն անծանոթ գազերի/enum։


11) Դիտարկումը ըստ տարբերակների

Թեգիրուկները/լոգները '«api _ version», «schema _ version», «event _ version»։

Dashbords-ը բացատրում է, որ տարբերակների մասնաբաժինը, սխալը/լատենտը '«v1/v2»։

Ալերտներ ՝ եթե «v1» -ը չի նվազում պլանով։ 4xx/5xx x-ի աճը «v2» -ից հետո։


12) Միգրացիոն փամփուշտները առանց խոչընդոտների

Dultwrite + համեմատությունը դիստերգենցիաների հետ մինչև կարդալը։

Shadow compare-ը դասակարգման/կանոնների համար։

Canary tenantam/տարածաշրջաններով; feature flags արագ արձագանքման համար։

Expand → Migrate → Contract (БД).

Read-compat/Write-compat պատուհանները. Նոր տարբերակը կարդում է հին տվյալները, բայց գրում է նոր ձևաչափով։


13) Anti-patterna

«Յուրաքանչյուր դաշտում տարբերակը» փոխարենը ռեսուրսի/իրադարձությունների տարբերակման։

Թաքնված breaking-փոփոխությունները MINOR-ի տակ (օրինակ, դեֆոլտների փոփոխությունը)։

Առանց պատուհանի և սպառման մետրի հեռացումը։

«Ընդմիշտ v1» 'հին տարբերակների հեռացման պլանի բացակայությունը տեխնոլոգիական և խոցելիությունը։

Բիզնեսի տարբերակների խառնուրդը և բեռնարկղային պատկերի տարբերակները։


14) Տարբերակման քաղաքականության չեկի ցուցակ

  • Արձանագրված է տարբերակների ձևաչափը և ճշմարտության աղբյուրները (Registry/Portal)։
  • Հաստատվել է արտեֆակտների breaking-չափանիշների ցանկը (REST/gRPC/GraphQL/events/DB)։
  • Ապակայունացման գործընթացը 'ժամկետներ, հաղորդակցություն, sunset/banners, drix-run։
  • Ավտոմատ diff-cheker սխեմաները և Conventional Commits-ը։
  • Տարբերակների սպառման տախտակները և ալերտները։
  • Pleybuki to (expand/migrate/www.ract, dom-write, shadow)։
  • Գեորգի և MSK-ն ունեն սեփական տարբերակներ և գրանցումներ։
  • Մոսկվան «ինչպես ընտրել» տարբերակը հաճախորդների համար և «ինչպես բարձրացնել» թիմերի համար։

15) Տարբերակման օրինակներ (iGaming-cass)

«BetSettled v1 '71' v2» իրադարձությունը ավելացրեց «void _ reason» (optional) և «tax»։ amount` (optional) — MINOR. Նրանք տեղափոխում էին «payout '07' win _ amount» - MAJOR, նոր ռուսական։

REST '/wallets/transfer ': ավելացրեցիք ֆիլտրը'? tenium _ id = "- MINOR։ Նրանք փոխեցին սխալի կոդը ՝ «409 '108' 422» - MAJOR։

GraphQL 'նշեցին "Player. որպես "@ deprecated" հօգուտ "Player. aGeGROP "- MINOR-ում արտադրությունը, MAJOR-ի հեռացումը X- ից հետո։

BD 'ավելացրեցին "bonus _ wager _ left' nullable - MINOR սյունակը։ Նրանք արեցին non-nox և հեռացրեցին «bonus _ left» - MAJOR (expand/www.ract միջոցով)։


Եզրակացություն

Սեմանտիկ տարբերությունը ոչ թե թվերի մասին է, այլ վստահության և կանխատեսելիության մասին։ Պարզ կանոններ, ավտոմատ ստուգումներ, որոնք վերահսկվում են, և թափանցիկ հեռաչափությունը թույլ է տալիս զարգացնել API-ը, իրադարձությունները և սխեմաները առանց ինտեգրման ցավի, և հաճախ փոփոխություններ կատարել, ապահով և իմաստալից։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։