Stripe жауап жоғалып кеткенде сұранысыңызды есте сақтайды
Таймаут сервер операцияны аяқтағаннан кейін төлемді белгісіз қалдыруы мүмкін.
Таймаут сервер операцияны аяқтағаннан кейін төлемді белгісіз қалдыруы мүмкін. Бұл «Қалқа астында» түсіндірушісі Stripe API v1 құжатталған идемпотенттік келісімшартын пайдаланып, тұрақты операция кілттерін, сақталған жауапты қайталауды, параметрлер мен бір уақытта орындау шектеулерін, сақтау мерзімін және нәтижелерді салыстыруды көрсетеді.
Жазбаша басылымды оқыңыз (ағылшынша) ↗
Бұл бейне не туралы
- Идемпотенттік операцияны қайталаудың мақсатты әсеріне қатысты. Stripe API v1 құжатталған сақталған жауапты қайталау келісімшартын қосады.
- Бір логикалық әрекетті қайталау сол кілт пен параметрлерді пайдаланады. Операция кілтін бөлек SDK шақырулары немесе қолданбаны қайта іске қосу кезінде сақтаңыз; шынымен жаңа әрекетке өзінің кілті қажет.
- Соңғы нүктені орындау басталғаннан кейін, Stripe API v1 бірінші сұраныстың күйін және денесін, соның ішінде 500 қателерді сақтайды және қайталау кезінде сол сақталған жауапты қайтарады.
- Бірдей кілтпен өзгертілген параметрлер сәйкессіздік тудырады. Валидация қателері және бір уақытта орындау қақтығыстары сол әрекет үшін идемпотенттік нәтижені сақтамайды және қайталауға болады.
- Stripe API v1 кілттерін кемінде 24 сағат сақтайды және одан кейін оларды жоюы мүмкін. Шешілмеген желілік қайталауларды алғашқы 24 сағатпен шектеңіз, содан кейін операцияны қайталаудан бұрын тоқтатып, салыстырыңыз.
- Кэштелген 500 байланыс қалпына келгеннен кейін қайталана беруі мүмкін. Бастапқы операцияның жанама әсерлері болуы мүмкін; оның нәтижесін анықтау үшін тиісті нысанды, Басқару панелінің сұранысын және вебхуктарды пайдаланыңыз.
- API v2 басқа қайталау семантикасын пайдаланады. Кілт электрондық пошта, түгендеу және әрбір жергілікті дерекқор операциясы үшін әмбебап нақты бір рет жеткізуді орнатпайды.
Аударылған транскрипция
Бастапқы ағылшын тіліндегі баяндамадан аударылған. Қолжетімді аудио және субтитрлерді YouTube басқарады.
Таймаут төлеміңізді тоқтатты ма?
0:00 Таймаут төлеміңіз сәтсіз болды деп ойлайсыз. Сервер жауап жоғалып кеткен кезде жұмысты аяқтауы мүмкін, төлеміңізді сенімді түрде ештеңе көрсетпей қалдырады. Неліктен қайталау қайтадан ақы алуы мүмкін? Stripe әрекетті қалай есте сақтайды? Қайталауды қашан тоқтату керек? Және бір жағымсыз егжей-тегжейді есте сақтаңыз. Есте сақталған қате желі мәселесінен артық өмір сүруі мүмкін.
0:17 Оған қайта ораламыз. Бұл The Daily Diff, қалқа астында.
Идемпотенттік кілт нені анықтайды?
0:21 Идемпотенттік операцияны қайталаудың бір рет жасаумен бірдей мақсатты әсері бар екенін білдіреді. Бір рет жасау. Идемпотенттік кілт бір логикалық әрекетті белгілейді. Stripe API бірінші нұсқасы қайталау кезінде сол белгіні таниды және сақталған жауапты қайталайды. Кофе сатып алуды елестетіңіз. Stripe төлем сұранысыңызды аяқтайды, ал жауап үйге қайтып келе жатқанда жоғалып кетеді. Тұтынушы айналдыруды көреді. Олардың банкінің қызықтырақ түсіндірмесі болуы мүмкін. Қорғалмаған жасау сұранысы жанама әсерді қайталауы мүмкін.
Бірдей кілт қайталауды қалай қауіпсіз етеді?
0:45 Бірінші әрекеттен бұрын бірегей кілтті тіркеңіз және оны қайталау үшін сақтаңыз. Егер қолданбаңыз қайта іске қосылса, сол кілтті жазбаларыңыздағы операциямен сақтаңыз. Stripe бірінші нұсқасы API үшін, соңғы нүктені орындау басталғаннан кейін, бірінші сұраныстың күйі мен денесі сақталады. Бірдей кілт пен параметрлерді қайта жіберіңіз, сонда Stripe сақталған жауапты қайтарады. Кофе чегі қайта жүріп жатқанда орнында қалады.
Stripe нақты нені сақтайды?
1:07 Міне, Stripe-тің нақты сөздері. Бірдей кілтпен қайталау сақталған жауапты қайтарады, соның ішінде бес жүз қателер. Құжаттама оптимистік атаулы қайталау көмекшісінен гөрі көбірек жұмыс істейді. Тұтынушы қайтадан түртеді. Қолданбаңыз бұл күтіп тұрған сатып алуды жалғастыра ма немесе басқасын бастай ма, соны шешеді. Шынымен жаңа кофе жаңа кілт алады. Әрбір желілік қайталау үшін жаңа кілт қорғанысты бұзады.
1:27 Бірдей кілтпен әртүрлі параметрлер сәйкессіздік тудырады.
Сұраныс өзгерген кезде не болады?
1:30 Егер параметрлер валидациядан өтпесе, немесе сол кілтпен басқа сұраныс әлі орындалып жатса, Stripe сол әрекет үшін идемпотенттік нәтижені сақтамайды. Бұл сұраныстарды қайталауға болады. Жарыс сұранысы қақтығысқа тап болады. Бұл бірінші нұсқа ережелері. Екінші нұсқа әртүрлі әрекет етеді. Тақырып жүйеңізде бір рет жеткізуге уәде бере алмайды. Электрондық пошта, түгендеу және дерекқорыңыздың әрқайсысы қателерді өңдеуді қажет етеді.
1:52 Кілт операцияны құжатталған ауқымында қорғайды. Stripe бірінші нұсқа кілттерін кемінде жиырма төрт сағат сақтайды және одан кейін оларды жоюы мүмкін.
Есте сақталған нәтижені қайталау қанша уақытқа дейін қауіпсіз?
1:59 Жойылған кілт жаңа сұранысты орындай алады. Шешілмеген қайталауларды бірінші күн ішінде сақтаңыз. Одан тыс, бастапқы нәтижені тоқтатып, салыстырыңыз. Серверге дем алуға мүмкіндік беру үшін экспоненциалды артқа қайтаруды және дірілді пайдаланыңыз. Әйтпесе қайталаулар жанатын кофехананың сыртында кезекке тұрады. Stripe кітапханалары қайталауларды өңдейді, бірақ кітапханаңыздың әдепкі параметрлерін тексеріңіз. Сол жабысқақ қате - бұл қулық.
Неліктен есте сақталған қате қайта-қайта қайталана беруі мүмкін?
2:20 Кэштелген бес жүз жауап байланыс қалпына келгеннен кейін қайталана береді. Бастапқы операция жанама әсерлер тудыруы мүмкін. Нысандарды, Басқару панелін және вебхуктарды пайдаланып оның нәтижесін шешіңіз. Жаңа кілт әрекетті қайталауы мүмкін. Егер мұны естігеннен гөрі оқығанды жөн көрсеңіз, диф сіздің пошта жәшігіңізге күн сайын таңертең тегін the daily diff dot dev сайтында түседі, сілтеме төменде. тегін the daily diff dot dev сайтында түседі, сілтеме төменде.
Мен осы келісімшартпен қайталау түймесін жіберер ме едім?
2:39 Үкім, қалқа астында. Жіберіңіз. Мен тұрақты кілттерді шектеулі қайталаулармен және салыстырумен жіберер едім, сондықтан тұтынушылар таратылған жүйелерді оқытуды қаржыландырмай кофе алады. Және бұл бүгінгі айырмашылық. Мен Axrisi-ден Нико. Жауапкершілікпен біріктіріңіз.
Дереккөздер
- 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



