Qum qutuları və test mühitləri
TL; DR
Etibarlı qum qutusu = tam izolyasiya, sintetik/anonimləşdirilmiş məlumatlar, real xarici sistem simulyatorları, proqnozlaşdırıla bilən sidlər və time-travel, daxili idempotentlik və webhucks, şəffaf limitlər və metriklər. Prod - əlçatmaz, açarlar - fırlanır, promotion - yalnız yoxlama vərəqləri ilə.
1) Ətraf mühitin xəritəsi və onların rolu
Qayda: sandbox ≠ prod. Hər hansı bir əlaqə - real vasitələrə/oyunlara/şəxsi məlumatlara çıxışı olmayan birtərəfli simulyatorlar vasitəsilə.
2) Məlumatlar: sintetika, anonimləşdirmə, oturtma
Sintetik default. Pasport/kart məlumat generatorları, valid, lakin qeyri-maliyyə PAN (test BIN), «canlı» bahis və balans nümunələri.
stage üçün anonimləşdirmə: identifikatorların tokenlaşdırılması, aqreqatlar üçün diferensial məxfiliyi, nadir kombinasiyaların aradan qaldırılması.
Sid və determinizm: bir komanda - bir dövlət.
bash make db-reset && make db-seed ENV=sandbox SEED=2025_11_03
Time-travel: son tarixlər/ekspirasiya testləri üçün qlobal «saat» mühit.
3) Simulyatorlar və qapaqlar (stubs)
Ödənişlər/Banklar/PSP
Auth/Capture/Refund/Payout со сценариями: `approved`, `declined_insufficient`, `3ds_required`, `timeout`, `duplicate`.
PSP vebhukları: HMAC tərəfindən imzalanmış, retrajlar, gecikmələr və «çirkli internet».
KYC/AML/Sanctions
Ответы: `clear`, `pep_match`, `sanction_hit`, `doc_mismatch`, `manual_review`.
Idempotentlik və rate limits prod kimi dəstək.
Oyun provayderləri/kataloq
Lobbi, Fich, RTP/raundlar - UX-cases üçün «ödənişlər/uğursuzluqlar» tərəfindən idarə olunan psevdocudal nəsil.
Seçimi: simulyatorun «sərtlik» açarı (happy-path vs chaos).
4) Qum qutusunda vebhuki
HMAC imzaları (v1), 'X-Event-Id', 'X-Timestamp' başlıqları, pəncərə ≤ 5 dəqiqə.
Eksponensial backoff, DLQ və replay ilə retrailer.
Konsol «yenidən düzəltmək» və cəhd qeydləri.
pseudo
POST /psp/webhooks
Headers: X-Signature, X-Timestamp, X-Event-Id
Body: { event_id, type, data, attempt }
5) İdempotentlik və determinizm
Bütün mutasiyalar «Idempotency-Key» qəbul edir.
Simulyatorlar nəticəni açarda saxlayır (TTL 24-72 saat).
«Seed-determinizm»: eyni girişdə - eyni nəticə (təkrar testlər üçün).
6) Təhlükəsizlik və giriş
İzolyasiya şəbəkələri/VPC, fərdi sirləri və domenləri ('sandbox. example. com`).
RBAC/ABAC: «partner», «qa», «dev» rolları, token topları minimaldır.
Rate-limits və kvotalar: ədalətli pay per-tenant/açar, başa düşülən '429 '/' Retry-After'.
Sırlar yalnız KMS/Vault; müntəzəm rotasiya.
Kod/konfiq səviyyəsində real ödənişlərin qadağan edilməsi (feature-flag hard block).
7) API Gateway və sandbox müşahidə
Eyni siyasətlər: OAuth2/OIDC/JWT, CORS, WAF, DDoS-profil.
Metriklər: p50/p95/p99, 4xx/5xx, hit-rate limitləri, latency webhooks, idempotent hitləri.
Log/treys: PII olmadan; korelasiya 'trace _ id'.
Dashbord «Qum qutusunun sağlamlığı»: aptaym, webhook növbələri, simulyator səhvləri.
8) Ficha bayraqları, versiyaları və uyğunluq
Sandbox → stage → prod.
API üçün SemVer; Swagger/Redoc qum qutusunda Deprecation/Sunset banner.
GraphQL vitrinləri üçün persisted queries (varsa).
9) CI/CD и promotion
1. Build/Unit →
2. Contract/Mock tests (OpenAPI/Protobuf/GraphQL SDL) →
3. Simulyatorlara qarşı inteqrasiya →
4. Stage regress (anon. snapshots) →
5. Canary в prod.
Gate-check-list promotion: aşağıdakı § 12.
10) Tərəfdaşlar üçün UAT ssenariləri (qum qutusunda)
Ödənişlər: auth/capture/refund/payout vebhukları və PSP səhvləri ilə.
KYC/AML: bütün statuslar + əl eskalasiyası.
İdempotentlik: təkrar 'Idempotency-Key' → eyni nəticə.
Rate-limit: düzgün emal '429'.
Müvəqqəti pəncərələr: tokenlərin ekspirasiyası, 'Retry-After', zaman-səyahət halları.
Webhooks: imzalar/retralar/DLQ, əl replay və dedup.
11) Məlumat siyasəti və məxfilik
Heç vaxt real PAN/KYC dokları sandbox/stage saxlamaq.
Anonimləşdirmə: maskalanma, birbaşa identifikatorların silinməsi, sintetik korrelyasiya.
TTL saxlama log və vebhuk gövdələri ≤ tənzimlənən.
12) Çek vərəqləri
12. 1 Yeni qum qutusunun istifadəyə verilməsi
- İzolyasiya edilmiş şəbəkə/baza/cache/obyekt saxlama
- Secrets KMS/Vault yaradılıb, rolları çıxış
- PSP/KYC/oyun simulyatorları arxa planda və versiyada
- Swagger/Redoc + Postman kolleksiyası (sandbox endpoints)
- Vebhuki: HMAC, retry, DLQ, konsol replay
- Rate/Quota profilləri, Deprecation/Sunset bannerləri (varsa)
- Daşbordlar və Alertlər (latency, 5xx, 429, DLQ)
12. 2 Promotion release (stage→prod)
- Müqavilə diff yoxlamaları (breaking olmadan)
- stage normal yükləmə p95/p99
- Webhucks UAT keçdi, idempotent ok
- Ficha bayraqları hazırlandı, geri dönüş planı var
- Changelog, miqrasiya bələdçisi və tərəfdaşlara göndərmə
13) Antipattern
Qum qutusu, prod-xidmətlərə/bazalara «gizli» toxunur.
Real kart/pasport məlumatları stage/sandbox.
Webhook/retrains olmadan simulyatorlar - yalnız «xoşbəxt cığır».
İdempotentliyin olmaması → ödənişlərin/dərəcələrin dublikatları.
Bütün tərəfdaşlar üçün bir ümumi HMAC sirri.
Limitlər və şəffaf 429/Retry-After yoxdur.
14) Mini snippet
.env. sandbox (nümunə)
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 fraqment (sandbox server)
yaml servers:
- url: https://sandbox.api.example.com/v1 description: Public Sandbox
Pseudo idempotentlik kodu
pseudo if store.exists(idem_key): return store.get(idem_key)
res = do_business()
store.set(idem_key, res, ttl=72h)
return res
PSP simulyator tetikləyiciləri
json
{ "scenario": "payout", "case": "declined_insufficient", "payout_id": "p_123" }
15) Müşahidə və SLO qum qutusu
Uptime sandbox API ≥ 99. 5% (inteqrasiya vitrini düşməməlidir).
Webhooks p95 ≤ 3 normal yük ilə 2xx qədər.
Error budget 5xx şlüz ≤ 0. 1%.
Dock portalı mövcuddur və müqavilə ilə sinxronlaşdırılmışdır.
16) Governance
Mühit sahibi (SRE/Platform) və steward API (müqavilələr).
Breaking-dəyişikliklər üçün RFC prosesi, Deprecation/Sunset təqvimi.
ictimai qum qutusu üçün ayrı-ayrı limitlər/kvotalar və «fair-use» qiymət.
Xülasə
Qum qutusu «bazanın surəti» deyil, inkişaf etdiricilər üçün bir məhsuldur. Verin: ciddi izolyasiya, sintetik məlumatlar, webhook və retras ilə tam simulyatorlar, sid və time-travel vasitəsilə determinizm, ficha bayraqları və şəffaf limitlər. Hər şeyi müqavilələrlə bağlayın, müşahidə və governance - və inteqrasiyalarınız sürətli, təhlükəsiz və proqnozlaşdırıla bilən olacaq və buraxılışlar ağrısız olacaq.