+− THE DAILY DIFFdev & AI news
SHIP IT

Stripe onthou jou versoek wanneer die antwoord verdwyn

'n Uitteltyd kan 'n afhandeling onseker laat nadat die bediener die operasie voltooi het.

'n Uitteltyd kan 'n afhandeling onseker laat nadat die bediener die operasie voltooi het. Hierdie 'Under the Hood'-verduideliker gebruik Stripe API v1 se gedokumenteerde idempotensie-kontrak om stabiele bewerkingsleutels, gestoorde-antwoord-herhaling, parameter- en gelyktydigheidslimiete, die retensiehorison en uitkomsversoening te wys.

Lees die geskrewe uitgawe (Engels) ↗

Wat hierdie video dek

  • Idempotensie gaan oor die beoogde effek van die herhaling van 'n operasie. Stripe API v1 voeg 'n gedokumenteerde gestoorde-antwoord-herhalingskontrak by.
  • 'n Herprobeer van dieselfde logiese aksie gebruik dieselfde sleutel en parameters. Behou die operasiesleutel oor afsonderlike SDK-oproepe of toepassing-herbegin; 'n werklik nuwe aksie benodig sy eie sleutel.
  • Nadat die eindpuntuitvoering begin, stoor Stripe API v1 die eerste versoek se status en liggaam, insluitend 500-foute, en gee daardie gestoorde antwoord terug by herproberings.
  • Veranderde parameters met dieselfde sleutel produseer 'n wanpassing. Validasiemislukkings en gelyktydige uitvoeringskonflikte stoor geen idempotente resultaat vir daardie poging nie en kan weer probeer word.
  • Stripe behou API v1-sleutels vir ten minste 24 uur en kan dit daarna snoei. Beperk onopgeloste netwerkherproberings tot die eerste 24 uur, stop dan en versoen voordat die operasie herhaal word.
  • 'n Gekasjeerde 500 kan aanhou herhaal nadat konnektiwiteit herstel het. Die oorspronklike operasie kan newe-effekte hê; gebruik die relevante objek, Dashboard-versoek en webhooks om die uitkoms daarvan vas te stel.
  • API v2 gebruik verskillende herhalingssemantiek. 'n Sleutel vestig nie universele presies-eenmalige aflewering vir e-pos, voorraad en elke plaaslike databasisoperasie nie.

Vertaalde transkripsie

Vertaal uit die oorspronklike Engelse vertelling. Beskikbare klank en onderskrifte word deur YouTube beheer.

Het 'n uitteltyd jou betaling gekanselleer?

0:00 Jy dink 'n uitteltyd beteken jou betaling het misluk. Die bediener kan klaar wees terwyl die antwoord verdwyn, wat jou afhandeling vol vertroue absoluut niks laat vertoon nie. Hoekom kan 'n herprobeer weer hef? Hoe onthou Stripe 'n poging? Wanneer moet jy ophou herprobeer? En hou een nare detail in gedagte. 'n Onthoude fout kan die netwerkprobleem oorleef.

0:17 Ons sal daarop terugkom. Dit is The Daily Diff, onder die enjinkap.

Wat identifiseer 'n idempotensiesleutel?

0:21 Idempotensie beteken die herhaling van 'n operasie het dieselfde beoogde effek as om dit een keer te doen. 'n Idempotensiesleutel etiketteer een logiese aksie. Stripe se API weergawe een herken daardie etiket by herproberings en herhaal 'n gestoorde antwoord. Stel jou voor jy koop 'n koffie. Stripe voltooi jou betalingsversoek, en die antwoord raak verlore op pad huis toe. Die klant sien 'n tolwer. Hul bank het dalk 'n meer opwindende interpretasie. 'n Onbeskermde skep-versoek kan die newe-effek herhaal.

Hoe maak dieselfde sleutel 'n herprobeer veilig?

0:45 Heg 'n unieke sleutel aan voor die eerste poging en behou dit vir herproberings. As jou toepassing herbegin, bewaar daardie sleutel saam met die operasie in jou rekords. Vir Stripe se weergawe een API, sodra die eindpuntuitvoering begin, word die eerste versoek se status en liggaam gestoor. Stuur dieselfde sleutel en parameters weer, en Stripe gee die gestoorde antwoord terug. Die koffie bly staan terwyl die kwitansie weer reis.

Wat stoor Stripe presies?

1:07 Hier is Stripe se werklike bewoording. Herproberings met dieselfde sleutel gee die gestoorde antwoord terug, insluitend vyfhonderd foute. Die dokumentasie doen meer werk as jou optimisties genoemde herprobeer-helper. Die klant tik weer. Jou toepassing besluit of dit die hangende aankoop hervat of 'n ander een begin. 'n Werklik nuwe koffie kry 'n nuwe sleutel. 'n Vars sleutel vir elke netwerkherprobeer ondermyn die beskerming.

1:27 Verskillende parameters met dieselfde sleutel veroorsaak 'n wanpassing.

Wat gebeur wanneer die versoek verander?

1:30 As parameters misluk validering, of 'n ander versoek met daardie sleutel steeds uitvoer, stoor Stripe geen idempotente resultaat vir daardie poging nie. Daardie versoeke kan weer probeer word. 'n Wedlopende versoek kry 'n konflik. Dit is weergawe een reëls. Weergawe twee gedra anders. 'n Kop kan nie presies eenmalige aflewering oor jou stelsel belowe nie. E-pos, voorraad en jou databasis benodig elkeen fouthantering.

1:52 Die sleutel beskerm die operasie binne sy gedokumenteerde omvang. Stripe behou weergawe een sleutels vir ten minste vier-en-twintig uur en kan dit

Hoe lank is die onthoude resultaat veilig om weer te probeer?

1:59 daarna snoei. 'n Gesnoeide sleutel kan 'n nuwe versoek uitvoer. Hou onopgeloste herproberings binne die eerste dag. Daarna, stop en versoen die oorspronklike uitkoms. Gebruik eksponensiële terugval en ruk om die bediener asemruimte te gee. Anders vorm herproberings 'n tou buite 'n brandende koffiewinkel. Stripe se biblioteke hanteer herproberings, maar kyk na jou biblioteek se verstekwaardes. Daardie taai fout is die strik.

Hoekom kan 'n onthoude fout aanhou terugkom?

2:20 'n Gekasjeerde vyfhonderd antwoord hou aan herhaal nadat konnektiwiteit herstel het. Die oorspronklike operasie het dalk newe-effekte geproduseer. Los die uitkoms daarvan op deur objekte, die Dashboard en webhooks te gebruik. 'n Nuwe sleutel kan die aksie herhaal. As jy dit eerder wil lees as om my dit te hoor sê, land die verskil in jou inkassie elke oggend, gratis by the daily diff dot dev, skakel hieronder.

Sou ek 'n herprobeer-knoppie met hierdie kontrak verskeep?

2:39 Uitspraak, onder die enjinkap. Stuur dit. Ek sou stabiele sleutels met beperkte herproberings en versoening verskeep, sodat klante koffie kry sonder om jou verspreide stelsels opvoeding te finansier. En dit is die verskil vir vandag. Ek is Niko van Axrisi. Voeg verantwoordelik saam.

Bronne

  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

Verwante video's