GH GambleHub

API wersiýasy we şertnama laýyklygy

TL; DR

Gabat gelmek şowlulyk däl-de, düzgün-nyzamdyr. Takyk wersiýa syýasatyny (SemVer), üýtgeşmeleriň matematikasyny ("döwýän", ýok), şertnama synaglaryny, shema registrlerini we Sunset-proseduralaryny saklaň. Pul we gabat gelmek üçin - vN bilen berk REST/gRPC, UI-agregasiýalar üçin - '@deprecated' bilen ewolýusiýa GraphQL. Elmydama: kanareýanyň traffigi, ters gabat gelmek ≥ bir goýberiş aýlawy, migrasiýa gaýlary, meýdanlary ulanmagyň telemetriýasy.

1) Esasy düşünjeler we maksatlar

Backwards-compatible (BC): köne müşderiler täze serwere laýyk gelýär.
Forwards-compatible (FC): köne serwere täze müşderiler laýyk gelýär (çäkli).
Wire-gabat gelmek: "sim" formaty bozulmaýar (esasanam gRPC/Protobuf üçin möhümdir).
SemVer: `MAJOR. MINOR. PATCH '- şertnamany bozýarsyňyz → MAJOR-y ýokarlandyrýarsyňyz.

Maksat: döwüji üýtgeşmeleri azaltmak we öňünden aýdyp boljak migrasiýa penjirelerini üpjün etmek.

2) Üýtgeşmeleriň matrisi: näme mümkin we näme mümkin däl

Üýtgetmek görnüşiRESTgRPC (Protobuf)GraphQL
Meýdany goşmak (response)+ howpsuz+ howpsuz (täze field number)+ howpsuz
Goşmaça meýdan (request)️ Eger serwer ýok bolsa+ howpsuz+ howpsuz
Meýdany aýyrmak- döwmek- belgini gaýtadan ulansaňyz️ '@deprecated' arkaly → penjireden soň aýyrmak
Meýdanyň adyny üýtget- döwmek- (adyny, belgisini üýtgediň)️ alias/iki meýdan
Görnüşini/formatyny üýtget- döwmek- wire görnüşini üýtgedeniňizde- shema bozsa
Status/Ýalňyşlyk semantikasyny üýtget- döwmek- kodlar/jikme-jiklikler - şertnama- müşderileri döwýär
Enum tertibini üýtget️ Gymmaty boýunça howpsuz️ Eger enum belgileri durnukly bolsaAdyna görä howpsuz
Täze endpoint/usullar+ howpsuz+ howpsuz+ howpsuz
Paginasiýany/süzgüçleri üýtgetmek️ Seresaplylyk bilen, wariantlary goşuň+ Täze meýdanlar arkaly+ täze argumentler arkaly

3) Dürli API stilleri üçin syýasatlar

3. 1 REST

URI wersiýasy ('/v1/... ') ýa-da domen wersiýasy (' api-v1. '). Sözbaşy wersiýasy - diňe içerki ýagdaýlar üçin.
Goşuň, aýyrmaň: täze meýdanlar - tamam, köne - diagrammada 'deprecated' diýip belläň we azyndan bir aýlaw goýuň.
Statuslar/ýalňyşlyklar: kodlary we gurluşy 'error' üýtgetmäň. code/error. message/error. details`.
Idempotentlik üýtgewsiz: howpsuz 'POST' c 'Idempotency-Key' -ni "özüni alyp barşyň başga" çagyryşyna öwürmäň.

3. 2 gRPC / Protobuf

Meýdan belgileri mukaddes: uzakdaky belgileri gaýtadan ulanmaň, 'reserved' diýip belläň.
Diňe täze optional/repit meýdanlary goşmak; "gaty hökmany" - tassyklama arkaly, 'required' däl.
Wersiýa paketleri: 'payments. v1`, `payments. v2`.
Hyzmatlaryň laýyklygy: täze RPC → täze usul; garrylaryň özüni alyp barşyny üýtgetmeris.

proto message Payout {
reserved 4 ;//field deleted, number reserved string id = 1;
string currency = 2;
int64 amount_minor = 3;
// v2: optional string comment = 5;
}

3. 3 GraphQL

v2-siz ewolýusiýa: meýdanlary/görnüşlerini goşuň; öçürmek - penjiräniň yglan edilmegi bilen '@deprecated (reason)' arkaly.
Persisted Queries: aç-açan müşderiler üçin ak soraglaryň sanawyny ulanyň - gabat gelýändigine gözegçilik etmek has aňsat.
Field-level authZ we telemetriýa: aýyrmazdan ozal haýsy meýdanlaryň hakykatdanam ulanylýandygyny biliň.

graphql type Payout {
id: ID!
amountMinor: Long!
currency: String!
comment: String @deprecated(reason: "Use note")
note: String
}

3. 4 Webhuklar

Wersiýa ýolda ('/webhooks/v1/payments ') we wakanyň kesgitlenen konweri (' event _ id ',' type ',' ts ',' data ').
Gollary/NMAS-y üýtgewsiz saklaň; täze algoritmler - baýdakly opsiýa ýaly.
Diňe täze 'data.' we 'headers' älemleri geçer.

4) API Gateway we wersiýalary ugrukdyrmak

Rules-based routing: '/v1 'prefiksi boýunça,' X-Api-Version 'sözbaşy boýunça, domen boýunça.
Shadow/Canary: Önümçilik traffiginiň bir bölegini "kölegä" täze wersiýasyna görkeziň, jogaplary deňeşdiriň.
Rate/Quotas per-version: göçmek wagtynda köne müşderileri goraýar.

REST üçin Sunset headers:
  • 'Sunset: ' - wersiýanyň öçürilen senesi
  • 'Deprecation: true' - wersiýasy köne
  • `Link: ; rel = "deprecation" '- changelog/hyde göçmek
Mysal (Nginx-style, ýönekeýleşdirilen):
nginx location ~ ^/v2/ {
proxy_pass http://api_v2;
}
location ~ ^/v1/ {
add_header Deprecation "true";
add_header Sunset "Thu, 01 May 2026 00:00:00 GMT";
proxy_pass http://api_v1;
}

5) Shemalaryň we şertnamalaryň registrleri

OpenAPI / JSON Schema для REST; Protobuf descriptors для gRPC; SDL registry для GraphQL.
CI-barlaglar: linters + "breaking-changes check" PR-da.
Consumer-Driven Contracts (CDC): Sarp ediji synaglary (Pact/analog) - göze görünmeýän döwüklerden goramak.
Changelog: machine-readable (mysal üçin 'CHANGELOG. md '+ sanawdaky goýberiş bellikleri).

6) Meýdanlaryň ewolýusiýasy: amaly düzgünler

ID/açarlar: Täze '_ v2' meýdany we geçiş döwri bolmazdan formaty (UUID, int) üýtgetmäň.
Wagt/walýuta: UTC ISO-8601/epoch we amount_minor + currency saklaň; masştabyny (teňňe/sent) üýtgetmäň.
Enum: bellik goşuň - ok; köne manysyny üýtgetmäň. REST üçin - ints däl-de, string bahalaryny beriň.
Paginasiýa: cursor-based has durnukly; kursoryň semantikasyny üýtgetmäň.

7) Deprikasiýa we "Sunset" - protsedura

1. Bildiriş (T-90/60): changelog, hyzmatdaşlara ibermek, "Deprecation/Sunset" sözbaşylary.
2. Gaýtalanýan döwür: V1 we V2 paralel işleýär; V1 jogaplarda/bloglarda duýduryşlar bilen üpjün edilýär.
3. Telemetriýa ulanyşy: başga kim V1 diýýär? nokat aragatnaşyklary.
4. V1 doňdurmak: diňe bagfikler/çyzgysyz.
5. Öçürmek (Sunset): 410 Gone ýa-da göçmek üçin görkezmeler bilen blok sahypasy.

8) Agyrysyz goýberişler: ýerleşdiriş strategiýalary

Blue/Green ýa-da Weighted routing: 1-5-25-50-100% traffik.
"Compatibility window": daşarky API-ler üçin azyndan 1-2 sany minor çykyşy, 6-12 aýdan köp.
Feature Flags: wersiýasyny üýtgetmezden täze logika meýdançalaryny/şahalaryny goşmak üçin.
Okamak/Write-bölmek: ilki bilen täze meýdany okamak üçin goldaw goşuň, soň bolsa ýazyp başlaň.

9) Laýyklyk synagy (tejribe bukjasy)

Köne wersiýalaryň jogaplary üçin altyn-synaglar.
Diagrammalaryň Diff synaglary: CI-de breaking gadaganlygy.
V2 (shadow) üçin staging-da önümçilik ýollaryny replay.
Back/Forward ssenarileri: köne serwerde täze müşderi we tersine (FC kabul edilýän ýerde).
Webhuklaryň şertnama synaglary: goly, formaty, wagty barlamak.

10) Wersiýalaşdyryş prosesiniň metrikleri we SLO

Iň soňky MINOR-daky müşderileriň% -i (maksat Sunset-den 80% öň ≥).
Goýbermek üçin laýyklyk/elýeterlilik ýalňyşlyklary (maksat - 0).
Köne wersiýadaky jaňlaryň paýy (Sunset-e çenli azalýar).
Müşderiniň göçýän wagty (median/p95).
Latency/regression delta wersiýalarynyň arasynda (bazadan erbet däl).

11) Artefaktlaryň mysallary

OpenAPI (bölek, meýdanyň deprikasiýasy):
yaml components:
schemas:
Payout:
type: object properties:
id: { type: string, format: uuid }
amount_minor: { type: integer }
currency: { type: string }
comment:
type: string deprecated: true description: "Use note"
note: { type: string }
Protobuf (reserved we v2 paketi):
proto syntax = "proto3";
package payouts. v1;
message Payout { reserved 5; string id=1; int64 amount_minor=2; string currency=3; }
GraphQL (deprikasiýa):
graphql type Query { payout(id: ID!): Payout }

12) Ýanaşyk kanallary wersiýalaşdyrmak

SDK/CLI: SemVer + API wersiýasyna garaşlylyk, laýyklyk README-de göz öňünde tutulandyr.
Wakalar/akymlar (WS/Kafka): in 'envelope wersiýasy. version`; täze atributlar - opsiýa; dedup we rezýume wersiýalaryň arasynda birmeňzeş işleýär.
Hasabat/CSV: faýl/şlýapa adyndaky wersiýa; sag tarapdaky sütünleri goşuň; Tertibi/görnüşleri üýtgetmäň.

13) Dolandyryş we rollar

Şertnamanyň eýesi (domain owner), API Steward (düzgünler we linterler), Release Manager (Sunset/Aragatnaşyk).
Breaking-üýtgeşmeler üçin RFC prosesi: iş esaslary, migrasiýa meýilnamasy, artefaktlar, seneler.
API-iň ýeke-täk katalogy: shemalary, wersiýalary, Sunset-senenamany, aragatnaşygy görüp bilersiňiz.

14) Anti-patternler

"Sessiz" döwükler: statusyny/ýalňyşlygyny/görnüşini wersiýasyz üýtgedýäris.
Protobuf-belgileri gaýtadan ulanmak köne müşderileriň belliklerini hem ýok edýär.
Telemetri bolmadyk GraphQL - "degip" aýyrmak.
Global v2 - nokat ewolýusiýasynyň ýerine megamigrasiýa.
Jemgyýetçilik API üçin query-parametrdäki wersiýa aç-açan we gowşak shema.
Migrasiýa gidleri we mysallar ýok - hyzmatdaşlar çekilýär, möhletler bozulýar.

15) Täze wersiýanyň çykarylmagyny barlamak

  • Shema täzelendi (OpenAPI/Protobuf/SDL), linterler we breaking-checks geçdi.
  • Integrasiýa we şertnama synaglary (CDC) goşuldy.
  • SDK/kod mysaly/migrasiýa gollanmasy we Changelog taýýar.
  • 'Deprecation/Sunset' (köne wersiýa üçin) + "How to migrate" sahypasy goşuldy.
  • Canary/Shadow meýilnamasy, ölçegleri deňeşdirmek üçin alertler we daşbordlar.
  • Ters gabat gelmek ylalaşylan möhlete saklanýar.
  • Yzyna gaýtarmak meýilnamasy (rollback) we töwekgelçilik matrisi ylalaşyldy.

Gysgaça maglumat

Durnukly API "birbada" däl-de, bir prosesdir. Düzgünlere laýyklykda ýaşaň: SemVer + add-only ewolýusiýa + shemalaryň sanawy + şertnama synaglary + Sunset-proseduralary. Stilleri (REST/gRPC/GraphQL) we olaryň syýasatlaryny bölüň, API Gateway-e wersiýalary ugrukdyryň, kanareýkalar bilen çykaryň, täsirini ölçäň. Şeýlelik bilen, "döwýän garaşylmadyk ýagdaýlardan" gaça durarsyňyz, hyzmatdaşlaryň integrasiýasyny çaltlaşdyrarsyňyz we pul we gabat gelýän möhüm domenler üçin öňünden aýdylýanlygy saklarsyňyz.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.