Stripe ги памети вашите барања кога одговорот ќе исчезне
Истекот на времето може да остави наплатата неизвесна откако серверот ќе ја заврши операцијата.
Истекот на времето може да остави наплатата неизвесна откако серверот ќе ја заврши операцијата. Овој Under the Hood објаснувач го користи документираниот договор за идемпотенција на 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 Прикачете уникатен клуч пред првиот обид и задржете го за повторни обиди. Ако вашата апликација се рестартира, зачувајте го тој клуч со операцијата во вашите записи. За API верзијата еден на Stripe, откако ќе започне извршувањето на крајната точка, статусот и телото на првото барање се зачувуваат. Испратете го истиот клуч и параметри повторно, и 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 Пресуда, под хауба. Испрати го. Би испратил стабилни клучеви со ограничени повторни обиди и помирување, така што клиентите ќе добијат кафе без да го финансираат вашето образование за дистрибуирани системи. И тоа е диfот за денес. Јас сум Нико од 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



