Stripe pamti vaš zahtev kada odgovor nestane
Istek vremena može ostaviti naplatu neizvesnom nakon što server završi operaciju.
Istek vremena može ostaviti naplatu neizvesnom nakon što server završi operaciju. Ovo objašnjenje „Ispod haube“ koristi dokumentovani ugovor o idempotenciji Stripe API v1 da bi prikazao stabilne ključeve operacija, ponavljanje sačuvanog odgovora, ograničenja parametara i konkurentnosti, horizont zadržavanja i usklađivanje ishoda.
Pročitajte pisano izdanje (engleski) ↗
Šta ovaj video pokriva
- Idempotencija se tiče nameravanog efekta ponavljanja operacije. Stripe API v1 dodaje dokumentovani ugovor o ponavljanju sačuvanog odgovora.
- Ponovni pokušaj iste logičke akcije koristi isti ključ i parametre. Sačuvajte ključ operacije kroz odvojene SDK pozive ili ponovno pokretanje aplikacije; istinski nova akcija zahteva sopstveni ključ.
- Nakon što izvršavanje krajnje tačke počne, Stripe API v1 čuva status i telo prvog zahteva, uključujući 500 grešaka, i vraća taj sačuvani odgovor pri ponovnim pokušajima.
- Promenjeni parametri sa istim ključem proizvode neusklađenost. Greške pri validaciji i sukobi konkurentnog izvršavanja ne čuvaju idempotentni rezultat za taj pokušaj i mogu se ponovo pokušati.
- Stripe zadržava API v1 ključeve najmanje 24 sata i može ih obrisati nakon toga. Ograničite nerešene mrežne ponovne pokušaje na prvih 24 sata, zatim se zaustavite i usaglasite pre ponavljanja operacije.
- Keširana 500 greška može se stalno ponavljati nakon oporavka konekcije. Originalna operacija može imati nuspojave; koristite relevantni objekat, zahtev na kontrolnoj tabli i veb-kuke da biste utvrdili njen ishod.
- API v2 koristi drugačiju semantiku ponavljanja. Ključ ne uspostavlja univerzalnu tačno-jednom isporuku za e-poštu, inventar i svaku operaciju lokalne baze podataka.
Preveden transkript
Prevedeno sa originalne engleske naracije. Dostupan audio i titlovi kontrolisani su od strane YouTube-a.
Da li je istek vremena otkazao vaše plaćanje?
0:00 Mislite da istek vremena znači da je vaše plaćanje propalo. Server može završiti dok odgovor nestaje, ostavljajući vašu kasu da pouzdano prikazuje apsolutno ništa. Zašto ponovni pokušaj može ponovo naplatiti? Kako Stripe pamti pokušaj? Kada treba da prestanete sa ponovnim pokušajima? I imajte na umu jedan nezgodan detalj. Zapamćena greška može preživeti problem sa mrežom.
0:17 Vratićemo se na to. Ovo je The Daily Diff, ispod haube.
Šta identifikuje ključ idempotencije?
0:21 Idempotencija znači da ponavljanje operacije ima isti nameravani efekat kao i izvršavanje jednom. Ključ idempotencije označava jednu logičku akciju. Stripe-ova API verzija jedan prepoznaje tu oznaku pri ponovnim pokušajima i ponavlja sačuvani odgovor. Zamislite kupovinu kafe. Stripe završava vaš zahtev za plaćanje, a odgovor se gubi pri povratku kući. Kupac vidi kružić koji se vrti. Njihova banka može imati uzbudljiviju interpretaciju. Nezaštićeni zahtev za kreiranje može ponoviti nuspojavu.
Kako isti ključ čini ponovni pokušaj sigurnim?
0:45 Priložite jedinstveni ključ pre prvog pokušaja i zadržite ga za ponovne pokušaje. Ako se vaša aplikacija ponovo pokrene, sačuvajte taj ključ sa operacijom u vašim zapisima. Za Stripe-ov API verzije jedan, kada izvršavanje krajnje tačke počne, status i telo prvog zahteva se čuvaju. Pošaljite isti ključ i parametre ponovo, i Stripe vraća sačuvani odgovor. Kafa ostaje na mestu dok njen račun ponovo putuje.
Šta tačno Stripe čuva?
1:07 Evo Stripe-ovog stvarnog teksta. Ponovni pokušaji sa istim ključem vraćaju sačuvani odgovor, uključujući greške petsto. Dokumentacija radi više posla nego vaš optimistično nazvani pomoćnik za ponovne pokušaje. Kupac ponovo tapka. Vaša aplikacija odlučuje da li se time nastavlja kupovina na čekanju ili počinje druga jedna. Za istinski novu kafu dobija se novi ključ. Svež ključ za svaki mrežni ponovni pokušaj poništava zaštitu.
1:27 Različiti parametri sa istim ključem pokreću neusklađenost.
Šta se dešava kada se zahtev promeni?
1:30 Ako parametri ne prođu validaciju, ili drugi zahtev sa tim ključem je još uvek u izvršavanju, Stripe ne čuva idempotentni rezultat za taj pokušaj. Ti zahtevi se mogu ponovo pokušati. Utrka zahteva dovodi do konflikta. Ovo su pravila verzije jedan. Verzija dva se ponaša drugačije. Zaglavlje ne može obećati isporuku tačno jednom u celom vašem sistemu. E-pošta, inventar i vaša baza podataka svaki zahtevaju rukovanje greškama.
1:52 Ključ štiti operaciju unutar njenog dokumentovanog opsega. Stripe zadržava ključeve verzije jedan najmanje dvadeset četiri sata i može ih obrisati
Koliko dugo je zapamćeni rezultat siguran za ponovni pokušaj?
1:59 nakon toga. Obrisani ključ može izvršiti novi zahtev. Nerešene ponovne pokušaje držite unutar prvog dana. Posle toga, zaustavite se i usaglasite prvobitni ishod. Koristite eksponencijalni povratak i podrhtavanje da biste serveru dali prostora za disanje. Inače ponovni pokušaji formiraju red ispred zapaljenog kafića. Stripe-ove biblioteke rukuju ponovnim pokušajima, ali proverite podrazumevane postavke vaše biblioteke. Ta tvrdokorna greška je kvaka.
Zašto se zapamćena greška može stalno vraćati?
2:20 Keširani odgovor petsto se stalno ponavlja nakon oporavka konekcije. Originalna operacija je možda proizvela nuspojave. Rešite njen ishod koristeći objekte, Kontrolnu tablu i veb-kuke. Novi ključ može ponoviti akciju. Ako biste radije ovo pročitali nego čuli kako to govorim, razlika stiže u vaš inbox svako jutro, besplatno na the daily diff dot dev, link ispod.
Da li bih isporučio dugme za ponovni pokušaj sa ovim ugovorom?
2:39 Presuda, ispod haube. SHIP IT. Ja bih isporučio stabilne ključeve sa ograničenim ponovnim pokušajima i usaglašavanjem, tako da kupci dobijaju kafu bez finansiranja vašeg obrazovanja o distribuiranim sistemima. I to je razlika za danas. Ja sam Niko iz Axrisija. Spajajte odgovorno.
Izvori
- 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



