REST, gRPC va iGaming vebxuklari: pattern va anti-pattern
Maqolaning to’liq matni
1) Bayonnomalar xaritasi: kim nima uchun javobgar
REST - HTTP/JSON boʻyicha universal sinxron soʻrovlar. Shaffof kesh, oddiy tuzatish, B2B integratsiyalari va ma’muriy-API uchun qulaydir.
gRPC - HTTP/2 ustidagi yuqori unumli ikkilik RPC: past latentlik, oqimlar, qattiq sxemalar. Issiq pul yo’llari (wallet/settle), ichki xizmatlar va uzoq umr ko’radigan strimlar (live) uchun yaxshi.
Vebxuklar - qabul qiluvchidan jo’natuvchiga qaytish qo’ng’iroqlari (callback). Hodisalar uchun ishlatiladi («pul tushdi», «limit ishladi»), unda tashabbuskor har doim ham natijani kutadigan odam emas.
Oltin qoida:- Pul sinxron RPC (REST/gRPC) orqali qattiq invariantlar va idempotentlik bilan ketadi. Telemetriya va biznes tadbirlari - asinxron (vebxuklar + voqealar shinasi).
2) Namunaviy yo’llar va tavsiya etilgan kanallar
3) Kontraktga yo’naltirilgan dizayn
3. 1 REST (parchalar)
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, soddalashtirilgan)
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 Vebxuklar (obuna namunasi)
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) Idempotentlik va kelishuv
Har doim write-operatsiyalarda’X-Idempotency-Key’ni talab qiling (REST/gRPC metadata). Bir xil javob.
Kalit kompozitsiyasi biznes parametrlariga bogʻlangan (masalan,’bet _ id + amount’).
Uzoq jarayonlar uchun saqalar (authorize → commit/lock → settle → credit).
Outbox/CDC: Hodisalar tranzaksiya yonida atomik tarzda qayd etiladi va tashqaridan nashr etiladi.
5) Versiyalash va muvofiqlik
REST - ’/v1/...’+’Deprecation/Sunset’-boshchalar; gRPC — `package wallet. v1`; hodisalar - jismlarda’schema _ version’+ sxemalar reyestri.
SemVer: minor - optional/yangi endpoints; major - yangi yo’l/paket, migratsiya voqealarining «ikki tomonlama yozuvi».
Hech qachon major versiyasiz pul maqomi semantikasini o’zgartirmang.
6) Transport xavfsizligi
mTLS barcha S2S; vebxuklar uchun - tana imzosi (HMAC/EdDSA) + timestamp va validlik oynalari.
Sotib olishni cheklash (CC OAuth2) va per brand/region kalitlarini segmentlash.
Zero-trust: tarmoq siyosati, qisqa yashaydigan tokenlar, Vault/HSM, tanqidiy harakatlarning WORM auditi.
7) Kuzatuv va SLO
’trace _ id’ orqali REST, gRPC metadata va vebxuklarda.
Metriklar: p50/p95/p99 latency, error rate kodlar bo’yicha, throughput, lag navbatlar.
SLO-minimum:- Wallet p95’<150 ms’(Authorize/Settle), REST ommaviy B2B p95’<300 ms’, Vebxuklar yetkazib berildi’<5 min’99-pertsentil, «Yo’qolgan/dublyaj qilingan settlmentlar» = 0.
8) Retray, backoff va yetkazib berish tartibi
REST/gRPC: eksponensial backoff, jitter, vaqt chegarasi (deadline/timeout).
Vebxuki: takroriy yetkazib berish’2xx’gacha; kalit tartibini saqlash (’player _ id/round _ id’) yoki qabul qiluvchida dekuplikatsiya qilish.
Anti-bo’ronlar: parallel retray limiti, circuit breaker, rate limit.
9) Integratsiya patternlari
Pattern A: «Pul sinxron, voqealar asinxron»
1. RGS → Wallet (gRPC/REST) `authorize` → `settle/credit`.
2. Shu bilan birga’bet’nashr etiladi. shinaga settled’, provayder esa vebxuk-kvitansiyani oladi.
Plyus: tez pul, kuzatish. Minus: ikkita kontur kerak.
Pattern B: «Streaming live»
gRPC streaming orqali Live Bridge yadrosi (stol holatlari, stavkalar oynasi).
Pul operatsiyalari - alohida unary RPC; hodisalar - shina/vebxukka.
Plyus: tirik maqomlarning minimal kechikishi.
Pattern C: «B2B ommaviy REST»
Kataloglar/bonuslar/affiliates/hisobotlar - cursor-paginatsiya, filtrlar, ETag bilan REST.
Ortiqcha: sheriklarning oddiy integratsiyasi.
10) Anti-patternlar (qizil bayroqlar)
Pul operatsiyalari faqat vebxuklar orqali amalga oshiriladi (sinxron tasdiqlamasdan).
Yo’qligi’Idempotency-Key’→ ikkita debet/kredit.
Hodisalarni outbox/CDC’ni chetlab oʻtish (hodisalar yoʻqoladi).
Imzosiz vebxuklar → almashtirish.
Bir kanalda’region/tenant’tagisiz turli mintaqalarning PII/pullarini aralashtirish.
Vebxuklarda katta binary payload (retray va limitlarni buzadi).
Nol degradatsiyalar: vebxuklarning tushishi pul hisobini to’sib qo’yadi.
gRPC deadline va backoffsiz - bog’langan ulanishlar, resurslarning tugashi.
11) Chek-varaqlar
Arxitektor/platforma
- gRPC/REST bo’yicha pul - idempotentlik, voqealar - vebxukki/shina.
- Barcha pul yoʻllarida Outbox/CDC.
- `/vN` и schema registry; Deprecation/Sunset jarayoni.
- mTLS + vebxuk imzolari; sekretlar per brand/region.
- SLO-dashbordlar p95/p99, error rate, webhook-lag.
- DR/xaoc-mashqlar: dubl-yetkazib berish, out-of-order, mintaqa chiqindilari.
Provayder/RGS
- ’X-Trace-Id’va’X-Idempotency-Key’ni yuboraman.
- Backoff va de-duplikatsiyali retralar; vebxuklarni qayta yetkazib berishga tayyor.
- Shartnomalar versiyasini yangilayapman; «Deprecation/Sunset» ga javob beraman.
- Xato va vaqt kodlari bo’yicha loglar/metriklar.
12) O’tkir keyslar uchun mini-yechimlar
Safari/ITP va third-party cheklovlari: pul - xostda (REST/gRPC), iFrame-kontent’postMessage’orqali muloqot qiladi; vebxuklar iFrame’dan emas.
Multibrend:’tenant _ id/brand _ id/license’taglari sarlavhalar va voqealarda; kalit/sertifikatlar alohida.
Katta portlashlar (turnirlar): vebxuklar oldida - DLQ bilan bufer/navbat; ortiqcha yuklashda - «no new sessions »/» pause non-core hooks».
13) SLO yo’naltirilgan alertlar misollari
Wallet. Authorize p95> 150 ms ketma-ket 5 daqiqa.
Xatolar’DUPLICATE/IDEMPOTENCY _ MISMATCH’> 0. 10 daqiqada 5%
Webhook lag p99> 180 c’bet mavzusida. settled`.
Consumer lag v Kafka> 30 s uchun’wallet. credit.`.
14) Xulosa
REST, gRPC va iGaming vebxuklari bir-birining o’rnini bosadigan texnologiyalar emas, balki bitta operatsion modelning qismlaridir.
REST/gRPC pul invariantlarini saqlaydi: past latentlik, idempotentlik, qat’iy SLA.
Vebxukki/shina shaffoflik va ko’lamni ta’minlaydi: voqealar, telemetriya, integratsiya.
Outbox/CDC qo’shing, versiyalash, imzo va kuzatish - pul tez va xavfsiz harakatlanadigan, voqealar yo’qolmaydigan va yangilanishlar og’riqsiz o’tadigan arxitekturani oling.
