+− THE DAILY DIFFdev & AI news
SHIP IT

Stripe atceras jūsu pieprasījumu, kad atbilde pazūd

Taimauts var atstāt norēķinu neskaidru pēc tam, kad serveris ir pabeidzis operāciju.

Taimauts var atstāt norēķinu neskaidru pēc tam, kad serveris ir pabeidzis operāciju. Šis Under the Hood skaidrojums izmanto Stripe API v1 dokumentēto idempotences līgumu, lai parādītu stabilas operācijas atslēgas, saglabātu atbildes atkārtošanu, parametru un vienlaicīguma ierobežojumus, saglabāšanas horizontu un rezultātu saskaņošanu.

Lasiet rakstisko izdevumu (angļu valodā) ↗

Ko aptver šis video

  • Idempotence attiecas uz paredzēto efektu, atkārtojot operāciju. Stripe API v1 pievieno dokumentētu saglabātas atbildes atkārtošanas līgumu.
  • Atkārtota tās pašas loģiskās darbības mēģinājums izmanto to pašu atslēgu un parametrus. Saglabājiet operācijas atslēgu starp atsevišķiem SDK zvaniem vai lietojumprogrammu restartēšanas reizēm; patiesi jaunai darbībai nepieciešama sava atslēga.
  • Pēc galapunkta izpildes sākuma Stripe API v1 saglabā pirmā pieprasījuma statusu un pamattekstu, ieskaitot 500 kļūdas, un atgriež šo saglabāto atbildi atkārtotu mēģinājumu gadījumā.
  • Mainīti parametri ar to pašu atslēgu rada neatbilstību. Validācijas kļūmes un vienlaicīgas izpildes konflikti nesaglabā idempotentu rezultātu šim mēģinājumam un var tikt atkārtoti mēģināti.
  • Stripe saglabā API v1 atslēgas vismaz 24 stundas un pēc tam var tās dzēst. Ierobežojiet neatrisinātus tīkla atkārtotus mēģinājumus līdz pirmajām 24 stundām, pēc tam apstājieties un saskaņojiet pirms operācijas atkārtošanas.
  • Kešatmiņā saglabāta 500 kļūda var turpināt atkārtoties pēc savienojuma atjaunošanas. Sākotnējai operācijai var būt blakusparādības; izmantojiet attiecīgo objektu, vadības paneļa pieprasījumu un tīmekļa āķus, lai noteiktu tās rezultātu.
  • API v2 izmanto atšķirīgu atkārtošanas semantiku. Atslēga nenodrošina universālu "tieši vienreizēju" piegādi e-pastam, inventāram un katrai vietējai datu bāzes operācijai.

Tulkotais transkripts

Tulkojums no oriģinālā angļu stāstījuma. Pieejamais audio un subtitri tiek kontrolēti no YouTube.

Vai taimauts atcēla jūsu maksājumu?

0:00 Jūs domājat, ka taimauts nozīmē, ka jūsu maksājums neizdevās. Serveris var pabeigt darbu, kamēr atbilde pazūd, atstājot jūsu norēķinu pārliecinoši rādot pilnīgi neko. Kāpēc atkārtots mēģinājums var iekasēt maksu vēlreiz? Kā Stripe atceras mēģinājumu? Kad jums vajadzētu pārtraukt atkārtotus mēģinājumus? Un paturiet prātā vienu nepatīkamu detaļu. Atcerēta kļūda var pārdzīvot tīkla problēmu.

0:17 Mēs pie tā atgriezīsimies. Šis ir The Daily Diff, "zem pārsega".

Ko identificē idempotences atslēga?

0:21 Idempotence nozīmē, ka operācijas atkārtošanai ir tāds pats paredzētais efekts kā veikšanai tā vienreiz. Idempotences atslēga apzīmē vienu loģisku darbību. Stripe API pirmā versija atpazīst šo apzīmējumu atkārtotiem mēģinājumiem un atkārto saglabātu atbildi. Iedomājieties kafijas pirkšanu. Stripe pabeidz jūsu maksājuma pieprasījumu, un atbilde tiek zaudēta atgriežoties mājās. Klients redz griezēju. Viņu bankai var būt aizraujošāka interpretācija. Neaizsargāts izveides pieprasījums var atkārtot blakusparādību.

Kā tā pati atslēga padara atkārtotu mēģinājumu drošu?

0:45 Pievienojiet unikālu atslēgu pirms pirmā mēģinājuma un saglabājiet to atkārtotiem mēģinājumiem. Ja jūsu lietojumprogramma restartējas, saglabājiet šo atslēgu ar operāciju jūsu ierakstos. Stripe pirmās versijas API, tiklīdz galapunkta izpilde sākas, tiek saglabāts pirmā pieprasījuma statuss un pamatteksts. Nosūtiet to pašu atslēgu un parametrus vēlreiz, un Stripe atgriež saglabāto atbildi. Kafija paliek vietā, kamēr tās kvīts ceļo atkal.

Ko tieši Stripe saglabā?

1:07 Šeit ir Stripe faktiskais formulējums. Atkārtoti mēģinājumi ar to pašu atslēgu atgriež saglabāto atbildi, ieskaitot piecsimt kļūdas. Dokumentācija veic vairāk darba nekā jūsu optimistiski nosauktais atkārtotas palīdzības rīks. Klients pieskaras vēlreiz. Jūsu lietotne izlemj, vai tas atsāk gaidošo pirkumu vai sāk citu vienu. Patiesi jauna kafija saņem jaunu atslēgu. Svaiga atslēga katram tīkla atkārtojumam izjauc aizsardzību.

1:27 Dažādi parametri ar to pašu atslēgu izraisa neatbilstību.

Kas notiek, ja pieprasījums mainās?

1:30 Ja parametri neiztur validāciju, vai cits pieprasījums ar šo atslēgu joprojām tiek izpildīts, Stripe nesaglabā idempotentu rezultātu šim mēģinājumam. Šos pieprasījumus var atkārtoti mēģināt. Steidzīgs pieprasījums saņem konfliktu. Šie ir pirmās versijas noteikumi. Otrā versija uzvedas atšķirīgi. Galvene nevar solīt tieši vienreizēju piegādi visā jūsu sistēmā. E-pasts, inventārs un jūsu datu bāze katrs prasa kļūdu apstrādi.

1:52 Atslēga aizsargā operāciju tās dokumentētajā darbības jomā. Stripe saglabā pirmās versijas atslēgas vismaz divdesmit četras stundas un pēc tam var tās dzēst.

Cik ilgi atcerētais rezultāts ir drošs atkārtotai mēģināšanai?

1:59 Dzēsta atslēga var izpildīt jaunu pieprasījumu. Neatrisinātos atkārtotos mēģinājumus veiciet pirmajā dienā. Pēc tam apstājieties un saskaņojiet sākotnējo rezultātu. Izmantojiet eksponenciālu atpalicību un svārstības, lai dotu serverim elpošanas telpu. Citādi atkārtoti mēģinājumi veido rindu ārpus degošas kafijas veikala. Stripe bibliotēkas apstrādā atkārtotus mēģinājumus, taču pārbaudiet savas bibliotēkas noklusējuma iestatījumus. Šī lipīgā kļūda ir āķis.

Kāpēc atcerēta kļūda var turpināt atkārtoties?

2:20 Kešatmiņā saglabāta piecsimt atbilde turpina atkārtoties pēc savienojuma atjaunošanas. Sākotnējā operācija var būt radījusi blakusparādības. Atrisiniet tās rezultātu, izmantojot objektus, vadības paneli un tīmekļa āķus. Jauna atslēga var atkārtot darbību. Ja jūs vēlaties to lasīt, nevis dzirdēt, kā es to saku, "diff" nonāk jūsu iesūtnē katru rītu, bez maksas vietnē "thedailydiff.dev", saite zemāk.

Vai es piegādātu atkārtošanas pogu ar šo līgumu?

2:39 Spriedums, "zem pārsega". SHIP IT. Es sūtītu stabilas atslēgas ar ierobežotiem atkārtotiem mēģinājumiem un saskaņošanu, lai klienti saņemtu kafiju, nefinansējot jūsu izglītību sadalītās sistēmās. Un tas ir šodienas "diff". Esmu Niko no Axrisi. Apvienojiet atbildīgi.

Avoti

  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

Saistītie video