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-ից։ Միավորեք պատասխանատվությամբ։
Աղբյուրներ
- Idempotent requestsStripe Docs
- Designing robust and predictable APIs with idempotencyStripe Engineering — Brandur Leach
- Advanced error handlingStripe Docs
- HTTP Semantics — RFC 9110 §9.2.2 Idempotent MethodsIETF / RFC Editor



