Cutii de nisip și medii de testare
TL; DR
Sandbox robust = izolare completă, date sintetice/impersonale, simulatoare realiste ale sistemelor externe, părți predictibile și călătorii în timp, idempotență încorporată și cărți web, limite și valori transparente. Alimente - la îndemână, chei - săpături, promovare - numai pe liste de verificare.
1) Harta mediului și rolurile lor
Regula: sandbox ≠ prod. Orice conexiune - prin simulatoare unidirecționale, fără acces la mijloace reale/jocuri/date personale.
2) Date: sintetice, anonimizare, ședință
Sintetice implicite. Generatoare de date pașaport/card, PAN-uri valabile, dar nefinanciare (BIN-uri de testare), modele vii de rate și solduri.
Anonimizarea pentru etapa: tokenizarea identificatorilor, confidențialitatea diferențială pentru agregate, eliminarea combinațiilor rare.
Sids și determinism: o echipă - un stat.
bash make db-reset && make db-seed ENV=sandbox SEED=2025_11_03
Călătoria în timp: „ora” globală a mediului pentru testele deadline/de expirare.
3) Simulatoare și prize (butuci)
Plăți/Bănci/PSP
Auth/Capture/Rambursare/Plată со сценариями: 'aprobat', 'refuzat _ insuficient', '3ds _ required',' timeout ',' duplicat '.
Carti web PSP: HMAC semnat, retrai, întârzieri și „internet murdar”.
KYC/AML/Sancțiuni
Ответы: 'clear', 'pep _ match', 'sancţiune _ hit', 'doc _ nepotrivire', 'manual _ review'.
Sprijiniți idempotența și limitele ratei ca în prod.
Furnizori de jocuri/Catalog
Lobby, caracteristică, RTP/runde - generare pseudo-aleatorie, controlată „plăți/eșecuri” pentru cazurile UX.
Opțiune: simulator „severitate” comutator (happy-path vs haos).
4) Cârlige web în cutia de nisip
Semnături HMAC (v1), anteturi "X-Event-Id'," X-Timestamp ", fereastră ≤ 5 minute.
Retrăi cu backoff exponențial, DLQ și reluare.
Consola „retrimite” și jurnalele de încercări.
pseudo
POST /psp/webhooks
Headers: X-Signature, X-Timestamp, X-Event-Id
Body: { event_id, type, data, attempt }
5) Idempotența și determinismul
Toate mutaţiile acceptă „Cheia Idempotenţei”.
Simulatoarele stochează rezultatul prin cheie (TTL 24-72 h).
„Determinismul semințelor”: cu aceeași intrare - același rezultat (pentru teste repetabile).
6) Securitate și acces
Izolarea rețelei/VPC, secrete individuale și domenii ("sandbox. exemplu. com ").
RBAC/ABAC: rolurile „partener”, „qa”, „dev”, ospreys de jetoane sunt minime.
Rate-limite și cote: cota echitabilă per chiriaș/cheie, ușor de înțeles „429 ”/„ Retry-After”.
Secrete numai în KMS/Vault; rotație regulată.
Interzicerea plăților reale la nivel de cod/config (caracteristică de pavilion hard block).
7) API Gateway și observabilitate în sandbox
Aceleași politici: OAuth2/OIDC/JWT, CORS, WAF, profil DDoS.
Măsurători: p50/p95/p99, 4xx/5xx, limite ale ratei de succes, cărți web de latență, lovituri idempotente.
Jurnale/trasee: fără PII; corelație "trace _ id'.
Tabloul de bord „Sandbox Health”: uptime, cozi de cârlig web, erori de simulator.
8) Caracteristică steaguri, versiuni și compatibilitate
Includerea caracteristicilor în sandbox → etapa → prod.
SemVer pentru API; Depreciere/Sunset banner în cutii de nisip Swagger/Redoc.
Interogări persistente pentru storefronturi GraphQL (dacă există).
9) CI/CD и promovare
1. Build/Unitate →
2. Contract/Teste mock (OpenAPI/Protobuf/GraphQL SDL) →
3. Integrare vs. simulatoare →
4. Regresia scenică (instantanee) →
5. Canare в prod.
Promovarea listei de verificare a porții: mai jos, în § 12.
10) script-uri UAT pentru parteneri (sandboxed)
Plăți: auth/capture/rambursare/plată cu webhook-uri și erori PSP.
KYC/AML: toate stările + escaladarea manuală.
Idempotență: repetat „Idempotency-Key” → același rezultat.
Rate-limit: Manipularea corectă a „429”.
Ferestre de timp: expirarea jetoanelor, 'Retry-After', cazuri de călătorie în timp.
Webhooks: semnături/retroys/DLQ, reluare manuală și dedup.
11) Politica de date și confidențialitate
Nu depozitați niciodată docuri reale PAN/KYC în nisip/etapă.
Anonimizare: mascare, îndepărtarea identificatorilor direcți, corelare sintetică.
Depozitarea TTL a buștenilor și a corpurilor de cârlig web ≤ de rutină.
12) Liste de verificare
12. 1 Lansarea unui nou nisip
- Rețea izolată/bază/memorie cache/stocare obiecte
- Secretele create în KMS/Vault, acces după rol
- Simulatoarele PSP/KYC/joc sunt scrise și versionate
- Swagger/Redoc + Colectia Postman (puncte finale sandbox)
- Webhooks: HMAC, încercaţi din nou, DLQ, reluare consola
- Rata/Profiluri cotă, Depreciere/Sunset bannere (dacă există)
- Tablouri de bord și alerte (latență, 5xx, 429, DLQ)
12. 2 Promotion release (stage→prod)
- Controale diff contract (fără rupere)
- Încărcați p95/p99 normal în stadiu
- Webhooks a suferit UAT, idempotency ok
- Feature steaguri sunt pregătite, există un plan de rollback
- Changelog, ghid de migrare și corespondență către parteneri
13) Antipattern
O cutie de nisip care „în secret” atinge servicii prod/baze de date.
Date reale de card/pașaport în etapa/sandbox.
Simulatoarele fără webhooks/retrageri sunt doar o „cale fericită”.
Fără idempotență → plăți/pariuri duplicate.
Un secret comun HMAC pentru toți partenerii.
Nu există limite sau 429/Retry-After transparente.
14) Mini fragmente
.env. sandbox (exemplu)
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
Fragment OpenAPI (server sandbox)
yaml servers:
- url: https://sandbox.api.example.com/v1 description: Public Sandbox
Pseudocodul Idempotency
pseudo if store.exists(idem_key): return store.get(idem_key)
res = do_business()
store.set(idem_key, res, ttl=72h)
return res
Triggere PSP Simulator
json
{ "scenario": "payout", "case": "declined_insufficient", "payout_id": "p_123" }
15) Observabilitate Sandbox și SLO
Uptime sandbox API ≥ 99. 5% (vitrina de integrare nu ar trebui să scadă).
Cârlige Web p95 ≤ 3 s până la 2xx la sarcină normală.
Buget de eroare 5xx de gateway ≤ 0. 1%.
Portalul de andocare este disponibil și sincronizat cu contractul.
16) Guvernanță
Proprietar de mediu (SRE/Platform) și API steward (contracte).
Proces RFC pentru ruperea modificărilor, Calendar depreciere/apus de soare.
Limite/cote separate și prețuri de „utilizare echitabilă” pentru nisipul public.
Rezumat reluare
Sandbox este un produs pentru dezvoltatori, nu o "copie a bazei. "Oferiți: izolare strictă, date sintetice, simulatoare cu drepturi depline cu cărți web și retras, determinism prin părți și călătorii în timp, steaguri de caracteristici și limite transparente. Conectați totul cu contracte, observabilitate și guvernanță - iar integrările dvs. vor deveni rapide, sigure și previzibile și vor elibera fără durere.