+− THE DAILY DIFFdev & AI news
SHIP IT

Stripe man eftir beiðni þinni þegar svarið hverfur

Tímamörk geta skilið úttekt eftir í óvissu eftir að netþjónninn hefur lokið aðgerðinni.

Tímamörk geta skilið úttekt eftir í óvissu eftir að netþjónninn hefur lokið aðgerðinni. Þessi „Under the Hood“ útskýring notar skjalfestan samning um samsemd Stripe API v1 til að sýna stöðuga aðgerðarlykla, endurspilun vistaðra svara, takmarkanir á færibreytingum og samhliða keyrslu, varðveislusjónarhorn og samræmingu niðurstaðna.

Lestu skriflegu útgáfuna (enska) ↗

Það sem þetta myndband fjallar um

  • Samsemd snýr að fyrirhuguðum áhrifum þess að endurtaka aðgerð. Stripe API v1 bætir við skjalfestum samningi um endurspilun vistaðra svara.
  • Endurtekning á sömu rökréttu aðgerðinni notar sama lykil og færibreytur. Varðveittu aðgerðalykilinn yfir aðskildar SDK-símtöl eða endurræsingar forrita; sannarlega ný aðgerð þarf sinn eigin lykil.
  • Eftir að keyrsla endapunkts hefst, vistar Stripe API v1 stöðu og meginmál fyrstu beiðninnar, þar á meðal 500 villur, og skilar því vistaða svari við endurtekningar.
  • Breyttar færibreytur með sama lykli valda ósamræmi. Villa við staðfestingu og samhliða keyrsluátök vista ekki samsvarandi niðurstöðu fyrir þá tilraun og er hægt að reyna aftur.
  • Stripe geymir API v1 lykla í að minnsta kosti 24 klukkustundir og getur hreinsað þá eftir það. Takmarkaðu óleystar endurtekningar netkerfisins við fyrstu 24 klukkustundirnar, stöðvaðu síðan og samræmdu áður en aðgerðin er endurtekin.
  • Skyndiminni 500 villa getur haldið áfram að endurspilast eftir að tenging kemur aftur. Upprunalega aðgerðin gæti haft aukaverkanir; notaðu viðeigandi hlut, Dashboard beiðni og vefkróka til að staðfesta niðurstöðu hennar.
  • API v2 notar annan endurspilunarskilning. Lykill stofnar ekki alhliða, nákvæmlega einu sinni afhendingu fyrir tölvupóst, birgðahald og allar staðbundnar gagnagrunnsaðgerðir.

Þýtt afrit

Þýtt úr upprunalegri enskri frásögn. Tiltækt hljóð og textar eru stjórnaðir af YouTube.

Hætti tímamörk við greiðslu þinni?

0:00 Þú heldur að tímamörk þýði að greiðslan þín hafi mistekist. Netþjónninn getur lokið á meðan svarið hverfur, og skilur úttektina eftir sjálfstraust að sýna nákvæmlega ekki neitt. Hvers vegna getur endurtekning rukkað aftur? Hvernig man Stripe eftir tilraun? Hvenær ættir þú að hætta að reyna aftur? Og hafðu eitt óþægilegt smáatriði í huga. Minnt villa getur lifað af netvandamálið.

0:17 Við snúum aftur að því. Þetta er The Daily Diff, baksviðs.

Hvað auðkennir samsemdarlykill?

0:21 Samsemd þýðir að endurtekning á aðgerð hefur sömu fyrirhuguðu áhrif og að gera það einu sinni. Samsemdarlykill merkir eina rökrétta aðgerð. API útgáfa eitt frá Stripe þekkir það merki við endurtekningar og endurspilar vistað svar. Ímyndaðu þér að kaupa kaffi. Stripe lýkur greiðslubeiðni þinni, og svarið týnist á leiðinni heim. Viðskiptavinurinn sér snúning. Bankinn þeirra gæti haft meira spennandi túlkun. Óvarin stofnunarbeiðni getur endurtekið aukaverkunina.

Hvernig gerir sami lykill endurtekningu örugga?

0:45 Hengdu einstakan lykil áður en fyrsta tilraunin er gerð og hafðu hann fyrir endurtekningar. Ef forritið þitt endurræsir, varðveittu þennan lykil með aðgerðinni í skrám þínum. Fyrir Stripe API útgáfu eitt, þegar keyrsla endapunkts hefst, er staða og meginmál fyrstu beiðninnar vistað. Sendu sama lykil og færibreytur aftur, og Stripe skilar vistuðu svari. Kaffið helst á sínum stað á meðan kvittunin ferðast aftur.

Hvað nákvæmlega vistar Stripe?

1:07 Hér er nákvæmur orðaleikur Stripe. Endurtekningar með sama lykli skila vistuðu svarinu, þar á meðal fimm hundruð villur. Skjölunin vinnur meira en þinn bjartsýni endurtekningarhjálpar. Viðskiptavinurinn pikkar aftur. Forritið þitt ákveður hvort það heldur áfram með biðkaupið eða byrjar annað eitt. Sannarlega nýtt kaffi fær nýjan lykil. Nýr lykill fyrir hverja netendurtekningu vinnur gegn verndinni.

1:27 Mismunandi færibreytur með sama lykli valda ósamræmi.

Hvað gerist þegar beiðnin breytist?

1:30 Ef færibreytur standast ekki staðfestingu, eða önnur beiðni með þeim lykli er enn í keyrslu, vistar Stripe enga samsemdar niðurstöðu fyrir þá tilraun. Hægt er að reyna þessar beiðnir aftur. Hraðari beiðni fær árekstur. Þetta eru reglur útgáfu eitt. Útgáfa tvö hegðar sér öðruvísi. Fyrirsögn getur ekki lofað nákvæmlega einu sinni afhendingu yfir kerfið þitt. Tölvupóstur, birgðahald og gagnagrunnurinn þinn þurfa hvert um sig að takast á við bilanir.

1:52 Lykillinn verndar aðgerðina innan skjalfestrars umfangs hennar. Stripe geymir útgáfu eitt lykla í að minnsta kosti tuttugu og fjórar klukkustundir og getur hreinsað

Hversu lengi er minnisstæð niðurstaða örugg til að reyna aftur?

1:59 þá eftir það. Hreinsaður lykill getur keyrt nýja beiðni. Hafðu óleystar endurtekningar innan fyrsta dags. Fyrir utan það, stöðvaðu og samræmdu upprunalegu niðurstöðuna. Notaðu veldisvísis bakfærslu og skjálfta til að gefa netþjóninum svigrúm. Annars mynda endurtekningar biðröð fyrir utan brennandi kaffihús. Stripe bókasöfn sjá um endurtekningar, en athugaðu sjálfgefna stillingar bókasafnsins þíns. Þessi þrjóska villa er gallinn.

Hvers vegna getur minnisstæð villa haldið áfram að koma aftur?

2:20 Skyndiminni fimm hundrað svar heldur áfram að endurspilast eftir að tenging kemur aftur. Upprunalega aðgerðin gæti hafa framleitt aukaverkanir. Leysið niðurstöðu hennar með því að nota hluti, Dashboard og vefkróka. Nýr lykill getur endurtekið aðgerðina. Ef þú vilt frekar lesa þetta en heyra mig segja það, kemur mismunurinn í pósthólfið þitt á hverjum morgni, ókeypis á the daily diff dot dev, hlekkur hér að neðan.

Myndi ég senda endurtekningarhnapp með þessum samningi?

2:39 Dómur, baksviðs. SKIP IT. Ég myndi senda stöðuga lykla með bundnum endurtekningum og sáttum, svo viðskiptavinir fái kaffi án þess að fjármagna menntun þína í dreifðum kerfum. Og það er mismunurinn í dag. Ég er Niko frá Axrisi. Sameina ábyrgt.

Heimildir

  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

Tengd myndbönd