Qum qutilari va sinov muhitlari
TL; DR
Ishonchli qum qutisi = to’liq izolyatsiya, sintetik/shaxssiz ma’lumotlar, tashqi tizimlarning real simulyatorlari, oldindan aytib bo’ladigan sidlar va time-travel, o’rnatilgan idempotentlik va vebxuklar, shaffof limitlar va metriklar. Prod - yetib bo’lmaydi, kalitlar - aylanadi, promotion - faqat chek varaqalari bo’yicha.
1) Atrof-muhit xaritasi va ularning roli
Qoidasi: sandbox ≠ prod. Har qanday aloqa - real vositalar/o’yinlar/shaxsiy ma’lumotlarga kirmasdan bir tomonlama simulyatorlar orqali amalga oshiriladi.
2) Ma’lumotlar: sintetika, anonimlashtirish, sidirlash
Andoza sintetika. Pasport/kartochka ma’lumotlari generatorlari, valid, ammo moliyaviy bo’lmagan PAN (test BIN), stavkalar va balanslarning «tirik» patternlari.
Stage uchun anonimlashtirish: identifikatorlarni tokenlash, agregatlar uchun differensial maxfiylik, noyob kombinatsiyalarni olib tashlash.
Sid va determinizm: bitta jamoa - bitta holat.
bash make db-reset && make db-seed ENV=sandbox SEED=2025_11_03
Time-travel: muddatlar/ekspiratsiya testlari uchun global atrof-muhit soati.
3) Simulyatorlar va zagushkalar (stubs)
To’lovlar/banklar/PSP
Auth/Capture/Refund/Payout со сценариями: `approved`, `declined_insufficient`, `3ds_required`, `timeout`, `duplicate`.
PSP vebxuklari: HMAC tomonidan imzolangan, retrajlar, kechikishlar va «iflos internet».
KYC/AML/Sanctions
Ответы: `clear`, `pep_match`, `sanction_hit`, `doc_mismatch`, `manual_review`.
Idempotentlik va rate limits proddagi kabi.
Oʻyin provayderlari/katalog
Lobbi, fich, RTP/raundlar - UX-keyslar uchun boshqariladigan «to’lovlar/muvaffaqiyatsizliklar».
Moslama: simulyator «qattiqligi» (happy-path vs chaos).
4) Qum qutisidagi vebxuklar
HMAC imzolari (v1), «X-Event-Id», «X-Timestamp» sarlavhalari, oyna ≤ 5 daqiqa.
Eksponensial backoff, DLQ va replay.
«Qayta jo’natish» konsoli va urinishlar loglari.
pseudo
POST /psp/webhooks
Headers: X-Signature, X-Timestamp, X-Event-Id
Body: { event_id, type, data, attempt }
5) Idempotentlik va determinizm
Barcha mutatsiyalar «Idempotency-Key» ni qabul qiladi.
Simulyatorlar natijani kalit bo’yicha saqlaydi (TTL 24-72 soat).
«Seed-determinizm»: bir xil kirishda - bir xil natija (takrorlanadigan testlar uchun).
6) Xavfsizlik va foydalanish
Izolyatsiya tarmoqlari/VPC, alohida sirlar va domenlar (’sandbox. example. com`).
RBAC/ABAC: «partner», «qa», «dev» rollari, tokenlar minimal.
Rate-limits va kvotalar: per-tenant/kalit, tushunarli’429 ’/’ Retry-After’.
Sirlar faqat KMS/Vault’da; muntazam ravishda rotatsiya qilish.
Kod/konfiga (feature-flag hard block) darajasida real to’lovlarni taqiqlash.
7) API Gateway va sandboxda kuzatish
Xuddi shu siyosatlar: OAuth2/OIDC/JWT, CORS, WAF, DDoS profil.
Metriklar: p50/p95/p99, 4xx/5xx, hit-rate limitlar, latency webhooks, idempotent xitlar.
Logi/treyslar: PIIsiz; korellatsiya’trace _ id’.
«Qum qutisi salomatligi» dashbordi: aptaym, vebxuk navbatlari, simulyator xatolari.
8) Ficha-bayroqlar, versiyalar va muvofiqlik
Fichni sandbox → stage → prod.
API uchun SemVer; Swagger/Redoc qum qutisidagi Deprecation/Sunset banneri.
Persisted queries for GraphQL-vitrin (agar mavjud bo’lsa).
9) CI/CD и promotion
1. Build/Unit →
2. Contract/Mock tests (OpenAPI/Protobuf/GraphQL SDL) →
3. Simulyatorlarga qarshi integratsiya →
4. Stage regress (anon. snapshotlar) →
5. Canary в prod.
Gate-chek-listi promotion: § 12 dan past.
10) sheriklar uchun UAT-stsenariylari (qum qutisida)
To’lovlar: auth/capture/refund/payout vebxuklari va PSP xatolari bilan.
KYC/AML: barcha holatlar + qoʻlda eskalatsiya.
Idempotentlik: takroriy’Idempotency-Key’→ xuddi shunday natija.
Rate-limit:’429’ga to’g "ri ishlov berish.
Vaqtinchalik derazalar: tokenlarning ekspiratsiyasi,’Retry-After’, time-travel keyslari.
Webhooks: imzolar/retraylar/DLQ, qoʻlda replay va dedup.
11) Ma’lumotlar siyosati va maxfiylik
Real PAN/KYC docklarni hech qachon sandbox/stage tizimida saqlamang.
Anonimlashtirish: niqoblash, to’g «ridan to’g» ri identifikatorlarni olib tashlash, sintetik korrelyatsiya.
Vebxuk loglari va jismlarini saqlash TTL ≤ reglamentli.
12) Chek-varaqlar
12. 1 Yangi qum qutisini ishga tushirish
- Izolyatsiya qilingan tarmoq/baza/kesh/obyekt ombori
- Sirlar KMS/Vault’da yaratilgan, rollarga kirish
- PSP/KYC/o’yinlar simulyatorlari
- Swagger/Redoc + Postman kolleksiyasi (sandbox endpoints)
- Vebxuklar: HMAC, retry, DLQ, replay konsoli
- Rate/Quota profillari, Deprecation/Sunset bannerlari (agar mavjud bo’lsa)
- Dashbordlar va alertlar (latency, 5xx, 429, DLQ)
12. 2 Promotion release (stage→prod)
- Kontrakt diff tekshiruvlari (breakingsiz)
- Stage uchun normal yuk p95/p99
- Vebxuklar UATdan o’tdi, idempotentlik taxminan
- Ficha bayroqlari tayyorlandi, qaytarish rejasi mavjud
- Changelog, migratsiya qo’llanmasi va sheriklarga yuborish
13) Antipatternlar
Prod-servislarga/bazalarga «yashirincha» tegadigan qum qutisi.
Haqiqiy kartochka/pasport ma’lumotlari stage/sandbox.
Vebhuk/retrajsiz simulyatorlar - faqat «baxtli yo’l».
Idempotentlik yo’qligi → to’lovlar/stavkalar dublikatlari.
Barcha hamkorlar uchun bitta umumiy HMAC-sir.
Limitlar va shaffof 429/Retry-After yoʻq.
14) Mini-snippetlar
.env. sandbox (misol)
dotenv
API_BASE=https://sandbox.api.example.com
OAUTH_ISS=https://sandbox.idp.example.com
PSP_SIM_URL=https://sandbox.psp-sim.example.com
KYC_SIM_URL=https://sandbox.kyc-sim.example.com
WEBHOOK_SECRET_ROTATION_DAYS=90
FEATURE_FORCE_SANDBOX_PAYMENTS=1
OpenAPI parcha (sandbox server)
yaml servers:
- url: https://sandbox.api.example.com/v1 description: Public Sandbox
Idempotentlik psevdokodi
pseudo if store.exists(idem_key): return store.get(idem_key)
res = do_business()
store.set(idem_key, res, ttl=72h)
return res
PSP simulyatori triggerlari
json
{ "scenario": "payout", "case": "declined_insufficient", "payout_id": "p_123" }
15) Kuzatish va SLO qum qutisi
Uptime sandbox API ≥ 99. 5% (integratsiya oynasi tushmasligi kerak).
Webhooks p95 ≤ 3 s dan 2xx gacha normal yuklashda.
Error budget 5xx shlyuz ≤ 0. 1%.
Doc-portal mavjud va shartnoma bilan sinxronlashtirilgan.
16) Governance
Atrof-muhit egasi (SRE/Platform) va steward API (kontraktlar).
Breaking-oʻzgarishlar uchun RFC jarayoni, Deprecation/Sunset taqvimi.
Ommaviy qum qutisi uchun alohida limitlar/kvotalar va praysing «fair-use».
Xulosa
Qum qutisi «baza nusxasi» emas, balki ishlab chiquvchilar uchun mahsulotdir. Qattiq izolyatsiya, sintetik ma’lumotlar, vebxuk va retrajli to’liq simulyatorlar, sidlar va time-travel orqali determinizm, ficha bayroqlari va shaffof limitlar bering. Hamma narsani shartnomalar, kuzatuv va governance bilan bog’lang - va sizning integratsiyalaringiz tez, xavfsiz va oldindan aytib bo’ladigan bo’ladi, va relizlar og’riqsiz bo’ladi.