Stripe si pamätá vašu požiadavku, keď odpoveď zmizne
Časový limit môže spôsobiť neistotu pri platbe po tom, čo server dokončil operáciu.
Časový limit môže spôsobiť neistotu pri platbe po tom, čo server dokončil operáciu. Toto vysvetlenie „Pod kapotou“ používa zdokumentovanú idempotenciu zmluvy Stripe API v1 na zobrazenie stabilných operačných kľúčov, prehrávanie uloženej odpovede, limity parametrov a súbežnosti, horizont uchovania a zosúladenie výsledkov.
Prečítajte si písanú edíciu (anglicky) ↗
Čo toto video pokrýva
- Idempotencia sa týka zamýšľaného efektu opakovania operácie. Stripe API v1 pridáva zdokumentovanú zmluvu o prehrávaní uloženej odpovede.
- Opakovaný pokus o rovnakú logickú akciu používa rovnaký kľúč a parametre. Zachovajte operačný kľúč naprieč samostatnými volaniami SDK alebo reštartmi aplikácie; skutočne nová akcia potrebuje vlastný kľúč.
- Po začatí vykonávania koncového bodu Stripe API v1 uloží stav a telo prvej požiadavky, vrátane chýb 500, a túto uloženú odpoveď vráti pri opakovaných pokusoch.
- Zmenené parametre s rovnakým kľúčom spôsobia nezhodu. Chyby overenia a konflikty súbežného vykonávania neuložia žiadny idempotentný výsledok pre tento pokus a možno ich zopakovať.
- Stripe uchováva kľúče API v1 minimálne 24 hodín a potom ich môže odstrániť. Obmedzte nevyriešené opakované pokusy v sieti na prvých 24 hodín, potom zastavte a zosúladite pred opakovaním operácie.
- Uložená chyba 500 sa môže stále prehrávať po obnovení pripojenia. Pôvodná operácia mohla mať vedľajšie účinky; na zistenie jej výsledku použite príslušný objekt, požiadavku na Dashboard a webhooks.
- API v2 používa odlišnú sémantiku prehrávania. Kľúč nezabezpečuje univerzálne doručenie presne jedenkrát pre e-mail, inventár a každú operáciu lokálnej databázy.
Preložený prepis
Preložené z pôvodného anglického rozprávania. Dostupný zvuk a titulky sú kontrolované službou YouTube.
Zrušil časový limit vašu platbu?
0:00 Myslíte si, že časový limit znamená, že vaša platba zlyhala. Server môže dokončiť prácu, zatiaľ čo odpoveď zmizne, takže váš checkout sebavedomo zobrazuje úplne nič. Prečo môže opakovaný pokus znova účtovať? Ako si Stripe pamätá pokus? Kedy by ste mali prestať opakovať? A majte na pamäti jeden nepríjemný detail. Zapamätaná chyba môže prežiť problém so sieťou.
0:17 K tomu sa vrátime. Toto je The Daily Diff, pod kapotou.
Čo identifikuje kľúč idempotencie?
0:21 Idempotencia znamená, že opakovanie operácie má rovnaký zamýšľaný efekt ako vykonanie jej raz. Kľúč idempotencie označuje jednu logickú akciu. Verzia jedna API spoločnosti Stripe rozpozná tento štítok pri opakovaných pokusoch a prehrá uloženú odpoveď. Predstavte si, že si kupujete kávu. Stripe dokončí vašu platobnú požiadavku a odpoveď sa stratí pri návrate domov. Zákazník vidí točiace sa koliesko. Ich banka môže mať vzrušujúcejšiu interpretáciu. Nechránená požiadavka na vytvorenie môže opakovať vedľajší účinok.
Ako rovnaký kľúč zabezpečuje bezpečný opakovaný pokus?
0:45 Pred prvým pokusom pripojte jedinečný kľúč a ponechajte si ho pre opakované pokusy. Ak sa vaša aplikácia reštartuje, zachovajte tento kľúč s operáciou vo svojich záznamoch. Pre API verzie jedna spoločnosti Stripe, akonáhle sa začne vykonávanie koncového bodu, stav a telo prvej požiadavky sú uložené. Pošlite rovnaký kľúč a parametre znova a Stripe vráti uloženú odpoveď. Káva zostáva na mieste, zatiaľ čo jej účtenka cestuje znova.
Čo presne Stripe ukladá?
1:07 Tu je skutočné znenie Stripe. Opakované pokusy s rovnakým kľúčom vrátia uloženú odpoveď, vrátane chýb päťsto. Dokumentácia robí viac práce ako váš optimisticky pomenovaný pomocník pre opakovanie. Zákazník znova ťukne. Vaša aplikácia rozhodne, či to obnoví čakajúci nákup alebo začne ďalší jeden. Skutočne nová káva dostane nový kľúč. Nový kľúč pre každý opakovaný pokus v sieti zruší ochranu.
1:27 Rôzne parametre s rovnakým kľúčom spustia nezhodu.
Čo sa stane, keď sa požiadavka zmení?
1:30 Ak parametre zlyhajú pri overení alebo iná požiadavka s týmto kľúčom stále prebieha, Stripe neuloží žiadny idempotentný výsledok pre tento pokus. Tieto požiadavky môžu byť zopakované. Súbežná požiadavka dostane konflikt. Toto sú pravidlá verzie jedna. Verzia dva sa správa inak. Hlavička nemôže sľubovať doručenie presne raz v celom vašom systéme. E-mail, inventár a vaša databáza potrebujú každý spracovanie chýb.
1:52 Kľúč chráni operáciu v rámci jej zdokumentovaného rozsahu. Stripe uchováva kľúče verzie jedna minimálne dvadsaťštyri hodín a potom ich môže
Ako dlho je zapamätaný výsledok bezpečný na opakovanie?
1:59 orezať. Orezaný kľúč môže vykonať novú požiadavku. Nevyriešené opakované pokusy udržujte v rámci prvého dňa. Okrem toho zastavte a zosúladite pôvodný výsledok. Použite exponenciálny backoff a jitter, aby ste serveru poskytli priestor na dýchanie. V opačnom prípade opakované pokusy vytvoria rad pred horiacou kaviarňou. Knižnice Stripe spracovávajú opakované pokusy, ale skontrolujte predvolené nastavenia vašej knižnice. Táto nepríjemná chyba je problém.
Prečo sa zapamätaná chyba môže stále vracať?
2:20 Uložená päťstovka odpoveď sa neustále prehráva po obnovení pripojenia. Pôvodná operácia mohla mať vedľajšie účinky. Vyriešte jej výsledok pomocou objektov, Dashboardu a webhooks. Nový kľúč môže akciu zopakovať. Ak si to radšej prečítate, ako by ste ma mali počuť hovoriť, diff vám príde do schránky každé ráno, zadarmo na the daily diff dot dev, odkaz nižšie.
Dodali by ste tlačidlo opakovať s touto zmluvou?
2:39 Verdikt, pod kapotou. Ship it. Odporučil by som stabilné kľúče s obmedzenými opakovanými pokusmi a zosúladením, aby zákazníci dostali kávu bez financovania vášho vzdelávania v oblasti distribuovaných systémov. A to je dnešný diff. Som Niko z Axrisi. Zlučujte zodpovedne.
Zdroje
- 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



