Arenili e ambienti di prova
TL; DR
Cavo di sabbia affidabile = isolamento completo, dati sintetici/impersonali, simulatori di sistemi esterni realistici, sedili prevedibili e time-travel, idampotenza integrata e webhook, limiti trasparenti e metriche. Prod è irraggiungibile, le chiavi sono rotte, la promozione è solo un assegno-fogli.
1) Mappa degli ambienti e del loro ruolo
Regola sandbox ≠ prod. Qualsiasi collegamento è tramite simulatori unilaterali senza accesso a mezzi/giochi/dati personali reali.
2) Dati: sintetica, anonimizzazione, seduta
Sintetico predefinito. Generatori di dati di passaporto/carta, validi ma non finanziari PAN (test BIN), pattern di scommesse e bilanci «vivi».
Anonimato per stage: tornizzazione degli identificatori, privacy differenziata per le unità, rimozione di combinazioni rare.
Sidi e determinismo, un comando è una condizione.
bash make db-reset && make db-seed ENV=sandbox SEED=2025_11_03
Time-travel - L'ora globale dell'ambiente per i test di deadline/espatrio.
3) Simulatori e stub (stubs)
Pagamenti/banche/PSP
Auth/Capture/Refund/Payout со сценариями: `approved`, `declined_insufficient`, `3ds_required`, `timeout`, `duplicate`.
Webhoop PSP firmati HMAC, retrai, ritardi e Internet sporco.
KYC/AML/Sanctions
Ответы: `clear`, `pep_match`, `sanction_hit`, `doc_mismatch`, `manual_review`.
Supporto di idempotenza e rate limits come in prod.
Provider di giochi/catalogo
Lobby, fitch, RTP/round - pseudoscienze, pagamenti/fallimenti gestiti per le valigette UX.
Opzione: pulsante di scelta «rigido» del simulatore (happy-path vs chaos).
4) Webhook nel cassonetto
Etichette HMAC (v1), intestazioni X-Event-ID, X-Timestamp, finestra 5 minuti.
Retrai con backoff esponenziale, DLQ e replay.
La console Riordina e i fogli di tentativo.
pseudo
POST /psp/webhooks
Headers: X-Signature, X-Timestamp, X-Event-Id
Body: { event_id, type, data, attempt }
5) Idampotenza e determinismo
Tutte le mutazioni assumono «Idempotency-Key».
I simulatori memorizzano il risultato in chiave (TTL 24-72 ore).
Seed-Determinismo: allo stesso ingresso, lo stesso risultato (per i test ripetitivi).
6) Sicurezza e accesso
Isolamento delle reti/VPC, singoli segreti e domini ('sandbox. example. com`).
RBAC/ABAC: ruoli «partner», «qa», «dave», «token scoop» sono minimi.
Rate-limits e quote: giusta quota per-tenant/chiave, comprensibile con «429 »/« Retry-After».
I segreti sono solo in KMS/Vault; rotazione regolare.
Impedisce i pagamenti effettivi a livello di codice/configa (feature-flag hard block).
7) API Gateway e osservabilità in sandbox
Stessi criteri: OAuth2/OIDC/JWT, CORS, WAF, profilo DDoS.
Metriche: p50/p95/p99, 4xx/5xx, hit-rate limiti, latency webhooks, hit idempotent.
Loghi/roulotte senza PII; corellazione trace _ id.
Il Dashboard Salute della Sabbia, farmacia, code di webhoop, errori di simulazione.
8) Flag Fiech, versioni e compatibilità
Includere il fich nella sandbox → stage → prod.
SemVer per l'API Striscione Deprecation/Sunset in Swagger/Redoc scaffali.
Persisted queries per le vetrine graphQL (se disponibili).
9) CI/CD и promotion
1. Build/Unit →
2. Contract/Mock tests (OpenAPI/Protobuf/GraphQL SDL) →
3. Integrazione contro simulatori di →
4. Stage regress (anon. snapshot)
5. Canary в prod.
Foglio di assegno Gate promozione: sotto al punto 12.
10) Script UAT per i partner (in sabbia)
Pagamenti: auth/capture/refund/payout con webhoot e errori PSP.
KYC/AML: tutti gli stati + escalation manuale.
Idampotenza: «Idempotency-Key» ripropone lo stesso risultato.
Rate-limit: elaborazione corretta «429».
Finestre temporanee: Esporta token, Retry-After, time-travel valige.
Webhooks: firme/retrai/DLQ, replay manuale e deadup.
11) Politica dei dati e privacy
Non memorizzare mai real PAN/KYC in sandbox/stage.
Anonimato: occultamento, rimozione di identificatori diretti, correlazione sintetica.
Il TTL di memorizzazione dei cavi e dei corpi dei webhoop è regolamentare.
12) Assegno fogli
12. 1 Avvia una nuova cassetta di sabbia
- Rete/database/cache/archivio oggetti isolati
- Segreti creati in KMS/Vault, accesso a ruoli
- I simulatori PSP/KYC/giochi sono rivestiti e versionati
- Swagger/Redoc + Postman collezione (sandbox endpoants)
- Webhook: HMAC, retry, DLQ, console replay
- Profili Rate/Quote, banner Deprecation/Sunset (se disponibile)
- Dashboard e alert (latency, 5xx, 429, DLQ)
12. 2 Promotion release (stage→prod)
- Controlli differenti contrattuali (senza breaking)
- Carico p95/p99 normale per stage
- Webhook passato UAT, idempotica
- Flag Fiech preparati, piano di rientro disponibile
- Changelog, guida all'immigrazione e distribuzione ai partner
13) Antipattern
Una cassetta di sabbia che commuove segretamente i servizi/basi prod.
Dati di carta/passaporto reali in stage/sandbox.
I simulatori senza wabhook/retrai sono solo un sentiero felice.
La mancanza di idampotenza è duplicata da pagamenti/scommesse.
Un segreto HMAC condiviso per tutti i partner.
Nessun limite e nessuna trasparenza 429/Retry-After.
14) Mini snippet
.env. sandbox (esempio)
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
porzione OpenAPI (sandbox server)
yaml servers:
- url: https://sandbox.api.example.com/v1 description: Public Sandbox
Pseudocode idempotenza
pseudo if store.exists(idem_key): return store.get(idem_key)
res = do_business()
store.set(idem_key, res, ttl=72h)
return res
Trigger del simulatore PSP
json
{ "scenario": "payout", "case": "declined_insufficient", "payout_id": "p_123" }
15) Osservabilità e SLO
Uptime sandbox API ≥ 99. 5% (la vetrina delle integrazioni non deve cadere).
Webhooks p95 ≤ 3 da a 2xx a carico normale.
Errore budget 5xx gateway ≤ 0. 1%.
Il portale doc è disponibile e sincronizzato con il contratto.
16) Governance
Proprietario dell'ambiente (SRE/Platform) e dell'API steward (contratti).
Processo RFC per le modifiche breaking, calendario Deprecation/Sunset.
Limiti/quote separati e price «fair-use» per la sabbia pubblica.
Curriculum
La sabbia è un prodotto per sviluppatori, non una copia della base. Fornite: isolamento rigoroso, dati sintetici, simulatori completi con webhoop e retrai, determinismo attraverso i sedili e time-travel, flag fich e limiti trasparenti. Vincolate tutti i contratti, l'osservabilità e la governance - e le vostre integrazioni diventeranno veloci, sicure e prevedibili, mentre le release saranno indolore.