Idempotentlik
Tarmoq ishonchsiz. So’rov ketadi, javob yo’qoladi, kod qayta urinadi — va mijoz ikkita SMS oladi. Idempotentlik aynan shuni to’sadi.
Ikki qatlam
heading.anchorLabelHimoya ikki joyda ishlaydi va ular boshqa-boshqa:
| Qatlam | Nima qiladi | Nima bilan |
|---|---|---|
| Transport | Ayni so’rovni takrorlamaydi | idempotency_key |
| Semantik | Ayni niyatni takrorlamaydi | Operation Ledger |
Semantik kalit nimadan tuziladi
heading.anchorLabeltenant_id → business_id → actor_ref → capability_id → resource_ref → business_window⚡ capability_id, tool nomi emas. Shuning uchun konnektor
almashsa (Bitrix24 → 1C) idempotentlik buzilmaydi: niyat o’sha-o’sha.
Bazada bu UNIQUE (tenant_id, semantic_key) — yagona haqiqiy himoya.
Kalitni qanday tanlash
heading.anchorLabel✅ To’g’ri
heading.anchorLabel# Biznes hodisasiga bog'langan — barqaroridempotency_key = f"buyurtma-{order_id}-tasdiq"Ayni buyurtma uchun qayta chaqirsangiz — ikkinchi effekt yo’q.
⛔ Noto’g’ri
heading.anchorLabelidempotency_key = str(uuid4()) # har safar yangi → himoya YO'Qidempotency_key = str(time.time()) # ayni sababTasodifiy kalit — himoyani o’chirish bilan barobar.
Takrorlanadigan amal
heading.anchorLabelKunlik hisobot kabi amal har kuni takrorlanishi kerak:
idempotency_key = f"kunlik-hisobot-{date.today()}"Bu business_window tushunchasi: sana kalitning bir qismi bo’ladi,
shuning uchun ertaga ayni amal bloklanmaydi.
Kalit to’qnashuvi
heading.anchorLabel| Holat | HTTP | Ma’nosi |
|---|---|---|
| Ayni kalit + ayni tana | 200 |
Mavjud ijro qaytadi |
| Ayni kalit + boshqa tana | 409 |
Jim ustiga yozish yo’q |
⚠ 409 — bu xato emas, himoya. U «siz ayni kalitni boshqa niyat
uchun ishlatyapsiz» degani.
Takrorlangan niyat
heading.anchorLabelAmal allaqachon boshlangan bo’lsa konnektorga borilmaydi:
| Mavjud holat | Javob |
|---|---|
VERIFIED |
409 duplicate_intent_verified — allaqachon bajarilgan |
| Boshqasi | 409 duplicate_intent — boshlangan, holati noaniq |
Farq ataylab: birinchisi muvaffaqiyat (yangi effekt kerak emas), ikkinchisi esa «kuting».