GH GambleHub

API şertnama laýyklygy

Näme üçin şertnama laýyklygy zerur?

Şertnama laýyklygy, API-iň bar bolan integrasiýalary bozmazdan ösmek ukybydyr. Artýan API ulgamlarynda müşderileriň kody köplenç üýtgeýär; gabat gelmek, "uly geçişleri" gurnamazdan, çitleri iteratiw goýbermäge mümkinçilik berýär.

Esasy pikir: şertnama - birmeňzeş, üýtgeşmeler laýyklyk kadalary boýunça geçirilýär we awtomatiki usulda barlanýar.

Esasy düşünjeler

Şertnama - interfeýsiň resmi aýratynlygy: çeşmeler/usullar/wakalar, maglumat shemalary, ýalňyşlyk kodlary, çäkler, SLA, howpsuzlyk talaplary.
Üpjün ediji (provider) - API eýesi. Sarp ediji (consumer) - müşderi/integrasiýa.

Gabat gelýär:
  • Backward: Täze üpjün ediji köne sarp edijiler bilen işleýär.
  • Forward: köne üpjün ediji täze sarp edijiler bilen işleýär (adatça "çydamly okyjylar" tarapyndan gazanylýar).
  • Doly: backward we forward (iň güýçli wariant).
  • Additivity - bar bolanlary döwmezden goşmaça elementleri goşmak.

Wersiýa syýasaty

Semantic Versioning (maslahat berilýär):
  • MAJOR - bozýan üýtgeşmeler (diňe täze API setiri çykarylanda: '/v2 ',' service. v2`).
  • MINOR - goşmaça üýtgeşmeler (täze goşmaça meýdanlar/usullar).
  • PATCH - şertnamany üýtgetmezden düzedişler.
  • Deprecation Policy: köne elementleriň yglan edilmegi, goldaw penjiresi (sunset), sözbaşy/meta maglumatlar duýduryşlary, aýyrmak meýilnamasy.

Howpsuz vs howply üýtgeşmeler

Howpsuz (adatça backward-compatible)

JSON/Protobuf/Euro-a goşmaça meýdan goşmak.
Täze endpoint/usul/wakany goşmak.
Sarp edijiler näbelli gymmatlyklara çydamly bolsa, täze gymmatlyklar bilen giňeltmek.
Iň pes çäkleri berkitmezden çäkleri ýokarlandyrmak (mysal üçin 'maxItems').
Dogry defoltlar bilen nullable goşmak.
Düşündirişleriň/mysallaryň tekstini üýtgetmek.

Howply (laýyklygy bozýar)

Meýdanlaryň adyny üýtgetmek/aýyrmak, olaryň görnüşini ýa-da borçlylygyny üýtgetmek.
Status-kodlaryň/ýalňyşlyklaryň semantikasynyň üýtgemegi (mysal üçin '200', '204' ýa-da '404' boldy).
ID formatyny üýtgetmek (UUID → int).
Wersiýasyz tassyklamany berkitmek (has berk minimumlar/patternler).
gRPC akymlarynda/wakalarynda tertibi we gurluşy üýtgetmek.
Täze meýdanlar üçin Protobuf bellik belgilerini gaýtadan ulanmak.

Özara gatnaşyk stilleri boýunça gabat gelmek

REST/HTTP + JSON Schema

Additivity: Täze meýdanlary 'optional '/' nullable' diýip belleýäris.
Müşderide Tolerant Reader: näbelli ýerleri äsgermezlik etmek; tertibe bil baglamazlyk.
Wersiýalanma: major - ýolda ('/v2 ') ýa-da mediatipde (' application/vnd. example. v2+json`).
ETag/If-Match: ýaryşsyz howpsuz täzelenmeler üçin.
Hatalar: ýekeje format ('type', 'code', 'title', 'detail', 'trace _ id'), 'code' -ni maýorsyz üýtgetmäň.
Paginasiýa: kursorlar ofset has gowy; 'next _ cursor' meýdançalaryny goşuň, bar bolanlaryň manysyny üýtgetmäň.

gRPC / Protobuf

Bellikleriň belgisi üýtgewsiz. Öçürilen bellikleri gaýtadan ulanmaň.
Täze meýdanlar - 'optional '/' repeated' serwerde akylly defoltlar.
Akym-RPC-daky habarlaryň tertibini we borçlylygyny üýtgetmäň.
Ýalňyşlyklaryň ýagdaýy - durnukly ('INVALID _ ARGUMENT', 'FAILED _ PRECONDITION' we ş.m.); täze semantika → usulyň/hyzmatyň täze wersiýasy.

Event-driven (Kafka/NATS/Pulsar) + Avro/JSON Schema

Wakalaryň ady: 'domain. action. v{major}`.
Täze meýdanlar - goşmaça; ýadro we baýlaşdyryş ('.enriched').
Shema registrleri: Tema/waka boýunça laýyklyk düzgünleri (BACKWARD/FORWARD/FULL).
Enum giňeltmek sarp edijileriň tarapynda tolerant reader bilen rugsat berilýär.
Partizan açaryny/tertibini üýtgetmek = bozýan üýtgeşmeler.

GraphQL

Meýdanlary/görnüşleri goşmak - howpsuz; aýyrmak/adyny üýtgetmek - diňe @deprecated we göçmek penjiresi arkaly.
Major bolmazdan görnüşleriňizi/nullable etmäň.
Complexity/depth gözegçilik - çäklendirmeler şertnamanyň bir bölegidir.

Durnukly ewolýusiýanyň nusgalary

Additive-first: döwmezden giňeldiň.
Capability negotiation: Müşderiler goldaýandyklaryny habar berýärler (sözbaşylar/parametrler/ylalaşyklar), serwer sazlanýar.
Şertnamanyň çäkleri: MGC-ni (iň az kepillik şertnamasy) belläň we giňeltmeleri bölüň (ters piramida modeli).
Tolerance by default: Müşderiler gereksiz zady äsgermezlik edýärler we näbelli enum (fallback) bahalaryny dogry dolandyrýarlar.
Dual-write/Dual-emit: major üýtgeşmelerinde birnäçe wagt paralel 'v1' we 'v2' çykaryň.
Sunset headers/Events: wersiýalaryň aýrylmagy barada öňünden habar beriň.

Governance we awtomatlaşdyryş

API linterleri:
  • OpenAPI/Spectral: at, paginasiýa, ýalňyşlyk kodlary, meýdan formatlary.
  • Buf/Protobuf: bellikleri gaýtadan ulanmagy gadagan etmek, paketleri bellik etmek.
  • AsyncAPI/Schema Registry: CI derejesindäki shemalaryň laýyklygy.
  • Şertnamalaryň katalogy (SSOT): diffleriň taryhy bolan shemalaryň/wersiýalaryň merkezleşdirilen sanawy.
  • API Guild: düzgünleri, şablonlary we üýtgeşmeleri kabul edýän gildiýa/komitet.
  • Change Management: RFC/ADR, release notes, migrasiýa gidleri.

Laýyklyk synagy

CI-de Schema-diff: Bölýän üýtgeşmeleri bloklaýarys (OpenAPI-diff, Buf breaking, SR compatibility).
Consumer-Driven Contracts (CDC): Pact/şuňa meňzeş - belli bir sarp edijiniň şertnamalaryna garşy üpjün edijini barlamak.
Golden samples: regress üçin salgylanma soraglary/jogaplar we wakalar.
E2E Canary: traffigiň paýyna aýlanmak/aýry-aýry konsumer toparlary.
Chaos/latency: wagtlary/retraýlary barlamak - latency-SLO-ny üýtgetmek şertnamanyň üýtgemegi hasaplanýar.

Migrasiýa we deprekeýt

1. Deprekate bildiriň: elementi belläň, sunset möhletini we alternatiwasyny görkeziň.
2. Gabat gelmek döwrüni saklaň: dual-write/dual-emit, köprüler, adapterler.
3. Telemetriýany ýygnaň: köne zady başga kim ulanýar?
4. Aragatnaşyk: poçta, goýberiş-bellikler, synag stendleri.
5. Aýyrmak: penjireden soň - kesgitlenen çykaryş bilen aýyrmak.

Üýtgeşmeleriň mysallary

REST

Bardy:
json
{ "id":"p1", "status":"authorized" }
Bu (goşmaça, howpsuz):
json
{ "id":"p1", "status":"authorized", "risk_score": 0. 12 }

Näbelli meýdanlary äsgermezlik edýän müşderiler bozulmaýarlar.

Protobuf

proto message Payment {
string id = 1;
string status = 2; // don't change tag numbers optional double risk_score = 3; // additive
}

Event

`payment. authorized. v1 '(ýadro) +' payment. enriched. v1 '(baýlaşdyrmak). Möhüm ýoly ulanýanlar özeni okaýarlar we baýlaşdyrmaga bagly däldirler.

Anti-patternler

Swagger-wash: aýratynlyklar resmi taýdan bar, ýöne hyzmatyň özüni alyp barşy ondan tapawutlanýar.
Breaking by stealth: täze wersiýa we göçmek penjiresi bolmazdan görnüşi/statusy/formaty üýtgedildi.
Çig CDC wakalary jemgyýetçilik şertnamasy hökmünde: DD shemalarynyň syzmagy, ewolýusiýanyň mümkin däldigi.
Gaty müşderi: näbelli meýdanlara/gymmatlyklara düşýär; tolerant reader ýok.
Protobuf-tegleri gaýtadan ulanmak: maglumatlaryň ýuwaş korrupsiýasy.
Gizlinlik "şertnamasyz": garaşylmadyk ýagdaýda p95 uzaldyldy - sarp edijiler wagtlaýynça döwülýärler.

Laýyklyk çek-sanawy (merjeniň öň ýanynda)

  • Üýtgeşmeler goşmaça (ýa-da esasy wersiýasy taýýarlandy).
  • Linterler/diff-barlaglar geçdi, laýyklyk düzgünleri ýaşyl.
  • Ýalňyşlyklar/kodlar/statuslar semantikany üýtgetmedi.
  • Enum köne bahalary gadagan etmezden giňeldildi; müşderiler - tolerant.
  • MGC çäkleri üýtgewsiz.
  • Täzelenen mysallar/resminamalar/SDK.
  • Major üçin - dual-write/dual-emit meýilnamasy, sunset-date, komm-plan.
  • Synaglar CDC/Golden/E2E geçdi.

FAQ

Backward forward-dan nähili tapawutlanýar?
Backward - täze serwerler köne müşderileri bozmaýar. Forward - täze müşderiler köne serwerlerde bozulmaýarlar (tolerant reader we arassa defoltlar arkaly).

Haçan etmeli '/v2 '?
Invariantlar/semantika üýtgese, meýdanlar/usullar aýrylanda, täze howpsuzlyk modeli talap edilýär - täze setiri açmak has aňsat we dogruçyl.

Schema registry/lintersiz ýaşap bolarmy?
Teoretiki taýdan - hawa, diýen ýaly - ýygy-ýygydan regresler we "gizlin" döwükler. Awtomatlaşdyryş öwezini dolýar.

Enum giňeldilip bilnermi?
Hawa, eger müşderiler näbelli gymmatlyklary (fallback/ignore) dogry işleseler. Otherwiseogsam - major.

Jemi

Şertnama laýyklygy - düzgünler + düzgün-nyzam + awtomatlaşdyryş. Goşmaça dizaýn ediň, döwýän üýtgeşmeleri wersiýa ediň, tolerant reader ulanyň, diffleri we CDC-leri awtomatiki barlaň, deprekeýti meýilleşdiriň. Şeýlelik bilen, API-ler çalt ösüp, integrasiýa durnukly bolup biler.

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.