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, линк испод.
Да ли бих испоручио дугме за поновни покушај са овим уговором?
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



