یه کلیک، دو تا برداشت پول — این یه باگ نیست، یه چیزیه که همهی APIها دیر یا زود باهاش روبرو میشن
سناریو: کاربر روی "پرداخت ۵۰ دلار" میزنه. شبکه قطعومتصل میشه. کلاینت response رو نمیبینه، فکر میکنه fail شده، دوباره همون request رو میفرسته. نتیجه بدون محافظت؟ ۱۰۰ دلار برداشت شده. نتیجه با Idempotency Key؟ همون ۵۰ دلار — دقیقاً یه بار.
راهحل تو Laravel: کلاینت یه UUID به اسم Idempotency-Key میفرسته که برای هر عملیات یه بار تولید میشه و روی retry هم عوض نمیشه. یه middleware قبل از رسیدن به بیزینسلاجیک چک میکنه این key قبلاً دیده شده یا نه:
— اگه جدیده → پردازش میکنه و نتیجه رو ذخیره میکنه.
— اگه تکراریه → همون response قبلی رو دقیقاً عیناً برمیگردونه، بدون اجرای دوبارهی هندلر.
این دقیقاً همون الگوییه که Stripe، GitHub و PayPal روی endpointهای حساسشون پیاده کردن.
@DevTwitter | <Seyed taha Aghamir/>
Post #13307
5.18K

- 🍌 34
- 👍 26
- 👎 1