REST, gRPC et webhooks dans iGaming : modèles et anti-modèles
Texte intégral de l'article
1) Carte des protocoles : qui est responsable de quoi
REST est une requête synchrone universelle sur HTTP/JSON. Cache transparent, facile à déboguer, pratique pour les intégrations B2B et les API admin.
gRPC est un RPC binaire haute performance sur le dessus de la HTTP/2 : faible latence, strimes, circuits durs. Bon pour l'argent chaud (wallet/settle), les services internes et les strimes à longue durée de vie (live).
Webhooks - callback (callback) du destinataire à l'expéditeur. Ils sont utilisés pour des événements (« l'argent a chuté », « la limite a fonctionné ») où l'initiateur n'est pas toujours celui qui attend le résultat.
La règle d'or :- L'argent passe par un RPC synchrone (REST/gRPC) avec des invariants rigides et une idempotence. Télémétrie et événements commerciaux - asynchrone (webhooks + bus d'événements).
2) Voies types et canaux recommandés
3) Conception orientée contrat
3. 1 REST (fragments)
POST /v1/bets/authorize
Headers: X-Idempotency-Key: bet_r_8c12_1, X-Trace-Id: tr_a1b2
{
"session_id":"s_456",  "bet_id":"b_001",  "round_id":"r_8c12",  "amount":{"amount":2. 00,"currency":"EUR"}
}
→ 200 {"status":"authorized","hold_id":"h_zz1"}
409
{"code":"DUPLICATE","message":"Bet already authorized","retryable":false,"trace_id":"tr_a1b2"}3. 2 gRPC (protobuf, simplifié)
proto syntax = "proto3";
package wallet. v1;
message Money { int64 minor_units = 1; string currency = 2; } // cents message AuthorizeBetReq { string session_id=1; string bet_id=2; string round_id=3; Money amount=4; string idempotency_key=5; }
message AuthorizeBetRes { string status=1; string hold_id=2; }
service Wallet {
rpc AuthorizeBet(AuthorizeBetReq) returns (AuthorizeBetRes);
rpc SettleBet(SettleReq) returns (SettleRes);
}3. 3 Webhooks (exemple d'abonnement)
POST https://provider. example/webhooks
{
"topic":"wallet. credit. ok",  "callback_url":"https://rgs. example/journal",  "secret":"", "version":"1. 2"
}
POST https://rgs. example/journal
Headers: X-Signature: sha256=..., X-Trace-Id: tr_a1b2
{
"event_type":"wallet. credit. ok",  "schema_version":"1. 2. 0",  "event_id":"uuid",  "payload":{"player_id":"p_19f3","amount":{"minor_units":1460,"currency":"EUR"}}
}4) Idempotence et cohérence
Exigez toujours 'X-Idempotency-Key' sur les opérations write (REST/gRPC metadata). La répétition → la même réponse.
La composition de la clé est liée aux paramètres métiers (par exemple, "bet _ id + amount').
Sagas pour les processus longs (autorize → commit/lock → settle → credit).
Outbox/CDC : les événements sont enregistrés atomiquement à côté de la transaction et publiés de l'extérieur.
5) Versioning et compatibilité
REST - '/v1/... '+' Deprecation/Sunset '- têtes ; gRPC — `package wallet. v1`; événements - 'schema _ version' dans les corps + registre de schémas.
BouVer : mineur - champs optionnels/nouveaux endpoints ; major est le nouveau chemin/paquet, la « double lettre » des événements sur la migration.
Ne changez jamais la sémantique des statuts monétaires sans version majeure.
6) Sécurité des transports
mTLS sur tous les S2S ; pour les webhooks, la signature du corps (HMAC/EdDSA) + timestamp et les fenêtres de validation.
Limitation des scoops (OAuth2 CC) et segmentation des clés par marque/région.
Zero-trust : politiques réseau, jetons à courte durée de vie, Vault/HSM, audit WORM des actions critiques.
7) Observabilité et SLO
"trace _ id'de bout en bout dans REST, gRPC metadata et webhooks.
Métriques : p50/p95/p99 latency, error rate par code, throughput, lag files d'attente.
SLO-minimum (repères) :- Wallet p95 '<150 ms' (Authorize/Settle), REST public B2B p95' <300 ms', Webhooks livrés '<5 min' 99e percentile, « Settlements perdus/dupliqués » = 0.
8) Retrai, backoff et l'ordre de livraison
REST/gRPC : backoff exponentiel, jitter, durée limite (deadline/timeout).
Webhooks : livraison répétée jusqu'à 2xx ; enregistrement de l'ordre par clé ('player _ id/round _ id') ou déduplication sur le récepteur.
Anti-tempêtes : limite des retraits parallèles, circuit breaker, rate limit.
9) Modèles d'intégration
Pattern A : « L'argent est synchrone, les événements sont asynchrones »
1. RGS → Wallet (gRPC/REST) `authorize` → `settle/credit`.
2. En parallèle, 'bet est publié. settled 'dans le bus et le fournisseur reçoit un reçu webhook.
En plus, l'argent rapide, l'observation. Moins : il faut deux boucles.
Pattern B : « Streaming live »
Le noyau en direct ↔ Bridge via gRPC streaming (états de la table, fenêtre de paris).
Transactions monétaires - RPC distincts ; les événements sont dans le bus/webhooks.
Plus : un délai minimum pour les statuts vivants.
Modèle C : « B2B public REST »
Catalogues/bonus/affiliations/rapports - REST avec cursor-pagination, filtres, ETag.
Le plus : l'intégration simple des partenaires.
10) Anti-modèles (drapeaux rouges)
Transactions monétaires uniquement via webhooks (sans confirmation synchrone).
Absence de 'Idempotency-Key' → prises de débit/crédits.
Publication d'événements en contournant outbox/CDC (événements perdus).
Webhooks sans signature/horodatage → remplacement.
Mélange PII/argent de différentes régions dans le même canal sans les étiquettes « région/tenant ».
Gros payload binaire dans les webhooks (casser les retraits et les limites).
Dégradation zéro : la chute des webhooks bloque le calcul de l'argent.
gRPC sans deadline et sans backoff - connexions dépendantes, épuisement des ressources.
11) Chèques-feuilles
Architecte/plateforme
- Argent par gRPC/REST avec idempotence, événements - webhooks/bus.
- Outbox/CDC sur tous les fonds.
- `/vN` и schema registry; Processus de deprection/Sunset.
- mTLS + signatures Web ; secteur par marque/région.
- SLO-dashboards p95/p99, error rate, webhook-lag.
- DR/xaoc-exercice : prise-livraison, out-of-order, faire tomber la région.
Fournisseur/RGS
- J'envoie 'X-Trace-Id' et 'X-Idempotency-Key'.
- Retraits avec backoff et déduplication ; prêt à livrer à nouveau les webhooks.
- Mettre à jour les versions des contrats ; je réagis à 'Deprecation/Sunset'.
- Logs/métriques par code d'erreur et par code temporel.
12) Mini-solutions pour les cas pointus
Safari/ITP et restrictions de third-party : l'argent est dans l'hôte (REST/gRPC), le contenu iFrame communique via « postMessage » ; Webhooks d'un hôte, pas d'iFrame.
Multibrand : balises 'tenant _ id/brand _ id/license' dans les titres et les événements ; les clés/certificats sont séparés.
Grands éclats (tournois) : avant les webhooks - tampon/file d'attente avec DLQ ; en surcharge, « no new sessions »/ » pause non-core hooks ».
13) Exemples d'alertes orientées SLO
Wallet. Authorize p95> 150 ms 5 min consécutifs.
Erreurs 'DUPLICATE/IDEMPTENCY _ MISMATCH'> 0. 5 % en 10 min.
Webhook lag p99> 180 c sur le thème 'bet. settled`.
Consumer lag en Kafka> 30 s pour 'wallet. credit.`.
14) Conclusion
REST, gRPC et webhooks dans iGaming ne sont pas des technologies interchangeables, mais des parties d'un seul modèle d'exploitation.
REST/gRPC détiennent des invariants monétaires : faible latence, idempotence, SLA stricte.
Les webhooks/bus offrent transparence et échelle : événements, télémétrie, intégration.
Ajoutez outbox/CDC, le versioning, les signatures et l'observabilité - et obtenez une architecture où l'argent se déplace rapidement et en toute sécurité, les événements ne sont pas perdus et les mises à niveau se déroulent sans douleur.
