Logo GH

API kontrakt sinovi

1) Nima uchun kontrakt bo’yicha test

Kontrakt mijozning umidlari va provayderning va’dalarini qayd etadi: yo’nalishlar/usullar, sarlavhalar, jismlar sxemalari, maqomlar, xatolar semantikasi va cheklovlar. Maqsad - integratsiyalashishdan oldin nomuvofiq o’zgarishlarni ushlash va xavfsiz, og’ir E2E chiqarishdan iborat.

2) yondashuvlar

Consumer-Driven Contracts (CDC): mijoz kutilmalarni shakllantiradi (Pact va analoglar); provayder ularni muntazam ravishda tekshirib turadi.
Spetsifikatsion: yagona haqiqat manbai sifatida kontrakt (OpenAPI/Protobuf/GraphQL SDL); testlar spetsifikatsiyaga qarshi amalga oshirilishini tasdiqlaydi.
Hodisa: xabarlar sxemasi (Euro/JSON Schema/Protobuf) + broker/reyestrdagi muvofiqlik qoidalari.

3) HTTP/REST: spetsifikatsion oqim

1. Kontrakt: OpenAPI 3. x (sxemalar, misollar, kodlar).
2. Lint va statistik tahlil: uslub, majburiy maydonlar, yagona kodlar.
3. Amalga oshirishni validatsiya qilish: OpenAPI (schemathesis/Dredd-yondashuv) ga qarshi test generatorlari + qo’l negativlari.
4. Snapshotlar: javoblar namunalarini, ETag semantikasini, idempotentlik sarlavhalarini yozib oling.

Negative-kontrakt namunasi (OpenAPI fragmenti):
yaml paths:
/v1/payments:
post:
responses:
"201": { $ref: "#/components/responses/PaymentCreated" }
"409": { description: Duplicate by Idempotency-Key }
"422": { description: Schema/Business validation failed }

4) CDC (Pact-yondashuv)

Hayot sikli:

1. Consumer testni yozadi, pact faylini shakllantiradi (kutish).

2. Brokerga (artefaktga) e’lon qilish.

3. Provider CI’da xizmatni (yoki kontrakt-stoykani) ko’taradi, pact’larni tekshiradi.

4. Broker can-i-deploy muvofiqlik matritsasini hisoblab chiqadi.

Consumer-test misoli (psevdo-JS):
js pact
.given("wallet exists")
.uponReceiving("get wallet")
.withRequest({ method:"GET", path:"/v1/wallets/w123", headers:{ "Authorization": term({generate:"Bearer x", matcher:/^Bearer\s.+/}) }})
.willRespondWith({
status: 200,
headers: { "Content-Type": "application/json" },
body: like({ id:"w123", currency: "EUR", balance: 0 })
});

5) gRPC/Protobuf kontraktlari

Kontrakt -’.proto’s versionirovaniya paketov/servisov.
Moslik: teglarni qayta ishlatmaslik, faqat optional bilan yangilarini qoʻshish, ishlatiladigan maydonlarni oʻchirmaslik; raqamlarni zaxiralash.
Testlar: server/mijoz stabini yaratish, avtoulov ishlab chiqarilgan keyslarni ijaraga berish + negativlar (unknown fields, size-limits).

6) Hodisa shartnomalari (Kafka/NATS/...)

Схемы: Avro/JSON Schema/Protobuf в Schema Registry.
Muvofiqlik siyosati:’BACKWARD’yoki’FULL’.
Prodyuser testlari: xabarni sxemaga qarshi validatsiya qiladi; konsumer testlari: eski va yangi versiyani qabul qiladi.
Invariantlar: idempotentlik kalitlari, tartib/takrorlanuvchanlik, deduplikatsiya semantikasi.

Evro-sxema misoli (parcha):
json
{"type":"record","name":"PayoutCreated","fields":[
{"name":"payoutId","type":"string"},
{"name":"amount","type":"double"},
{"name":"currency","type":{"type":"string","logicalType":"iso-4217"}}
]}

7) Muvofiqlik va versiyalar

Backward-compatible (tavsiya etilgan minimal): ixtiyoriy maydonlarni qoʻshing, mavjud maydonlarni buzmang.
Forward-compatible: isteʼmolchilar nomaʼlum maydonlarga eʼtibor bermaydi.
Full: ikkalasi ham.
Version:’path (/v1)’,’Accept: application/vnd. brand. v2+json`, `proto package v2`.
Deprecation-siyosat: chiqish oynasi (masalan, 90 kun), ogohlantiruvchi sarlavhalar/voqealar.

8) Salbiy va xatolar - bu ham kontrakt

Kodlarni standartlashtiring: 400/401/403/404/409/422/429/5xx, majburiy’code’,’message’,’trace _ id’.
Miqdorlar/limitlar - kontraktning bir qismi (413/414/431).
Idempotentlik: takrorlanishdagi xatti-harakatlar (409 vs 201 same id).
Sarlavhalar: 429/503 da’Retry-After’,’Idempotency-Key’,’Content-Language’va h.k.

Xato namunasi:
json
{ "code":"validation_error", "message":"amount must be ≥ 1", "trace_id":"..." }

9) Ma’lumotlarni kontrakt boshqaradi

Misollar/namunaviy javoblar (examples) - tirik, CI da tasdiqlanadi.
CDC uchun fiksturlar - minimal, aniqlangan.
Ma’lumotlar generatsiyasi - sonlar/sanalar uchun property-based; lekin snapshotlarning barqarorligini buzmaslik.

10) CI/CD dagi Paypline (referens)

1. Lint/validate: OpenAPI/Proto/Avro (`validate`, style-линер).
2. Publish: kontrakt artefakt sifatida (broker/reyestr).
3. Verify: provayder CDC paketlarini/spetsifikatsiya testlarini haydab chiqaradi.
4. can-i-deploy gate: yashil matritsasiz chiqarish taqiqlanadi.
5. Diff: oʻzgarishlar mos kelishini tekshirish (semantic diff).
6. Hisobot: JUnit/HTML, qoidabuzarliklar/definitsiyalar ro’yxati.

Psevdo matritsasi:
yaml jobs:
lint:...
publish-contract: needs: [lint]
verify-provider: needs: [publish-contract]
can-i-deploy:
if: always()
steps: [run: pact-broker can-i-deploy...]

11) Asboblar (vazifalar klasslari bo’yicha)

Lint/validatorlar: openapi-linters, protobuf-lint, euro-tools.
CDC: Pact oilasi/broker, Spring Cloud Contract, Hoverfly (HTTP yozuvlari/repleylari).
Spetsifikatsion rannerlar: schemathesis/Dredd-shunga o’xshash yondashuv, Postman test + JSON Schema.
Diff: semantic-diff OpenAPI/Proto/Euro (breaking-oʻzgarishlarni aniqlaydi).
Konteynerlar: Testcontainers provayderni/kontraktlarni ko’tarish uchun.

12) Antipatternlar

«Spetsdok» koddan alohida → rassinxronizatsiya. Shartnomani xizmat yonida saqlang.
Kontrakt o’rniga tashqi servis moki → yangilanishlarda mo’rt.
Tasodifiy javoblar/sxemaga bogʻlanmagan generatsiya → fleyka.
Varianti boʻlmagan maydonlarning turi/majburiyligini oʻzgartirish.
Ogohlantirishsiz/deprekatsiyasiz silent-kengaytmalar.
Salbiy kontraktlar va xato kodlarining yo’qligi.

13) iGaming/Moliya xususiyatlari

Pul maydonlarini rasmiylashtiring:’amount’- masshtabli decimal, valyuta - ISO-4217, summalarning invariantlari.
To’lov/vebxuk kontraktlari: HMAC/mTLS, anti-replay (’X-Timestamp’oyna), idempotentlik,’Retry-After’.
Hududiylik/tenantlar: «X-Tenant/X-Region» sarlavhalari, xabarlarni mahalliylashtirish.
Voqealar: oʻzgarmas jurnallar (audit), deduplikatsiya kalitlari, yetkazib berish kafolatlari (at least once + idempotent xendlerlar).

14) Testlarning «skeletlari» misollari

14. 1 Schemathesis-stil (psevdo)

bash schemathesis run openapi. yaml --checks all --hypothesis-deadline=200

14. 2 Postman spetsifikatsion ranner sifatida

js pm. test ("Scheme/v1/wallets/{ id} is valid," () => {
const schema = pm. collectionVariables. get("wallet_get_schema");
pm. expect(ajv. validate(JSON. parse(schema), pm. response. json())). to. be. true;
});

14. 3 CDC provider-verifikatsiyasi (psevdo)

bash pact-broker can-i-deploy --pacticipant wallets --version $SHA --to-environment staging

15) Prod-tayyorlik chek-varaqasi

  • Repozitoriyadagi shartnomalar, CI artefaktlarni tasdiqlaydi va nashr etadi.
  • CDC tanqidiy integratsiyalar uchun kiritilgan; broker/matrix «can-i-deploy» ishlaydi.
  • Muvofiqlik siyosati (HTTP/gRPC/Events) hujjatlashtirilgan; avtomatik semantic-diff.
  • Salbiy kontraktlar: xatolar, o’lchov limitlari, idempotentlik,’Retry-After’.
  • Test-ma’lumotlar aniqlangan; misollar qo’llab-quvvatlanadi.
  • Versiyalash va deprecation: muddatlar, xabarnomalar, sarlavhalar.
  • Voqealar uchun - Schema Registry va muvofiqlik rejimi; prodyuser/konsumer ikkala versiyani ham sinovdan o’tkazadi.
  • Artefaktlar: JUnit/HTML, diff/verify hisobotlari, moslik matritsasi.
  • Hodisa-protsedura: tezkor kontrakt rollback/ficha-bayroq, integratorlarni xabardor qilish.

16) TL; DR

Shartnomalardagi umidlarni yozib oling va ularni avtomatik ravishda haydab chiqaring: mijoz umidlari uchun CDC, amalga oshirish uchun spetsifikatsiya testlari, voqealar uchun sxemalar reyestri. Qat’iy muvofiqlik siyosatini va salbiy kontraktlarni (xatolar, limitlar, idempotentlik) saqlang. Yashil can-i-deploy matritsasiz va semantic-diffni breaking-oʻzgarishlarsiz chiqarib boʻlmaydi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.