برای توسعهدهندگان
Idempotency-Key: چطور retry را بدون پرداخت تکراری انجام دهیم
شبکه قطع میشود و درخواستها تکرار میشوند. با یک هدر ساده، هر تکرار همان نتیجه اول را میگیرد.
· ۵ دقیقه مطالعه · تیم شیپی
فرض کنید سرور شما درخواست ایجاد پرداخت را فرستاده ولی قبل از رسیدن پاسخ، ارتباط قطع شده است. آیا پرداخت ساخته شد؟ اگر دوباره بفرستید، ممکن است دو پرداخت برای یک سفارش داشته باشید. Idempotency-Key این مشکل را حل میکند.
چطور کار میکند؟
- برای هر عملیات منطقی یک کلید یکتا بسازید (مثلاً
order-1042-create-1) و در هدر بفرستید. - اگر همان کلید با همان بدنه دوباره برسد، پاسخ ذخیرهشده اول با هدر
Idempotent-Replayed: trueبرمیگردد. - اگر همان کلید با بدنه متفاوت برسد، خطای
422 idempotency_key_reusedمیگیرید. - اگر درخواست اول هنوز در حال پردازش باشد،
409 idempotency_in_progressمیگیرید؛ کمی بعد تکرار کنید.
کجا الزامی است؟
برای ایجاد پرداخت توصیه میشود و برای استرداد الزامی است. علاوه بر آن، merchant_reference یکتا هم جلوی ثبت دو پرداخت برای یک سفارش را میگیرد.
جزئیات: مستندات Idempotency