GH GambleHub

API müqavilə uyğunluğu

Niyə müqavilə uyğunluğu lazımdır

Müqavilə uyğunluğu API-nin mövcud inteqrasiyaları pozmadan inkişaf etmək qabiliyyətidir. Artan API sistemlərində müştərilərin kodu daha tez-tez dəyişir; Uyğunluq, «böyük keçidlər» təşkil etmədən fitzləri iterativ şəkildə buraxmağa imkan verir.

Əsas fikir: müqavilə birincidir, dəyişikliklər uyğunluq qaydalarına uyğun olaraq aparılır və avtomatik yoxlanılır.

Əsas anlayışlar

Müqavilə - rəsmi interfeys spesifikasiyası: resurslar/metodlar/hadisələr, məlumat sxemləri, səhv kodları, limitlər, SLA, təhlükəsizlik tələbləri.
Təchizatçı (provider) - API sahibi. İstehlakçı (consumer) - müştəri/inteqrasiya.

Uyğunluq:
  • Backward: Yeni təchizatçı köhnə istehlakçılarla işləyir.
  • Forward: köhnə təchizatçı yeni istehlakçılarla işləyir (adətən «dözümlü oxucular» tərəfindən əldə edilir).
  • Full: həm backward, həm də forward (ən güclü variant).
  • Additivlik - mövcud elementləri qırmadan isteğe bağlı elementlərin əlavə edilməsi.

Version siyasəti

Semantic Versioning (tövsiyə olunur):
  • MAJOR - pozucu dəyişikliklər (yalnız yeni API xətti: '/v2 ',' service. v2`).
  • MINOR - əlavə dəyişikliklər (yeni isteğe bağlı sahələr/metodlar).
  • PATCH - müqaviləni dəyişdirmədən düzəlişlər.
  • Deprecation Policy: köhnəlmiş elementlərin elanı, dəstək pəncərəsi (sunset), başlıqlarda/metadata xəbərdarlıqları, çıxarılma planı.

Təhlükəsiz vs təhlükəli dəyişikliklər

Təhlükəsiz (adətən backward-compatible)

JSON/Protobuf/Avro-a isteğe bağlı sahə əlavə edin.
Yeni bir end-point/metod/hadisə əlavə edin.
İstehlakçılar naməlum dəyərlərə dözümlü olduqda yeni dəyərlərlə enum genişləndirilməsi.
Limitlərin artırılması (məsələn, 'maxItems') minimum sərtləşdirilmədən.
Düzgün defolt ilə nullable əlavə.
Təsvirin/nümunələrin mətninin dəyişdirilməsi.

Təhlükəli (uyğunluq pozur)

Sahələrin adının dəyişdirilməsi/silinməsi, onların növünün və ya öhdəliyinin dəyişdirilməsi.
Status-kodların/səhvlərin semantikasının dəyişdirilməsi (məsələn, '200', '204' və ya '404').
ID formatının dəyişdirilməsi (UUID → int).
Versiyası olmadan sərtləşdirilmiş validasiya (daha sərt minimumlar/nümunələr).
gRPC axınlarında/hadisələrində sıra və strukturun dəyişdirilməsi.
Yeni sahələr üçün Protobuf etiket nömrələrini yenidən istifadə edin.

Qarşılıqlı üslub uyğunluğu

REST/HTTP + JSON Schema

Additivlik: Yeni sahələr 'optional '/' nullable' kimi qeyd olunur.
Müştəridə Tolerant Reader: naməlum sahələrə məhəl qoymayın; əmrə güvənməyin.
Version: major - yolda ('/v2 ') və ya mediatipdə (' application/vnd. example. v2+json`).
ETag/If-Match: qaçışsız təhlükəsiz yeniləmələr üçün.
Səhvlər: vahid format ('type', 'code', 'title', 'detail', 'trace _ id'), major olmadan 'code' dəyərlərini dəyişdirməyin.
Pagination: kursorlar offset üstünlük; 'next _ cursor' sahələrini əlavə edin, mövcud olanların mənasını dəyişdirməyin.

gRPC / Protobuf

Etiketlərin nömrələnməsi dəyişməz olaraq qalır. Silinmiş etiketlər yenidən istifadə edilmir.
Yeni sahələr - 'optional '/' repeated' serverdə ağlabatan defoltlarla.
streaming-RPC-də mesajların qaydasını və məcburiyyətini dəyişdirməyin.
Səhvlərin statusu sabitdir ('INVALID _ ARGUMENT', 'FAILED _ PRECONDITION' və s.); yeni semantika → metodun/xidmətin yeni versiyası.

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

Hadisələrin adlandırılması: 'domain. action. v{major}`.
Yeni sahələr - opsiyonel; nüvə və zənginləşdirmə ('.enriched') ayırın.
Sxem qeydləri: mövzu/hadisə üzrə uyğunluq qaydaları (BACKWARD/FORWARD/FULL).
Enum genişləndirilməsi istehlakçıların tərəfində tolerant reader ilə icazə verilir.
Vahid üçün partizan açarının/sifarişin dəyişdirilməsi = pozucu dəyişikliklər.

GraphQL

Sahələrin/növlərin əlavə edilməsi - təhlükəsiz; silinməsi/adının dəyişdirilməsi - yalnız @deprecated və miqrasiya pəncərəsi vasitəsilə.
Major olmadan növləri dəyişdirməyin/nullable deyil.
complexity/depth nəzarət - limitlər müqavilənin bir hissəsidir.

Davamlı təkamül nümunələri

Additive-first: sındırmadan genişləndirin.
Capability negotiation: Müştərilər dəstəklədiklərini bildirirlər (başlıqlar/parametrlər/razılaşmalar), server uyğunlaşır.
Müqavilə sərhədləri: MGC-ni (minimum zəmanət müqaviləsi) düzəldin və genişləndirmələri (əks piramida modeli) ayırın.
Tolerance by default: Müştərilər həddindən artıq əhəmiyyət vermirlər və naməlum enum (fallback) dəyərlərini düzgün idarə edirlər.
Dual-write/Dual-emit: major dəyişikliklər zamanı bir müddət paralel olaraq 'v1' və 'v2' buraxın.
Sunset headers/Events: versiyaların çıxarılması barədə əvvəlcədən məlumat verin.

Governance və avtomatlaşdırma

API linterləri:
  • OpenAPI/Spectral: adlandırma, paginasiya, səhv kodları, sahə formatları.
  • Buf/Protobuf: etiketlərin yenidən istifadəsinin qadağan edilməsi, paketlərin notasiyası.
  • AsyncAPI/Schema Registry: CI səviyyəsində sxemlərin uyğunluğu.
  • Müqavilə kataloqu (SSOT): diff tarixi olan sxemlərin/versiyaların mərkəzləşdirilmiş reyestri.
  • API Guild: qaydaları, şablonları və dəyişikliklər review qəbul Guild/komitə.
  • Change Management: RFC/ADR, release notes, miqrasiya qaydaları.

Uyğunluq testi

CI-də Schema-diff: sındırıcı spec dəyişikliklərini bloklayırıq (OpenAPI-diff, Buf breaking, SR compatibility).
Consumer-Driven Contracts (CDC): Pact/oxşar - müəyyən istehlakçıların müqavilələrinə qarşı təchizatçının yoxlanılması.
Golden samples: referans sorğular/cavablar və reqressiya üçün hadisələr.
E2E Canary: payına/ayrı-ayrı konsumer qrupları.
Chaos/latency: zaman/retraut testi - latency-SLO dəyişikliyi müqavilə dəyişikliyi hesab olunur.

Miqrasiya və Deprekeyt

1. Deprekeyt elan edin: elementi qeyd edin, sunset müddətini və alternativini qeyd edin.
2. Uyğunluq müddətini saxlayın: dual-write/dual-emit, körpülər, adapterlər.
3. Telemetriya toplayın: daha kim köhnə istifadə edir?
4. Rabitə: poçt, buraxılış notları, test stendləri.
5. Çıxarılması: pəncərədən sonra - sabit buraxılış ilə çıxarılması.

Dəyişiklik nümunələri

REST

Var idi:
json
{ "id":"p1", "status":"authorized" }
(əlavə, təhlükəsiz) oldu:
json
{ "id":"p1", "status":"authorized", "risk_score": 0. 12 }

Naməlum sahələrə məhəl qoymayan müştərilər qırılmır.

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 '(nüvə) +' payment. enriched. v1 '(zənginləşdirmə). Kritik yol istehlakçıları nüvəni oxuyurlar və zənginləşdirmədən asılı deyillər.

Antipatternlər

Swagger-wash: spesifikasiya formal olaraq mövcuddur, lakin xidmətin davranışı ondan fərqlidir.
Breaking by stealth: Yeni versiya və miqrasiya pəncərəsi olmadan növü/statusu/formatı dəyişdi.
Xam CDC-hadisələr ictimai müqavilə kimi: DD sxemlərinin sızması, təkamülün mümkünsüzlüyü.
Sərt müştəri: naməlum sahələrdə/dəyərlərdə düşür; tolerant reader yoxdur.
Protobuf etiketlərinin yenidən istifadəsi: məlumatların sakit korrupsiyası.
Gecikmə «müqaviləsiz» kimi: gözlənilmədən p95 uzadıldı - istehlakçılar taymautlarda pozulur.

Check-list uyğunluq (merj əvvəl)

  • Dəyişikliklər əlavə (və ya əsas versiyası hazırlanmışdır).
  • Linters/diff çekləri keçdi, uyğunluq qaydaları yaşıl.
  • Səhvlər/kodlar/statuslar semantikanı dəyişmədi.
  • Enum köhnə dəyərləri qadağan etmədən genişləndirilir; müştərilər tolerantdır.
  • MGC sərhədləri dəyişməz.
  • Yenilənmiş nümunələr/sənədlər/SDK.
  • Major üçün - plan dual-write/dual-emit, sunset-date, komm-plan.
  • Testlər CDC/Golden/E2E keçdi.

FAQ

Backward forward uyğunluğundan nə ilə fərqlənir?
Backward - yeni serverlər köhnə müştəriləri sındırmır. Forward - yeni müştərilər köhnə serverlərdə pozulmur (tolerant reader və səliqəli defoltlar vasitəsilə).

'/v2 'nə vaxt etmək lazımdır?
Alternativlər/semantika dəyişdikdə, sahələr/metodlar silinir, yeni bir təhlükəsizlik modeli tələb olunur - yeni bir xətt açmaq daha asan və dürüst olur.

Schema Registry/lintersiz yaşaya bilərəmmi?
Nəzəri olaraq - bəli, praktiki olaraq - bunlar tez-tez reqressiyalar və «gizli» qırılmalardır. Avtomatlaşdırma ödəyir.

Enum genişləndirilə bilər?
Bəli, müştərilər naməlum dəyərləri düzgün emal edirlərsə (fallback/ignore). Əks halda - major.

Yekun

Müqavilə uyğunluğu qaydalar + nizam-intizam + avtomatlaşdırmadır. Əlavə dizayn edin, pozucu dəyişiklikləri verin, tolerant reader tətbiq edin, diffləri və CDC-ləri avtomatik yoxlayın, deprekeyti planlaşdırın. Beləliklə, API-lər sürətlə inkişaf edə, inteqrasiyalar isə sabit qala biləcəklər.

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!

Telegram
@Gamble_GC
İ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.