Javob g'oyib bo'lganda Stripe so'rovingizni eslab qoladi
Server operatsiyani yakunlaganidan keyin vaqt tugashi to'lovni noaniq qoldirishi mumkin.
Server operatsiyani yakunlaganidan keyin vaqt tugashi to'lovni noaniq qoldirishi mumkin. Ushbu "Under the Hood" tushuntirishi Stripe API v1 ning hujjatlashtirilgan "idempotency" shartnomasidan foydalanib, barqaror operatsiya kalitlarini, saqlangan javobni qayta ijro etishni, parametrlar va bir vaqtning o'zida ishlash chegaralarini, saqlash muddatini va natijalarni muvofiqlashtirishni ko'rsatadi.
Yozma nashrini oʻqing (inglizcha) ↗
Bu video nimani qamrab oladi
- Idempotency operatsiyani takrorlashning maqsadli ta'sirini anglatadi. Stripe API v1 hujjatlashtirilgan saqlangan javobni qayta ijro etish shartnomasini qo'shadi.
- Bir xil mantiqiy harakatni qayta urinish bir xil kalit va parametrlardan foydalanadi. Operatsiya kalitini alohida SDK chaqiruvlari yoki dasturni qayta ishga tushirishlar orasida saqlang; haqiqatan ham yangi harakat o'z kalitiga ega bo'lishi kerak.
- Endpoint ishga tushgandan so'ng, Stripe API v1 birinchi so'rovning holatini va tanasini, shu jumladan 500 xatolarni saqlaydi va qayta urinishlarda o'sha saqlangan javobni qaytaradi.
- Bir xil kalit bilan o'zgartirilgan parametrlar mos kelmaslikni keltirib chiqaradi. Validatsiya xatolari va bir vaqtning o'zida ijro etish mojarolari o'sha urinish uchun "idempotent" natija saqlamaydi va ularni qayta urinish mumkin.
- Stripe API v1 kalitlarini kamida 24 soat davomida saqlaydi va undan keyin ularni o'chirishi mumkin. Hal qilinmagan tarmoqni qayta urinishlarni birinchi 24 soat bilan cheklang, keyin operatsiyani takrorlashdan oldin to'xtating va muvofiqlashtiring.
- Ulangandan keyin ham keshga olingan 500 xatosi qayta-qayta ijro etilishi mumkin. Asl operatsiya yon ta'sirlarga ega bo'lishi mumkin; uning natijasini aniqlash uchun tegishli ob'ekt, Dashboard so'rovi va veb-kancalardan foydalaning.
- API v2 boshqa qayta ijro etish semantikasidan foydalanadi. Kalit elektron pochta, inventar va har bir mahalliy ma'lumotlar bazasi operatsiyalari uchun universal "aniq bir marta" yetkazib berishni ta'minlamaydi.
Tarjima qilingan transkript
Asl inglizcha hikoyadan tarjima qilingan. Mavjud audio va subtitrlar YouTube tomonidan boshqariladi.
Vaqt tugashi to'lovingizni bekor qildimi?
0:00 Siz vaqt tugashi to'lovingiz amalga oshmadi deb o'ylaysiz. Javob yo'qolgan paytda server ishni tugatishi mumkin, bu esa to'lovingizni ishonchli tarzda hech narsani ko'rsatmaydi. Nima uchun qayta urinish yana pul yechib olishi mumkin? Stripe urinishni qanday eslab qoladi? Qachon qayta urinishni to'xtatish kerak? Va bir yomon tafsilotni yodda tuting. Eslab qolingan xato tarmoq muammosidan keyin ham davom etishi mumkin.
0:17 Biz bunga qaytamiz. Bu The Daily Diff, ichidan.
Idempotency kaliti nimani aniqlaydi?
0:21 Idempotency operatsiyani takrorlash bir marta qilish bilan bir xil maqsadli ta'sirga ega bo'lishini anglatadi. Idempotency kaliti bitta mantiqiy harakatni belgilaydi. Stripe'ning API birinchi versiyasi ushbu belgini qayta urinishlarda tan oladi va saqlangan javobni qayta ijro etadi. Qahva sotib olishni tasavvur qiling. Stripe to'lov so'rovingizni yakunlaydi va javob uyga qaytishda yo'qoladi. Mijoz aylanuvchi belgini ko'radi. Ularning banki yanada qiziqarli talqinga ega bo'lishi mumkin. Himoyalanmagan yaratish so'rovi yon ta'sirni takrorlashi mumkin.
Bir xil kalit qayta urinishni qanday qilib xavfsiz qiladi?
0:45 Birinchi urinishdan oldin noyob kalitni biriktiring va uni qayta urinishlar uchun saqlang. Agar ilovangiz qayta ishga tushsa, o'sha kalitni yozuvlaringizdagi operatsiya bilan saqlang. Stripe'ning birinchi versiya API uchun, endpoint ijrosi boshlangandan so'ng, birinchi so'rovning holati va tanasi saqlanadi. Bir xil kalit va parametrlarni yana yuboring va Stripe saqlangan javobni qaytaradi. Qahva o'z joyida qoladi, kvitansiyasi esa yana sayohat qiladi.
Stripe aynan nimani saqlaydi?
1:07 Mana Stripe'ning haqiqiy so'zlari. Bir xil kalit bilan qayta urinishlar saqlangan javobni qaytaradi, jumladan besh yuzta xatolarni. Hujjatlar optimistik nomlangan qayta urinish yordamchingizdan ko'ra ko'proq ish qiladi. Mijoz yana bosadi. Ilovangiz bu kutilayotgan xaridni davom ettirish yoki boshqa birini boshlashmi, hal qiladi. Haqiqatan ham yangi qahva yangi kalit oladi. Har bir tarmoqni qayta urinish uchun yangi kalit himoyani bekor qiladi.
1:27 Bir xil kalit bilan turli parametrlar mos kelmaslikni keltirib chiqaradi.
So'rov o'zgarganda nima sodir bo'ladi?
1:30 Agar parametrlar validatsiyadan o'tmasa yoki o'sha kalit bilan boshqa so'rov hali ham ijro etilayotgan bo'lsa, Stripe o'sha urinish uchun idempotent natija saqlamaydi. Ushbu so'rovlarni qayta urinish mumkin. Poygalayotgan so'rov ziddiyatga uchraydi. Bular birinchi versiya qoidalari. Ikkinchi versiya boshqacha ishlaydi. Sarlavha tizimingiz bo'ylab aniq bir marta yetkazib berishni va'da qila olmaydi. Elektron pochta, inventar va ma'lumotlar bazangizning har biri xatoni boshqarishga muhtoj.
1:52 Kalit operatsiyani hujjatlashtirilgan doirasi ichida himoya qiladi. Stripe birinchi versiya kalitlarini kamida yigirma to'rt soat davomida saqlaydi va undan keyin ularni o'chirishi mumkin.
Eslab qolingan natijani qancha vaqt davomida qayta urinish xavfsiz?
1:59 O'chirilgan kalit yangi so'rovni bajarishi mumkin. Hal qilinmagan qayta urinishlarni birinchi kun ichida saqlang. Undan keyin, to'xtating va asl natijani muvofiqlashtiring. Serverga nafas olish uchun eksponensial orqaga qaytish va jitterdan foydalaning. Aks holda qayta urinishlar yonayotgan qahvaxona tashqarisida navbat hosil qiladi. Stripe kutubxonalari qayta urinishlarni boshqaradi, ammo kutubxonangizning standartlarini tekshiring. O'sha yopishqoq xato tuzoqdir.
Nima uchun eslab qolingan xato qayta-qayta paydo bo'lishi mumkin?
2:20 Ulanish tiklanganidan keyin keshga olingan besh yuzta javob qayta-qayta ijro etilaveradi. Asl operatsiya yon ta'sirlarni keltirib chiqargan bo'lishi mumkin. Uning natijasini ob'ektlar, Dashboard va veb-kancalar yordamida hal qiling. Yangi kalit harakatni takrorlashi mumkin. Agar buni eshitishdan ko'ra o'qishni afzal ko'rsangiz, diff har kuni ertalab pochta qutingizga tushadi, daily diff dot dev saytida bepul, havolasi quyida.
Men bu shartnoma bilan qayta urinish tugmasini chiqarar edimmi?
2:39 Hukm, ichidan. Jo'nat. Men cheklangan qayta urinishlar va muvofiqlashtirish bilan barqaror kalitlarni jo'natgan bo'lardim, shunda mijozlar sizning taqsimlangan tizimlar ta'limingizni moliyalashtirmasdan qahva olishadi. Va bugungi diff shu. Men Axrisidan Nikoman. Mas'uliyat bilan birlashtiring.
Manbalar
- Idempotent requestsStripe Docs
- Designing robust and predictable APIs with idempotencyStripe Engineering — Brandur Leach
- Advanced error handlingStripe Docs
- HTTP Semantics — RFC 9110 §9.2.2 Idempotent MethodsIETF / RFC Editor



