+− THE DAILY DIFFdev & AI news
SHIP IT

Stripe-ը հիշում է Ձեր հարցումը, երբ պատասխանն անհետանում է

Ժամանակի սահմանաչափը կարող է անորոշ թողնել վճարումը, երբ սերվերը ավարտել է գործողությունը։ «Under the Hood» բացատրությունը օգտագործում է Stripe API v1-ի փաստաթղթավորված իդեմպոտենտության պայմանագիրը՝ ցույց տալու համար կայուն գործողությունների բանալիներ, պահված պատասխանի վերարտադրում, պարամետրերի և միաժամանակության սահմանափակումներ, պահպանման ժամանակահորիզոն և արդյունքների համաձայնեցում։

Ժամանակի սահմանաչափը կարող է անորոշ թողնել վճարումը, երբ սերվերը ավարտել է գործողությունը։ «Under the Hood» բացատրությունը օգտագործում է Stripe API v1-ի փաստաթղթավորված իդեմպոտենտության պայմանագիրը՝ ցույց տալու համար կայուն գործողությունների բանալիներ, պահված պատասխանի վերարտադրում, պարամետրերի և միաժամանակության սահմանափակումներ, պահպանման ժամանակահորիզոն և արդյունքների համաձայնեցում։

Կարդացեք գրավոր տարբերակը (անգլերեն) ↗

Ինչ է ընդգրկում այս տեսանյութը

  • Իդեմպոտենտությունը վերաբերում է գործողությունը կրկնելու նախատեսված ազդեցությանը։ Stripe API v1-ն ավելացնում է փաստաթղթավորված պահված պատասխանի վերարտադրման պայմանագիր։
  • Նույն տրամաբանական գործողության կրկնությունը օգտագործում է նույն բանալին և պարամետրերը։ Գործողության բանալին պահպանեք տարբեր SDK կանչերի կամ հավելվածի վերագործարկումների միջև. իսկապես նոր գործողության համար անհրաժեշտ է իր սեփական բանալին։
  • Վերջնակետի կատարման սկսվելուց հետո Stripe API v1-ը պահպանում է առաջին հարցման կարգավիճակը և մարմինը, ներառյալ 500 սխալները, և վերադարձնում է այդ պահված պատասխանը կրկնությունների ժամանակ։
  • Փոփոխված պարամետրերը նույն բանալիով առաջացնում են անհամապատասխանություն։ Վավերացման ձախողումները և միաժամանակյա կատարման կոնֆլիկտները չեն պահպանում իդեմպոտենտ արդյունք այդ փորձի համար և կարող են կրկնվել։
  • Stripe-ը պահպանում է API v1 բանալիները առնվազն 24 ժամ և դրանից հետո կարող է դրանք ջնջել։ Անլուծելի ցանցային կրկնությունները սահմանափակեք առաջին 24 ժամով, այնուհետև դադարեցրեք և համաձայնեցրեք մինչև գործողությունը կրկնելը։
  • Քեշավորված 500 սխալը կարող է շարունակել վերարտադրվել կապի վերականգնումից հետո։ Սկզբնական գործողությունը կարող էր ունենալ կողմնակի ազդեցություններ. օգտագործեք համապատասխան օբյեկտը, Dashboard-ի հարցումը և վեբհուքերը՝ դրա արդյունքը պարզելու համար։
  • API v2-ը օգտագործում է վերարտադրման այլ իմաստաբանություն։ Բանալին չի ապահովում էլեկտրոնային փոստի, գույքագրման և յուրաքանչյուր տեղական տվյալների բազայի գործողության ունիվերսալ «ճիշտ մեկ անգամ» առաքում։

Թարգմանված արձանագրություն

Թարգմանվել է բնօրինակ անգլերեն պատմությունից։ Հասանելի աուդիո և ենթագրերը վերահսկվում են YouTube-ի կողմից։

Արդյոք ժամանակի սահմանաչափը չեղարկե՞ց Ձեր վճարումը։

0:00 Դուք կարծում եք, որ ժամանակի սահմանաչափը նշանակում է, որ Ձեր վճարումը ձախողվել է։ Սերվերը կարող է ավարտել, մինչդեռ պատասխանն անհետանում է, թողնելով Ձեր վճարումը վստահորեն ոչինչ չցուցադրելով։ Ինչու՞ կարող է կրկնությունը կրկին գանձել։ Ինչպե՞ս է Stripe-ը հիշում փորձը։ Ե՞րբ պետք է դադարեցնել կրկնումը։ Եվ հիշեք մի տհաճ մանրուք։ Հիշված սխալը կարող է գոյատևել ցանցային խնդրից։

0:17 Կվերադառնանք դրան։ Սա The Daily Diff-ն է, Under the Hood-ի տակ։

Ինչ է նույնացնում իդեմպոտենտության բանալին։

0:21 Իդեմպոտենտությունը նշանակում է, որ գործողությունը կրկնելը ունի նույն նպատակային ազդեցությունը, ինչ մեկ անգամ անելը։ Իդեմպոտենտության բանալին նշում է մեկ տրամաբանական գործողություն։ Stripe-ի API-ի առաջին տարբերակը ճանաչում է այդ նշանը կրկնությունների ժամանակ և վերարտադրում է պահված պատասխանը։ Պատկերացրեք սուրճ գնելը։ Stripe-ն ավարտում է Ձեր վճարման հարցումը, և պատասխանը կորչում է տուն վերադառնալիս։ Հաճախորդը տեսնում է պտտվող պատկերակ։ Նրանց բանկը կարող է ունենալ ավելի հետաքրքիր մեկնաբանություն։ Անպաշտպան ստեղծելու հարցումը կարող է կրկնել կողմնակի ազդեցությունը։

Ինչպես է նույն բանալին ապահով դարձնում կրկնությունը։

0:45 Կցեք եզակի բանալի առաջին փորձից առաջ և պահեք այն կրկնությունների համար։ Եթե Ձեր հավելվածը վերագործարկվում է, պահպանեք այդ բանալին գործողության հետ Ձեր գրառումներում։ Stripe-ի առաջին տարբերակի API-ի համար, երբ վերջնակետի կատարումը սկսվում է, առաջին հարցման կարգավիճակը և մարմինը պահպանվում են։ Նորից ուղարկեք նույն բանալին և պարամետրերը, և Stripe-ը կվերադարձնի պահված պատասխանը։ Սուրճը մնում է տեղում, մինչդեռ դրա անդորրագիրը կրկին ճանապարհորդում է։

Ինչ է կոնկրետ պահպանում Stripe-ը։

1:07 Ահա Stripe-ի իրական ձևակերպումը։ Նույն բանալիով կրկնությունները վերադարձնում են պահված պատասխանը, ներառյալ հինգ հարյուր սխալները։ Փաստաթղթավորումը ավելի շատ աշխատանք է կատարում, քան Ձեր լավատեսորեն անվանված կրկնության օգնականը։ Հաճախորդը կրկին սեղմում է։ Ձեր հավելվածը որոշում է, թե արդյոք դա վերսկսում է սպասվող գնումը, թե սկսում է մեկ այլ մեկը։ Իսկապես նոր սուրճը ստանում է նոր բանալի։ Յուրաքանչյուր ցանցային կրկնության համար նոր բանալին չի ապահովում պաշտպանություն։

1:27 Տարբեր պարամետրերը նույն բանալիով առաջացնում են անհամապատասխանություն։

Ինչ է տեղի ունենում, երբ հարցումը փոխվում է։

1:30 Եթե պարամետրերը ձախողում են վավերացումը, կամ այդ բանալիով մեկ այլ հարցում դեռ կատարվում է, Stripe-ը չի պահպանում իդեմպոտենտ արդյունք այդ փորձի համար։ Այդ հարցումները կարող են կրկնվել։ Մրցակցող հարցումը կոնֆլիկտ է առաջացնում։ Սրանք առաջին տարբերակի կանոններն են։ Երկրորդ տարբերակը այլ կերպ է գործում։ Վերնագիրը չի կարող խոստանալ «ճիշտ մեկ անգամ» առաքում Ձեր համակարգի ամբողջությամբ։ Էլեկտրոնային փոստը, գույքագրումը և Ձեր տվյալների բազան յուրաքանչյուրը կարիք ունեն ձախողման մշակման։

1:52 Բանալին պաշտպանում է գործողությունը իր փաստաթղթավորված շրջանակներում։ Stripe-ը պահպանում է առաջին տարբերակի բանալիները առնվազն քսանչորս ժամ և կարող է դրանք ջնջել

Որքա՞ն ժամանակ է հիշված արդյունքը անվտանգ կրկնելու համար։

1:59 դրանից հետո։ Ջնջված բանալին կարող է կատարել նոր հարցում։ Անլուծելի կրկնությունները պահեք առաջին օրվա ընթացքում։ Դրանից հետո, դադարեցրեք և համաձայնեցրեք սկզբնական արդյունքը։ Օգտագործեք ցուցադրական հետաձգում և տատանում՝ սերվերին շնչելու հնարավորություն տալու համար։ Հակառակ դեպքում կրկնությունները հերթ կկազմեն այրվող սրճարանի դրսում։ Stripe-ի գրադարանները մշակում են կրկնությունները, բայց ստուգեք Ձեր գրադարանի լռելյայն պարամետրերը։ Այդ կպչուն սխալը խնդիրն է։

Ինչու՞ կարող է հիշված սխալը շարունակել վերադառնալ։

2:20 Քեշավորված հինգ հարյուր պատասխանը շարունակում է վերարտադրվել կապի վերականգնումից հետո։ Սկզբնական գործողությունը կարող էր առաջացնել կողմնակի ազդեցություններ։ Լուծեք դրա արդյունքը օբյեկտների, Dashboard-ի և վեբհուքերի միջոցով։ Նոր բանալին կարող է կրկնել գործողությունը։ Եթե ավելի շուտ կցանկանայիք կարդալ սա, քան լսել իմ ասածը, ապա diff-ը հայտնվում է Ձեր մուտքի արկղում ամեն առավոտ, անվճար daily diff dot dev կայքում, հղումը ներքևում։

Արդյո՞ք ես կուղարկեի կրկնության կոճակ այս պայմանագրով։

2:39 Դատավճիռ, Under the Hood-ի տակ։ SHIP IT. Ես կուղարկեի կայուն բանալիներ սահմանափակ կրկնություններով և համաձայնեցումներով, որպեսզի հաճախորդները սուրճ ստանան՝ առանց Ձեր բաշխված համակարգերի կրթությունը ֆինանսավորելու։ Եվ սա այսօրվա diff-ն է։ Ես Նիկոն եմ Axrisi-ից։ Միավորեք պատասխանատվությամբ։

Աղբյուրներ

  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

Հարակից տեսանյութեր

under-the-hood · hy · 24 սեպ, 2026 թ.

SAML-ը՝ ներքին կառուցվածքը. ստորագրությունը նամակի ներսում

SAML-ը մուտք է գործում ձեր գրեթե յուրաքանչյուր աշխատանքային հավելված, և դրա ստորագրությունն ապրում է այն XML-ի ներսում, որը ստորագրում է: Ներքին կառուցվածքը. մուտքի պարը հավելվածի, բրաուզերի և ինքնութ

3:02 ↗