+− THE DAILY DIFFdev & AI news
SHIP IT

Stripe mäletab teie päringut, kui vastus kaob

Ajaline piirang võib jätta makse teostamise ebakindlaks, isegi kui server on toimingu lõpetanud.

Ajaline piirang võib jätta makse teostamise ebakindlaks, isegi kui server on toimingu lõpetanud. See "Under the Hood" selgitus kasutab Stripe API v1 dokumenteeritud idempotentsuslepingut, et näidata stabiilseid toimingute võtmeid, salvestatud vastuse taasesitust, parameetrite ja samaaegsuse piiranguid, säilitushorisonti ja tulemuste ühildamist.

Loe kirjalikku väljaannet (inglise keeles) ↗

Mida see video hõlmab

  • Idempotentsus puudutab toimingu kordamise kavandatud mõju. Stripe API v1 lisab dokumenteeritud salvestatud vastuse taasesituse lepingu.
  • Sama loogilise toimingu korduskatsel kasutatakse sama võtit ja parameetreid. Toimingu võti säilitatakse eraldi SDK kõnede või rakenduse taaskäivitamiste korral; tõeliselt uus toiming vajab oma võtit.
  • Pärast lõpp-punkti käivitamise algust salvestab Stripe API v1 esimese päringu oleku ja sisu, sealhulgas 500 vead, ja tagastab selle salvestatud vastuse korduskatsetel.
  • Muudetud parameetrid sama võtmega tekitavad mittevastavuse. Valideerimisvead ja samaaegsed täitmisega seotud konfliktid ei salvesta selle katse jaoks idempotentseid tulemusi ja neid saab uuesti proovida.
  • Stripe säilitab API v1 võtmeid vähemalt 24 tundi ja võib need pärast seda eemaldada. Piirake lahendamata võrgu korduskatseid esimese 24 tunniga, seejärel lõpetage ja ühildage enne toimingu kordamist.
  • Vahemällu salvestatud 500 viga võib pärast ühenduse taastumist jätkuvalt taasesitada. Algsel toimingul võivad olla kõrvalmõjud; kasutage selle tulemuse kindlakstegemiseks asjakohast objekti, armatuurlaua päringut ja veebilõime.
  • API v2 kasutab erinevat taasesituse semantikat. Võti ei taga universaalset täpselt üks kord edastamist e-posti, inventari ja iga kohaliku andmebaasi toimingu jaoks.

Tõlgitud transkriptsioon

Tõlgitud ingliskeelsest originaaljutustusest. Saadaolevat heli ja subtiitreid kontrollib YouTube.

Kas ajalõpp tühistas teie makse?

0:00 Arvate, et ajalõpp tähendab teie makse ebaõnnestumist. Server võib lõpetada töö, samal ajal kui vastus kaob, jättes teie ostukorvi enesekindlalt kuvama mitte midagi. Miks saab korduskatse uuesti tasu võtta? Kuidas Stripe katset mäletab? Millal peaksite korduskatsetest loobuma? Ja pidage meeles üht ebameeldivat detaili. Mäletatud viga võib võrguprobleemist kauem püsida.

0:17 Selle juurde tuleme tagasi. See on The Daily Diff, kulisside taga.

Mida identifitseerib idempotentsuse võti?

0:21 Idempotentsus tähendab, et toimingu kordamisel on sama kavandatud mõju kui selle üks kord tegemisel. Idempotentsuse võti märgistab ühe loogilise toimingu. Stripe'i API versioon üks tunneb selle märgise korduskatsetel ära ja esitab uuesti salvestatud vastuse. Kujutage ette kohvi ostmist. Stripe lõpetab teie maksepäringu ja vastus kaob tagasiteel koju. Klient näeb keerlevat ikooni. Nende pangal võib olla põnevam tõlgendus. Kaitseta loomise päring võib kõrvalmõju korrata.

Kuidas sama võti muudab korduskatse ohutuks?

0:45 Lisage enne esimest katset unikaalne võti ja säilitage see korduskatseteks. Kui teie rakendus taaskäivitub, säilitage see võti koos toiminguga oma andmetes. Stripe'i versiooni üks API puhul, kui lõpp-punkti täitmine algab, salvestatakse esimese päringu olek ja sisu. Saates uuesti sama võtme ja parameetrid, tagastab Stripe salvestatud vastuse. Kohv jääb oma kohale, samal ajal kui selle kviitung uuesti liigub.

Mida Stripe täpselt salvestab?

1:07 Siin on Stripe'i tegelik sõnastus. Korduskatsed sama võtmega tagastavad salvestatud vastuse, sealhulgas viiesaja vead. Dokumentatsioon teeb rohkem tööd kui teie optimistlikult nimetatud korduskatse abimees. Klient puudutab uuesti. Teie rakendus otsustab, kas see jätkab pooleliolevat ostu või alustab uut. Tõeliselt uus kohv saab uue võtme. Iga võrgu korduskatse jaoks uus võti tühistab kaitse.

1:27 Erinevad parameetrid sama võtmega käivitavad mittevastavuse.

Mis juhtub, kui päring muutub?

1:30 Kui parameetrid ei läbi valideerimist või mõni teine selle võtmega päring on veel täitmisel, ei salvesta Stripe selle katse jaoks idempotentseid tulemusi. Neid päringuid saab uuesti proovida. Võistlev päring saab konflikti. Need on versiooni üks reeglid. Versioon kaks käitub teisiti. Päis ei saa lubada täpselt ühekordset edastamist kogu teie süsteemis. E-post, inventar ja teie andmebaas vajavad kõik veakäsitlust.

1:52 Võti kaitseb toimingut oma dokumenteeritud ulatuses. Stripe säilitab versiooni üks võtmeid vähemalt kahekümne nelja tunni jooksul ja võib neid

Kui kaua on mäletatud tulemust ohutu uuesti proovida?

1:59 pärast seda eemaldada. Kärbitud võti saab uue päringu käivitada. Hoidke lahendamata korduskatsed esimese päeva jooksul. Pärast seda lõpetage ja ühildage algne tulemus. Kasutage eksponentsiaalset tagasivõtmist ja kõikumist, et anda serverile hingamisruumi. Muidu moodustavad korduskatsed järjekorra põleva kohviku taha. Stripe'i teegid käsitlevad korduskatseid, kuid kontrollige oma teegi vaikesätteid. See kangekaelne viga on konks.

Miks võib mäletatud viga pidevalt tagasi tulla?

2:20 Vahemällu salvestatud viiesaja vastus jätkab taasesitust pärast ühenduse taastumist. Algsel toimingul võisid olla kõrvalmõjud. Lahendage selle tulemus objektide, armatuurlaua ja veebilõimede abil. Uus võti saab toimingut korrata. Kui eelistate seda lugeda, mitte kuulda minu suust, siis erinevus jõuab teie postkasti igal hommikul, tasuta saidil the daily diff dot dev, link allpool.

Kas ma tarniksin selle lepinguga uuesti proovimise nupu?

2:39 Otsus, kulisside taga. SHIP IT. Ma saadaksin stabiilsed võtmed piiratud korduskatsete ja ühildamisega, et kliendid saaksid kohvi ilma teie hajutatud süsteemide haridust rahastamata. Ja see on tänane erinevus. Olen Niko Axrisist. Ühenda vastutustundlikult.

Allikad

  1. Idempotent requestsStripe Docs
  2. Designing robust and predictable APIs with idempotencyStripe Engineering — Brandur Leach
  3. Advanced error handlingStripe Docs
  4. HTTP Semantics — RFC 9110 §9.2.2 Idempotent MethodsIETF / RFC Editor

Seotud videod