Stripe si zapomni vašo zahtevo, ko odgovor izgine
Časovna omejitev lahko pusti nakupovanje negotovo, ko je strežnik operacijo dokončal.
Časovna omejitev lahko pusti nakupovanje negotovo, ko je strežnik operacijo dokončal. Ta razlaga "Pod pokrovom" uporablja dokumentirano pogodbo o idempotentnosti Stripe API v1, da pokaže stabilne operacijske ključe, ponovno predvajanje shranjenega odgovora, omejitve parametrov in sočasnosti, obzorje hrambe in uskladitev rezultatov.
Preberi pisno izdajo (angleščina) ↗
Kaj zajema ta videoposnetek
- Idempotentnost se nanaša na predvideni učinek ponavljanja operacije. Stripe API v1 dodaja dokumentirano pogodbo o ponovnem predvajanju shranjenega odgovora.
- Ponovni poskus iste logične akcije uporablja isti ključ in parametre. Ključ operacije ohranite pri ločenih klicih SDK ali ponovnih zagonih aplikacije; resnično novo dejanje potrebuje svoj ključ.
- Ko se izvedba končne točke začne, Stripe API v1 shrani status in telo prve zahteve, vključno z napakami 500, in ta shranjen odgovor vrne pri ponovnih poskusih.
- Spremenjeni parametri z istim ključem povzročijo neujemanjes. Napake pri preverjanju veljavnosti in konflikti sočasne izvedbe ne shranijo idempotentnega rezultata za ta poskus in jih je mogoče ponovno poskusiti.
- Stripe hrani ključe API v1 vsaj 24 ur in jih lahko nato izbriše. Neodpravljene ponovne poskuse omrežja omejite na prvih 24 ur, nato se ustavite in uskladite, preden ponovite operacijo.
- Predpomnjena napaka 500 se lahko ponovno predvaja, ko se povezljivost ponovno vzpostavi. Prvotna operacija ima lahko stranske učinke; uporabite ustrezen objekt, zahtevo nadzorne plošče in spletne kljuke, da ugotovite njen rezultat.
- API v2 uporablja drugačno semantiko ponovnega predvajanja. Ključ ne vzpostavlja univerzalne dostave "točno enkrat" za e-pošto, inventar in vsako operacijo lokalne baze podatkov.
Preveden prepis
Prevedeno iz izvirnega angleškega pripovedovanja. Razpoložljivi zvok in podnapisi so nadzorovani s strani YouTuba.
Ali je časovna omejitev preklicala vaše plačilo?
0:00 Mislite, da časovna omejitev pomeni, da vaše plačilo ni uspelo. Strežnik lahko konča, medtem ko odgovor izgine, kar pusti vašo blagajno samozavestno prikazovati popolnoma nič. Zakaj lahko ponovni poskus ponovno bremeni? Kako si Stripe zapomni poskus? Kdaj bi morali prenehati s ponovnimi poskusi? In imejte v mislih eno neprijetno podrobnost. Zapomnjena napaka lahko preživi omrežno težavo.
0:17 K temu se bomo vrnili. To je The Daily Diff, pod pokrovom.
Kaj identificira ključ idempotentnosti?
0:21 Idempotentnost pomeni, da ima ponavljanje operacije enak predvideni učinek kot izvedba enkrat. Ključ idempotentnosti označuje eno logično dejanje. Stripe API različice ena prepozna to oznako pri ponovnih poskusih in ponovno predvaja shranjeni odgovor. Predstavljajte si nakup kave. Stripe dokonča vašo plačilno zahtevo, in odgovor se izgubi pri vračanju domov. Stranka vidi vrteči se krog. Njihova banka ima morda bolj vznemirljivo razlago. Nezaščitena zahteva za ustvarjanje lahko ponovi stranski učinek.
Kako isti ključ zagotavlja varen ponovni poskus?
0:45 Pred prvim poskusom priložite edinstven ključ in ga shranite za ponovne poskuse. Če se vaša aplikacija znova zažene, ohranite ta ključ z operacijo v svojih zapisih. Za Stripe API različice ena, ko se izvedba končne točke začne, se shrani status in telo prve zahteve. Ponovno pošljite isti ključ in parametre, in Stripe vrne shranjeni odgovor. Kava ostane na mestu, medtem ko potrdilo spet potuje.
Kaj točno Stripe shrani?
1:07 Tukaj je dejansko besedilo podjetja Stripe. Ponovni poskusi z istim ključem vrnejo shranjeni odgovor, vključno z napakami petsto. Dokumentacija opravi več dela kot vaš optimistično poimenovani pomočnik za ponovne poskuse. Stranka znova tapne. Vaša aplikacija se odloči, ali to nadaljuje čakajoči nakup ali začne drugega. Resnično nova kava dobi nov ključ. Svež ključ za vsak ponovni poskus omrežja premaga zaščito.
1:27 Različni parametri z istim ključem sprožijo neujemanjes.
Kaj se zgodi, ko se zahteva spremeni?
1:30 Če parametri ne uspejo pri validaciji, ali pa druga zahteva s tem ključem še vedno se izvaja, Stripe ne shrani idempotentnega rezultata za ta poskus. Te zahteve je mogoče ponovno poskusiti. Tekmujoča zahteva dobi konflikt. To so pravila različice ena. Različica dve se obnaša drugače. Glava ne more obljubiti dostave "točno enkrat" po vašem sistemu. E-pošta, inventar in vaša baza podatkov potrebujejo obravnavanje napak.
1:52 Ključ ščiti operacijo v dokumentiranem obsegu. Stripe hrani ključe različice ena vsaj štiriindvajset ur in jih lahko izbriše
Kako dolgo je zapomnjen rezultat varen za ponovni poskus?
1:59 po tem. Izbrisan ključ lahko izvede novo zahtevo. Neodpravljene ponovne poskuse hranite znotraj prvega dne. Po tem se ustavite in uskladite prvotni rezultat. Uporabite eksponentni umik in "jitter", da strežniku daste prostor za dihanje. Sicer se ponovni poskusi oblikujejo v čakalno vrsto pred gorečo kavarno. Stripe knjižnice obravnavajo ponovne poskuse, vendar preverite privzete nastavitve vaše knjižnice. Ta nadležna napaka je ulov.
Zakaj se lahko zapomnljiva napaka vedno znova pojavlja?
2:20 Predpomnjen odgovor petsto se ponovno predvaja, ko se povezljivost ponovno vzpostavi. Prvotna operacija je morda povzročila stranske učinke. Rešite njen rezultat z uporabo objektov, nadzorne plošče in spletnih kljuk. Nov ključ lahko ponovi dejanje. Če bi raje to prebrali, kot pa slišali, kako to govorim, diff pristane v vašem nabiralniku vsako jutro, brezplačno na the daily diff dot dev, povezava spodaj.
Ali bi poslal gumb za ponovni poskus s to pogodbo?
2:39 Sodba, pod pokrovom. SHIP IT. Poslal bi stabilne ključe z omejenimi ponovnimi poskusi in uskladitvijo, tako da stranke dobijo kavo, ne da bi financirale vaše izobraževanje o porazdeljenih sistemih. In to je diff za danes. Sem Niko iz Axrisija. Združite odgovorno.
Viri
- 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



