Масхара ва пойгоҳҳо барои ҳамгироӣ
1) Чаро ба мо мижгонҳо ва васлҳо лозиманд
Интегратсия бо провайдерҳои пардохт, хидматҳои KYC, брокерҳои паёмҳо, CRM ва ғайра санҷишҳоро суст, ноустувор ва гарон мекунанд. Moki/васлҳо иҷозат медиҳанд:- Ҷудо кардани мантиқи хизматрасонӣ аз муҳити ноустувор
- Муайян кардани ҷавобҳо ва хатогиҳо
- таҷдиди ҳолатҳои нодири сарҳадӣ (танаффус, 429/5xx, номутобиқатӣ);
- озмоишҳои маҳаллӣ ва дар CI зуд ва пешгӯишавандаро иҷро кунед.
2) Шартҳо ва таксономия
Stub як доғи оддӣ бо посухи собит аст, бидуни санҷиши муштарак.
Масхара - ашёе, ки интизори зангҳо буда, онҳоро тафтиш мекунад (фармоиш/рақам/далел).
Қалбакӣ татбиқи соддакардашуда (масалан, анбори хотира) бо рафтори воқеӣ мебошад.
Ҷосус парпечест, ки зангҳои воқеиро сабт мекунад.
Виртуализатсияи хидмат як хидмати берунии "виртуалӣ" бо скриптҳо, вазъият ва хусусиятҳои шабака мебошад.
Сабт/Бозсозӣ - сабти трафики воқеӣ ва бозикунии минбаъда (бо филтрҳо/нашрияҳо).
3) Намунаҳои меъморӣ барои санҷиш
Бандарҳо ва адаптерҳо (шашкунҷа): ҳамгироиро берун аз интерфейс бигиред - онро бо қалбакӣ/масхара иваз кардан осон аст.
Қабати зиддикоррупсионӣ (ACL): як модул модели берунаро ба модели домейн табдил медиҳад - камтар нуқтаҳои мока.
Мизоҷони шартномавӣ: Насли Open
Парчамҳои хусусият ва режими қуттии қуттӣ: калидҳои бехатар/нуқтаҳои ниҳоӣ барои устувории провайдер.
4) HTTP: асбобҳо ва намунаҳо
4. 1 Сими Мок (мустақил/Java DSL)
Зарбаи JSON:json
{
"request": { "method": "POST", "urlPath": "/v1/payouts", "headers": { "Idempotency-Key": { "matches": ".+" } } },
"response": {
"status": 201,
"headers": { "Content-Type": "application/json" },
"jsonBody": { "id": "po_123", "status": "queued" },
"fixedDelayMilliseconds": 80
}
}
Java DSL (бо санҷиши бадан ва вариантҳо):
java stubFor(post(urlEqualTo("/v1/payouts"))
.withHeader("Idempotency-Key", matching(".+"))
.withRequestBody(matchingJsonPath("$.amount", equalTo("100. 00")))
.willReturn(aResponse(). withStatus(201). withHeader("Content-Type","application/json")
.withBody("{\"id\":\"po_123\",\"status\":\"queued\"}")));
4. 2 Сервер (Динамика/Санҷишҳо)
json
{
"httpRequest": { "method": "GET", "path": "/v1/wallets/w123" },
"httpResponse": { "statusCode": 200, "headers":[{"name":"Content-Type","values":["application/json"]}],
"body": { "id":"w123","currency":"EUR","balance":0 } }
}
4. 3 Hoverfly (миёнаравӣ, сабт/такрорӣ)
Трафикро бар зидди қуттии провайдер сабт кунед, PII-ро тоза кунед, онро ҳамчун асбоб ислоҳ кунед.
Дар ҳолати симулятсия, вариантҳоро илова кунед: 200/4xx/5xx, таъхирҳо ва тирезаҳои "печида".
4. 4 Гиреҳ (Нок )/Python (ҷавобҳо )/Гузаштан ('httptest')
Нок:js nock('https://psp. example. com')
.post('/v1/payouts'). reply(201, { id:'po_123', status:'queued' })
.post('/v1/payouts'). reply (409, {code: 'duplicate'}) ;//second call - conflict
Гузаштан:
go srv:= httptest. NewServer(http. HandlerFunc(func(w http. ResponseWriter, r http. Request){
if r. Header. Get("Idempotency-Key") == "" { w. WriteHeader(400); return }
w. Header(). Set("Content-Type","application/json")
w. WriteHeader(201); w. Write([]byte(`{"id":"po_123","status":"queued"}`))
}))
defer srv. Close()
5) GRPC/Протобуф
5. 1 Насли Stab
Серверро аз тарафи '.proto' тавлид кунед, усулҳоро бо ҷавобҳои идорашаванда иҷро кунед.
Метамаълумот (сарлавҳаҳо), статусҳо ('рамзҳо. Рамзҳои нодуруст ',' рамз. Мӯҳлати ниҳоӣ ').
go type FakePayouts struct{ pb. UnimplementedPayoutsServer }
func (f FakePayouts) Create(ctx context. Context, in pb. PayoutReq)(pb. PayoutRes,error){
if in. Amount <= 0 { return nil, status. Error(codes. InvalidArgument,"amount>0") }
return &pb. PayoutRes{Id:"po_123", Status:"QUEUED"}, nil
}
5. 2 grpcurl барои манфӣ
grpcurl -plaintext -d '{"amount":0}' localhost:50051 payouts. Payouts/Create
6) Хабарҳо ва ҷараёнҳо: Кафка/Харгӯш
6. 1 Моки-схема
Феҳристи схемаро истифода баред ва Avro/JSON-Schema/Protobuf-ро дар озмоишҳо тасдиқ кунед.
Санҷиши истеҳсолкунанда: паём ба схема мувофиқат мекунад; Санҷиши истеъмолкунандагон: версияҳои кӯҳна ва навро қабул мекунад.
6. 2 Тестконтейнерҳо (Кафка + Мисоли сабти ном)
java
KafkaContainer kafka = new KafkaContainer(DockerImageName. parse("confluentinc/cp-kafka:7. 6. 1"));
kafka. start();
//We publish the event and wait for consumption with deduplication by key
6. 3 манфӣ
Нусхабардорӣ, таҷдиди тартибот, таъхири интиқол, паёмҳои "заҳролуд" (мактуби мурда).
Паёмҳои калон (наздик), версияҳои схемаи эътирофнашуда.
7) Пайвасткунакҳои шартномавӣ
7. 1 Паймон (масхараҳои CDC)
Истеъмолкунанда интизориҳои § файли пактӣ → провайдерро дар мавқеъ тасдиқ мекунад.
Сервери Pact stub интизориҳои санҷишҳои ҳамгироии муштариёнро иҷро мекунад.
7. 2 Насли устувор
Воситаҳое, ки сервери масхарабозро аз мушаххасот баланд мебардоранд (аз ҷумла Prism, openapi-mock, grpc-mock).
Ба мушаххасот мисолҳо/рамзҳои манфиро дохил кунед: ин ҳам шартнома аст.
8) Шабака ва бетартибӣ: моделиронии нокомӣ
Таъхирҳо ва ҷиттер: собит/тақсимшуда; мӯҳлати санҷиш ва вақти санҷиш.
Вақти истироҳат/танаффус: пайвастҳои нимтайёр, RST, барқароркунии ҷараёни H2, 503/Retry-After.
Аз даст додани пакет/нусхабардорӣ: барои GRPC/ҷараёнҳо.
Воситаҳо: Toxiproxy, Mock-Server (тазриқи хато), xk6-вайронкунанда, нетем дар CI.
toxiproxy-cli toxic add psp --type latency --latency 300 --jitter 100
9) Маълумот, асрори ва детерминизм
Редаксия ва синтетика: PII дар ислоҳҳо нест; пул - форматкунии даҳӣ/қатъӣ.
Танзими вақт: соати қалбакӣ; "дирӯз/имрӯз" - назорат.
Idempotency: ҳамон 'Idempotency-Key' → ҳамон посух.
Генераторҳо: заводҳо/бинокорони маълумот бо арзишҳои шаффоф (масалан, 'test _ user _ 001').
Ислоҳи версия (барчаспҳо), ҷавобҳои "хориҷшуда" -ро бидуни миёнаравӣ нигоҳ надоред.
10) CI/CD ва муҳитҳо
Матритса: воҳиди (қалбакӣ дар ҷараёни раванд) → компонент (виртуализатсияи маҳаллӣ) → ҳамгироӣ (ҳадди аққали moks, Testcontainers).
Артефактҳо: файлҳои пактӣ, суратҳои Open-API, гузоришҳои серверҳои ioc, PCAP барои қатраҳо.
Параллелизм: бандарҳои беназир/префиксҳои асосӣ; изолятсияи зарфҳо.
Дарвоза: шартномаи сабз (санҷиши CDC), мушаххасоти дуруст (линт), манфӣ гузаштанд.
11) Антипаттернҳо
Камбудиҳои "нусхабардорӣ" дар хидмати воқеӣ → эътимоди бардурӯғ. Бо шартномаҳо ва сабти даврӣ/санҷиш табобат карда мешавад.
"Макромокҳо" -и тамоми ҷаҳон дар ҳар як озмоиш → осебпазирӣ, маҷрои гаронбаҳо. Бандарҳои лоғар ва ACL-ро созед.
Moki дар E2E, ки дар он ҳамгироии воқеӣ лозим аст (хусусан пардохтҳо/вебҳукҳо бо HMAC/MTLS).
Қуттиҳо аз сабаби вақт/тасодуфӣ/шабака § соати қалбакӣ, ҷойҳои детерминистиро истифода мебаранд.
Асрҳо дар ислоҳот/репозиторияҳо. Асрҳо - танҳо тавассути нигаҳдории махфии CI.
12) Хусусиятҳои IGaming/Finance
Пардохтҳо/бозхондҳо: Mokes бояд 'Idempotency-Key', 'Retry-After', HMAC/MTLS, рамзҳои санксия ва посухҳои 'дароз' -ро дастгирӣ кунад.
Мантиқи бонусӣ/зидди қаллобӣ: сенарияи суръат/429, ATO/мушкилот, ҳалли хатарҳо 'иҷозат додан/рад кардан/даъват кардан' TTL.
KYC/AML: посухҳои қуттии қуттӣ аз рӯи сатҳи KYC, манфӣ (номувофиқатӣ, ҳуҷҷатҳои беэътибор), веб-китобҳо бо такрори такрорӣ ('равзанаи X-Timestamp').
Қаламравҳо/иҷорагирон: Сарлавҳаҳои зарурии 'X-иҷорагир/X-минтақа', профилҳои гуногуни посух.
13) Дорухатҳои мини (варақи фиреб)
Пардохти такрорӣ: Wire
PSP-и суст: Mock
Webhooks: сервери маҳаллии HTTP + Санҷиши имзои HMAC; такрори пас аз 5 сония дубора эҷод намекунад.
Кафка такрор мекунад: як паёмро ду бор фиристед; дастур бояд idempotent бошад.
Статусҳо дар GRPC: матритсаи санҷишҳои 'рамзҳо' (беэътибор, мӯҳлати ниҳоӣ, захираи хасташуда).
14) Рӯйхати санҷиши омодагии Prod
- Бандарҳо/адаптерҳо таъкид шудаанд; интегратсияҳо дар паси интерфейсҳо пинҳон карда мешаванд.
- Барои HTTP/g
- Барои брокерҳо - Тестконтейнерҳо + Феҳрист; санҷишҳои такрорӣ/фармоиш/паёми калон.
- бетартибӣ: таъхирҳо, таъхирҳо, барқароркунӣ, 429/503 бо 'Retry-After'; шабака тақлид карда мешавад (Toxiproxy/netem).
- Асбобҳо бе PII; соати қалбакӣ; idempotency сикка зада мешавад.
- Матритсаи CI: воҳиди → компонент → ҳамгироӣ; артефактҳои сабти/шартнома нигоҳ дошта мешаванд.
- Қуттиҳои провайдер: калидҳо ҷудо карда шудаанд, нуқтаҳои ниҳоӣ танзим карда шудаанд, дафтарчаи корӣ мавҷуд аст.
- Сабт/Бозсозӣ аз рӯи ҷадвал нав карда мешавад, нишонаҳо таҳрир карда мешаванд.
- ченакҳои номуайян ва давомнокии санҷиш таҳти назорат; ҳушдор ҳангоми афзоиш.
15) TL; ДР
Интегратсияро тавассути бандарҳои лоғар ҷудо кунед ва воситаи дурусти вазифаро истифода баред: стубҳо барои парвандаҳои оддӣ, масхара барои санҷиши ҳамкорӣ, қалбакӣ барои рафтори воқеӣ, виртуализатсияи хидмат ва бетартибӣ барои шабака ва хатогиҳои нодир. Шартномаи moki-ро огоҳона созед (Pact/API/Proto), ислоҳҳоро муайянкунанда ва PII-ро нигоҳ доред, таъхирҳо/таъхирҳоро тақлид кунед/429/5xx. Дар CI, пирамида созед: воҳиди → компонент → ҳамгироӣ; блоки озод бо шартномаҳои сурх. Барои пардохтҳо/роҳҳои CCM, HMAC/MTLS, idempotence ва сенарияҳои манфиро баррасӣ кунед.