GH GambleHub

Песочницы и тестовые окружения

TL;DR

Надежная песочница = полная изоляция, синтетические/обезличенные данные, реалистичные симуляторы внешних систем, предсказуемые сиды и time-travel, встроенная идемпотентность и вебхуки, прозрачные лимиты и метрики. Прод — недосягаем, ключи — ротуются, promotion — только по чек-листам.


1) Карта окружений и их роли

ОкружениеЦельДоступДанныеНадежность
Local/DevБыстрая разработкаИнженерыСинтетика/минимальные фикстурыНизкая
CI/TestЮнит/интеграционные/контрактные тестыCI/CDАвтосидыСредняя
Stage/Pre-prodФинальная сборка, регрессОграниченнаяАнонимизированные снапшотыВысокая
Public SandboxВнешние партнеры/мерчантыГейт+лимитыТолько синтетикаСредняя
ProdБоеваяSSO/строгий доступРеальныеМаксимум

Правило: sandbox ≠ prod. Любая связь — через односторонние симуляторы без доступа к реальным средствам/играм/персональным данным.


2) Данные: синтетика, анонимизация, сидирование

Синтетика по умолчанию. Генераторы паспортных/карточных данных, валидные, но нефинансовые PAN (тестовые BIN), «живые» паттерны ставок и балансов.
Анонимизация для stage: токенизация идентификаторов, дифференцная приватность для агрегатов, удаление редких комбинаций.
Сиды и детерминизм: одна команда — одно состояние.

bash make db-reset && make db-seed ENV=sandbox SEED=2025_11_03

Time-travel: глобальный «час» окружения для тестов дедлайнов/экспираций.


3) Симуляторы и заглушки (stubs)

Платежи/банки/PSP

Auth/Capture/Refund/Payout со сценариями: `approved`, `declined_insufficient`, `3ds_required`, `timeout`, `duplicate`.
Вебхуки PSP: подписанные HMAC, ретраи, задержки и «грязный интернет».

KYC/AML/Sanctions

Ответы: `clear`, `pep_match`, `sanction_hit`, `doc_mismatch`, `manual_review`.
Поддержка идемпотентности и rate limits как в prod.

Игровые провайдеры/каталог

Лобби, фичи, RTP/раунды — псевдослучайная генерация, управляемые «выплаты/провалы» для UX-кейсов.

Опция: переключатель «строгости» симулятора (happy-path vs chaos).


4) Вебхуки в песочнице

Подписи HMAC (v1), заголовки `X-Event-Id`, `X-Timestamp`, окно ≤ 5 минут.
Ретраи с экспоненциальным backoff, DLQ и replay.
Консоль «переотправить» и логи попыток.

Псевдо:
pseudo
POST /psp/webhooks
Headers: X-Signature, X-Timestamp, X-Event-Id
Body: { event_id, type, data, attempt }

5) Идемпотентность и детерминизм

Все мутации принимают `Idempotency-Key`.
Симуляторы хранят результат по ключу (TTL 24–72 ч).
«Seed-детерминизм»: при одном и том же входе — одинаковый исход (для повторяемых тестов).


6) Безопасность и доступ

Изоляция сетей/VPC, отдельные секреты и домены (`sandbox.example.com`).
RBAC/ABAC: роли «partner», «qa», «dev», скопы токенов минимальны.
Rate-limits и квоты: справедливая доля per-tenant/ключ, понятные `429`/`Retry-After`.
Секреты только в KMS/Vault; регулярная ротация.
Запрет реальных платежей на уровне кода/конфига (feature-flag hard block).


7) API Gateway и наблюдаемость в sandbox

Те же политики: OAuth2/OIDC/JWT, CORS, WAF, DDoS-профиль.
Метрики: p50/p95/p99, 4xx/5xx, hit-rate лимитов, latency webhooks, идемпотентные хиты.
Логи/трейсы: без PII; корелляция `trace_id`.
Дашборд «Здоровье песочницы»: аптайм, очереди вебхуков, ошибки симуляторов.


8) Фича-флаги, версии и совместимость

Включение фич в sandbox → stage → prod.
SemVer для API; баннер Deprecation/Sunset в Swagger/Redoc песочницы.
Persisted queries для GraphQL-витрин (если есть).


9) CI/CD и promotion

1. Build/Unit →

2. Contract/Mock tests (OpenAPI/Protobuf/GraphQL SDL) →

3. Интеграционные против симуляторов →

4. Stage регресс (анон. снапшоты) →

5. Canary в prod.

Gate-чек-лист promotion: ниже в §12.


10) UAT-сценарии для партнеров (в песочнице)

Платежи: auth/capture/refund/payout c вебхуками и ошибками PSP.
KYC/AML: все статусы + ручная эскалация.
Идемпотентность: повторный `Idempotency-Key` → тот же результат.
Rate-limit: корректная обработка `429`.
Временные окна: экспирация токенов, `Retry-After`, time-travel кейсы.
Webhooks: подписи/ретраи/DLQ, ручной replay и дедуп.


11) Политика данных и приватность

Никогда не хранить real PAN/KYC-доки в sandbox/stage.
Анонимизация: маскирование, удаление прямых идентификаторов, синтетическая корреляция.
TTL хранения логов и тел вебхуков ≤ регламентного.


12) Чек-листы

12.1 Запуск новой песочницы

  • Изолированная сеть/база/кеш/объектное хранилище
  • Секреты созданы в KMS/Vault, доступ по ролям
  • Симуляторы PSP/KYC/игр задеплоены и версионированы
  • Swagger/Redoc + Postman коллекция (sandbox endpoints)
  • Вебхуки: HMAC, retry, DLQ, консоль replay
  • Rate/Quota профили, баннеры Deprecation/Sunset (если есть)
  • Дашборды и алерты (latency, 5xx, 429, DLQ)

12.2 Promotion release (stage→prod)

  • Контрактные diff-проверки (без breaking)
  • Нагрузочные p95/p99 в норме на stage
  • Вебхуки прошли UAT, идемпотентность ок
  • Фича-флаги подготовлены, план отката есть
  • Changelog, миграционный гид и рассылка партнерам

13) Антипаттерны

Песочница, «тайно» трогающая prod-сервисы/базы.
Реальные карточные/паспортные данные в stage/sandbox.
Симуляторы без вэбхуков/ретраев — «счастливая тропа» только.
Отсутствие идемпотентности → дубликаты выплат/ставок.
Один общий HMAC-секрет для всех партнеров.
Нет лимитов и прозрачных 429/Retry-After.


14) Мини-сниппеты

.env.sandbox (пример)

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 фрагмент (sandbox сервер)

yaml servers:
- url: https://sandbox.api.example.com/v1 description: Public Sandbox

Псевдокод идемпотентности

pseudo if store.exists(idem_key): return store.get(idem_key)
res = do_business()
store.set(idem_key, res, ttl=72h)
return res

Триггеры симулятора PSP

json
{ "scenario": "payout", "case": "declined_insufficient", "payout_id": "p_123" }

15) Наблюдаемость и SLO песочницы

Uptime sandbox API ≥ 99.5% (витрина интеграций не должна падать).
Webhooks p95 ≤ 3 с до 2xx при нормальной нагрузке.
Error budget 5xx шлюза ≤ 0.1%.
Док-портал доступен и синхронизирован с контрактом.


16) Governance

Владелец окружения (SRE/Platform) и стeward API (контракты).
RFC-процесс для breaking-изменений, календарь Deprecation/Sunset.
Отдельные лимиты/квоты и прайсинг «fair-use» для публичной песочницы.


Резюме

Песочница — это продукт для разработчиков, а не «копия базы». Дайте: строгую изоляцию, синтетические данные, полноценные симуляторы с вебхуками и ретраями, детерминизм через сиды и time-travel, фича-флаги и прозрачные лимиты. Обвяжите все контрактами, наблюдаемостью и governance — и ваши интеграции станут быстрыми, безопасными и предсказуемыми, а релизы — безболезненными.

Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

Нажимая кнопку, вы соглашаетесь на обработку данных.