۶ مرداد ۱۴۰۵ · Alper Tekin
Idempotency در APIهای رزرو سفر
کلید idempotency چیست، چرا APIهای رزرو به آن نیاز دارند و traveldistro تکرار امن را در همه حوزهها چگونه پیاده میکند.
یک عملیات وقتی idempotent است که دو بار اجرا کردنش همان اثر یک بار اجرا را داشته باشد. برای خواندن، این رایگان است. برای رزروی که پول جابهجا میکند و موجودی نگه میدارد، باید طراحی شود.
مشکل تایماوت
سرور شما درخواست رزرو میفرستد. پاسخ هرگز نمیرسد: یک پروکسی اتصال را انداخته، شبکه موبایل پلک زده، یک deploy پاد را عوض کرده است. رزرو انجام شد؟
بدون idempotency هر دو جواب گراناند. اگر تکرار کنید و تلاش اول موفق بوده باشد، مشتریتان دو رزرو دارد و شما یک مکالمه بازپرداخت. اگر تکرار نکنید و تلاش اول شکست خورده باشد، چیزی نفروختهاید و مشتری میرود.
کلید idempotency چطور حلش میکند
با هدر Idempotency-Key تکرار امن است:
- به ازای هر نیت رزرو یک کلید یکتا میسازید و با درخواست میفرستید.
- اگر سرور کلید را ندیده باشد، رزرو را عادی پردازش میکند.
- اگر سرور آن کلید را قبلاً پردازش کرده باشد، به جای رزرو دوباره، نتیجه اصلی را برمیگرداند.
- اگر همان کلید با بدنه متفاوتی برسد، API آن را با
IDEMPOTENCY_CONFLICTرد میکند؛ چون این باگی در سمت فراخواننده است که ارزش بلند اعلام شدن دارد.
قانون برای فراخواننده کوتاه است: با همان کلید تکرار کنید و یک کلید را هرگز برای نیت دیگری دوباره استفاده نکنید.
traveldistro چگونه پیاده میکند
هر endpoint رزرو در بلیت، ترانسفر، خودروی اجارهای و eSIM هدر Idempotency-Key را الزامی میکند. رزرو ناموفق به وضعیت باقیمانده صفر برمیگردد و تعارضها 409 ماشینخوان برمیگردانند. رفتار کامل در کاتالوگ خطا و صفحه پایایی مستند است.