Piaskownice i środowiska badawcze
TL; DR
Solidna skrzynka piaskowa = kompletna izolacja, dane syntetyczne/bezosobowe, realistyczne symulatory systemów zewnętrznych, przewidywalne boki i podróże w czasie, wbudowana idempotencja i haki webowe, przezroczyste granice i mierniki. Jedzenie - poza zasięgiem, klucze - kopanie, promocja - tylko na listach kontrolnych.
1) Mapa środowiska i ich role
Reguła: piaskownica Każde połączenie - poprzez jednokierunkowe symulatory bez dostępu do rzeczywistych środków/gier/danych osobowych.
2) Dane: syntetyka, anonimizacja, siedzenie
Domyślna syntetyka. Generatory danych paszportowych/kart, ważne, ale niefinansowe PANS (test BIN), żywe wzory stawek i sald.
Anonimizacja dla etapu: tokenizacja identyfikatorów, prywatność różnicowa dla agregatów, usuwanie rzadkich kombinacji.
Sids i determinizm: jeden zespół - jeden stan.
bash make db-reset && make db-seed ENV=sandbox SEED=2025_11_03
Podróż w czasie: globalna „godzina” środowiska w przypadku testów terminowych/testów wygaśnięcia.
3) Symulatory i wtyczki (stubs)
Płatności/Banki/PSP
Auth/Capture/Refundacja/Payout сменарима: „zatwierdzony”, „declined _ insufficient”, „3ds _ required”, „timeout”, „duplicate”.
Haki internetowe PSP: HMAC podpisane, retrai, opóźnienia i „brudny internet”.
KYC/AML/Sankcje
Ответа: 'clear', 'pep _ match', 'sanction _ hit', 'doc _ mismatch', 'manual _ review'.
Wsparcie idempotencji i limitów stawek, jak w prod.
Dostawcy gier/Katalog
Lobby, funkcja, RTP/rundy - pseudo-losowe generowanie, kontrolowane „płatności/awarie” dla przypadków UX.
Opcja: przełącznik „ciężkości” symulatora (happy-path vs chaos).
4) Haki w piaskownicy
Podpisy HMAC (v1), nagłówki "X-Event-Id'," X-Timestamp ", okno ≤ 5 minut.
Przekłada się wykładniczym backoff, DLQ i powtórzyć.
Konsola „resend” i dzienniki prób.
pseudo
POST /psp/webhooks
Headers: X-Signature, X-Timestamp, X-Event-Id
Body: { event_id, type, data, attempt }
5) Idempotencja i determinizm
Wszystkie mutacje akceptują 'Idempotency-Key'.
Symulatory przechowują wynik za pomocą klawisza (TTL 24-72 h).
„determinizm nasion”: z tym samym wejściem - ten sam wynik (dla powtarzalnych testów).
6) Bezpieczeństwo i dostęp
Izolacja sieci/VPC, indywidualne tajemnice i domeny ('piaskownica. przykład. com ").
RBAC/ABAC: role „partner”, „qa”, „dev”, ospreys żetonów są minimalne.
Limity stawek i kwoty: sprawiedliwy udział na jednego najemcę/kluczowego, zrozumiały „429 ”/„ Retry-After”.
Tajemnice tylko w KMS/Vault; regularny obrót.
Zakaz płatności rzeczywistych na poziomie kodu/konfiguracji (funkcja-flag hard block).
7) Brama API i obserwowalność w piaskownicy
Te same zasady: OAuth2/OIDC/JWT, CORS, WAF, profil DDoS.
Metryki: p50/p95/p99, 4xx/5xx, limity prędkości trafienia, haki z opóźnieniem, hity idempotentne.
Kłody/szlaki: brak PII; korelacja 'trace _ id'.
Deska rozdzielcza „Sandbox Health”: uptime, kolejki webhook, błędy symulatora.
8) Flagi funkcji, wersje i kompatybilność
Włączenie funkcji w piaskownicy → etap → prod.
SemVer dla API; Deprecacja/baner zachód słońca w piaskownicach Swagger/Redoc.
Ciągłe zapytania dotyczące sklepów GraphQL (jeśli istnieją).
9) CI/CD - promocja
1. Budowa/jednostka →
2. Testy kontraktowe/modelowe (OpenAPI/Protobuf/GraphQL SDL) →
3. Integracja kontra symulatory →
4. Regresja etapu (anon. migawki) →
5. Kanaryjski prod.
Promocja listy kontrolnej: poniżej w § 12.
10) Skrypty UAT dla partnerów (piaskownica)
Płatności: auth/capture/refund/payout z hakami webowymi i błędami PSP.
KYC/AML: wszystkie statusy + ręczna eskalacja.
Idempotencja: powtarzane 'Idempotency-Key' → ten sam wynik.
Limit stawki: Prawidłowa obsługa '429'.
Okna czasowe: wygaśnięcie żetonów, 'Retry-After', przypadki podróży w czasie.
Haki internetowe: podpisy/przekładki/DLQ, ręczna powtórka i dedup.
11) Polityka i prywatność danych
Nigdy nie przechowywać prawdziwych doków PAN/KYC w piaskownicy/scenie.
Anonimizacja: maskowanie, usuwanie bezpośrednich identyfikatorów, korelacja syntetyczna.
TTL przechowywanie kłód i nadwozi webhook ≤ rutynowe.
12) Listy kontrolne
12. 1 Uruchomienie nowej piaskownicy
- Izolowana sieć/baza/pamięć podręczna/magazynowanie obiektów
- Tajemnice utworzone w KMS/Vault, dostęp według roli
- Symulatory PSP/KYC/gry są wypisywane i wersjonowane
- Kolekcja Swagger/Redoc + Postman (punkty końcowe piaskownicy)
- Haki internetowe: HMAC, retry, DLQ, konsola replay
- Stopa/Profile kwot, Deprecacja/Banery o zachodzie słońca (jeśli istnieją)
- Deski rozdzielcze i wpisy (latency, 5xx, 429, DLQ)
12. 2 Promocja (etap → prod)
- Kontraktowe kontrole różnicowe (bez łamania)
- Obciążenie p95/p99 normalne na etapie
- Webhaki przeszedł UAT, idempotency ok
- Flag funkcji są przygotowane, istnieje plan rollback
- Changelog, przewodnik migracji i mailing do partnerów
13) Antypattery
Piaskownica, która „potajemnie” dotyka usług/baz danych prod.
Prawdziwe dane karty/paszportu w scenie/piaskownicy.
Symulatory bez haków/rekolekcji to tylko „szczęśliwa ścieżka”.
Brak idempotencji → zduplikowane płatności/zakłady.
Jeden wspólny sekret HMAC dla wszystkich partnerów.
Nie ma żadnych ograniczeń ani przejrzystych 429/Retry-After.
14) Mini snajpery
.env. piaskownica (przykład)
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 (serwer piaskownicy)
yaml servers:
- url: https://sandbox.api.example.com/v1 description: Public Sandbox
Pseudokod idempotencji
pseudo if store.exists(idem_key): return store.get(idem_key)
res = do_business()
store.set(idem_key, res, ttl=72h)
return res
Wyzwalacze symulatorów PSP
json
{ "scenario": "payout", "case": "declined_insufficient", "payout_id": "p_123" }
15) Obserwowalność piaskownicy i SLO
Uptime piaskownica API ≥ 99. 5% (prezentacja integracyjna nie powinna spaść).
Haki p95 ≤ 3 s do 2xx przy normalnym obciążeniu.
Budżet błędu 5xx bramy ≤ 0. 1%.
Portal dokujący jest dostępny i zsynchronizowany z umową.
16) Zarządzanie
Właściciel środowiska (SRE/Platform) i steward API (kontrakty).
Proces RFC do łamania zmian, deprecacja/kalendarz zachód słońca.
Oddzielne limity/kwoty i ceny „fair-use” dla publicznej skrzynki piaskowej.
Wznów streszczenie
Piaskownica jest produktem dla programistów, a nie "kopią bazy. "Daj: ścisła izolacja, dane syntetyczne, pełnoprawne symulatory z hakami i przekładkami, determinizm po bokach i podróży w czasie, flagi funkcji i przejrzyste ograniczenia. Powiązaj wszystko z umowami, obserwowalnością i zarządzaniem - a Twoje integracje staną się szybkie, bezpieczne i przewidywalne, a wydają bezbolesne.