+− THE DAILY DIFFdev & AI news
SHIP IT

Stripe pamti vaš zahtjev kada odgovor nestane

Istek vremena može ostaviti naplatu nesigurnom nakon što je poslužitelj dovršio operaciju.

Istek vremena može ostaviti naplatu nesigurnom nakon što je poslužitelj dovršio operaciju. Ovo objašnjenje 'Ispod haube' koristi dokumentirani ugovor o idempotenciji Stripe API v1 za prikaz stabilnih ključeva operacija, ponavljanje spremljenog odgovora, ograničenja parametara i istodobnosti, horizont zadržavanja i usklađivanje ishoda.

Pročitajte pisano izdanje (engleski) ↗

Što ovaj video pokriva

  • Idempotencija se odnosi na željeni učinak ponavljanja operacije. Stripe API v1 dodaje dokumentirani ugovor o ponavljanju spremljenog odgovora.
  • Ponovni pokušaj iste logičke radnje koristi isti ključ i parametre. Zadržite ključ operacije kroz zasebne SDK pozive ili ponovno pokretanje aplikacije; istinski nova radnja treba svoj vlastiti ključ.
  • Nakon što započne izvršavanje krajnje točke, Stripe API v1 sprema status i tijelo prvog zahtjeva, uključujući 500 pogrešaka, i vraća taj spremljeni odgovor pri ponovnim pokušajima.
  • Promijenjeni parametri s istim ključem proizvode neusklađenost. Pogreške pri provjeri valjanosti i sukobi istovremenog izvršavanja ne spremaju idempotentni rezultat za taj pokušaj i mogu se ponoviti.
  • Stripe zadržava API v1 ključeve najmanje 24 sata i može ih naknadno obrisati. Ograničite neriješene ponovne pokušaje mreže na prvih 24 sata, zatim zaustavite i uskladite prije ponavljanja operacije.
  • Keširana 500 pogreška može se nastaviti ponavljati nakon što se povezivost oporavi. Izvorna operacija mogla je imati nuspojave; koristite relevantni objekt, zahtjev na nadzornoj ploči i web-hookove kako biste utvrdili njezin ishod.
  • API v2 koristi drugačiju semantiku ponavljanja. Ključ ne uspostavlja univerzalnu točno-jednom dostavu za e-poštu, inventar i svaku operaciju lokalne baze podataka.

Prevedeni transkript

Prevedeno iz izvornog engleskog pripovijedanja. Dostupni zvuk i titlovi kontroliraju se putem YouTubea.

Je li istek vremena otkazao vaše plaćanje?

0:00 Mislite da istek vremena znači da je vaša uplata propala. Poslužitelj može završiti dok odgovor nestaje, ostavljajući vašu naplatu da samouvjereno prikazuje apsolutno ništa. Zašto se ponovnim pokušajem može ponovno naplatiti? Kako Stripe pamti pokušaj? Kada biste trebali prestati s ponovnim pokušajima? I imajte na umu jedan neugodan detalj. Zapamćena pogreška može nadživjeti mrežni problem.

0:17 Vratit ćemo se na to. Ovo je The Daily Diff, ispod haube.

Što identificira ključ idempotencije?

0:21 Idempotencija znači da ponavljanje operacije ima isti namjeravani učinak kao da je učinjeno jednom. Ključ idempotencije označava jednu logičku radnju. Stripeova API verzija jedan prepoznaje tu oznaku pri ponovnim pokušajima i reproducira spremljeni odgovor. Zamislite kupnju kave. Stripe dovršava vaš zahtjev za plaćanje, a odgovor se gubi pri povratku kući. Kupac vidi spinner. Njihova banka može imati uzbudljiviju interpretaciju. Nezaštićeni zahtjev za stvaranje može ponoviti nuspojavu.

Kako isti ključ čini ponovni pokušaj sigurnim?

0:45 Priložite jedinstveni ključ prije prvog pokušaja i zadržite ga za ponovne pokušaje. Ako se vaša aplikacija ponovno pokrene, sačuvajte taj ključ s operacijom u svojim zapisima. Za Stripeov API verzije jedan, nakon što započne izvršavanje krajnje točke, status i tijelo prvog zahtjeva se spremaju. Pošaljite isti ključ i parametre ponovno, i Stripe vraća spremljeni odgovor. Kava ostaje na mjestu dok njezin račun ponovno putuje.

Što točno Stripe sprema?

1:07 Ovdje je Stripeov stvarni tekst. Ponovni pokušaji s istim ključem vraćaju spremljeni odgovor, uključujući pet stotina pogrešaka. Dokumentacija radi više posla od vašeg optimistično nazvanog pomoćnika za ponovne pokušaje. Kupac ponovno tapka. Vaša aplikacija odlučuje hoće li to nastaviti kupnju u tijeku ili započeti drugu novu. Istinski nova kava dobiva novi ključ. Svježi ključ za svaki ponovni mrežni pokušaj poništava zaštitu.

1:27 Različiti parametri s istim ključem pokreću neusklađenost.

Što se događa kada se zahtjev promijeni?

1:30 Ako parametri ne prođu provjeru valjanosti, ili je drugi zahtjev s tim ključem još uvijek u izvršavanju, Stripe ne sprema idempotentni rezultat za taj pokušaj. Ti zahtjevi se mogu ponovno pokušati. Utrkački zahtjev dobiva sukob. Ovo su pravila verzije jedan. Verzija dva se ponaša drugačije. Zaglavlje ne može obećati točno-jednom isporuku kroz vaš sustav. E-pošta, inventar i vaša baza podataka trebaju rukovanje pogreškama.

1:52 Ključ štiti operaciju unutar svog dokumentiranog 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 zahtjev. Zadržite neriješene ponovne pokušaje unutar prvog dana. Nakon toga, zaustavite se i uskladite izvorni ishod. Koristite eksponencijalno kašnjenje i podrhtavanje kako biste poslužitelju dali prostora za disanje. Inače se ponovni pokušaji formiraju u red ispred goruće kavane. Stripeove biblioteke rukuju ponovnim pokušajima, ali provjerite zadane postavke svoje biblioteke. Ta tvrdokorna pogreška je kvaka.

Zašto se zapamćena pogreška stalno vraća?

2:20 Keširani odgovor pet stotina nastavlja se ponavljati nakon što se povezivost oporavi. Izvorna operacija mogla je proizvesti nuspojave. Riješite njezin ishod koristeći objekte, nadzornu ploču i web-hookove. Novi ključ može ponoviti radnju. Ako biste ovo radije pročitali nego čuli, diff stiže u vašu pristiglu poštu svako jutro, besplatno na the daily diff dot dev, link ispod.

Bih li isporučio gumb za ponovni pokušaj s ovim ugovorom?

2:39 Presuda, ispod haube. SHIP IT. Iskoristio bih stabilne ključeve s ograničenim ponovnim pokušajima i usklađivanjem, tako da kupci dobiju kavu bez financiranja vaše edukacije o distribuiranom sustavu. I to je to za danas. Ja sam Niko iz Axrisija. Spojite odgovorno.

Izvori

  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

Povezani videozapisi