Հոդվածի ֆոկուսը
Խնդիր. մեկ օգտվող, մի քանի հարցումներ
Կոճակը կարող է երկու անգամ սեղմվել, ցանցը կարող է կրկնել հարցումը, և webhook-ը կարող է մի քանի անգամ գալ:
Idempotency նշանակում է, որ նույն մտադրությունը կրկնելը կրկին չի փոխում արդյունքը: Սա հատկապես կարևոր է վճարումների դեպքում. կրկնվող հարցումը չպետք է ստեղծի երկրորդ պատվեր, երկրորդ վճարում կամ երկրորդ ստուգում:
Տիպիկ օրինակ. ֆրոնտենդը վճարում ստեղծելու հարցում է ուղարկել, բայց պատասխան չի ստացել ժամանակի դադարի պատճառով: Օգտագործողը կրկին սեղմում է կոճակը: Առանց անզորության, հետին պլանը կարող է ստեղծել նույն գումարով վճարման երկու փորձ:
- վճարման ստեղծման հարցումը կրկնելը վերադարձնում է արդեն ստեղծված վճարման ID-ն.
- webhook կրկնելը կրկին չի փոխում վերջնական կարգավիճակը.
- հարկաբյուջետային առաջադրանքը կրկնելը երկրորդ ստուգում չի ստեղծում.
- կրկնությունների սխալները տեսանելի են գրանցամատյանում:
Որտեղ պահել անզորության բանալին
Բանալին պետք է ապրի հետին պլանում և կապված լինի բիզնես նպատակների հետ, այլ ոչ միայն HTTP հարցման:
Idempotency բանալին կարող է ստեղծվել հետին պլանում կամ ստացվել վստահելի հաճախորդից, սակայն հետնամասը պետք է ստուգի այն: Օգտակար է բանալին կապել գործողության տեսակի հետ՝ ստեղծել վճարում, առաքել webhook, ստեղծել ֆիսկալ անդորրագիր:
Պատահական կրկնակի օգտագործումից պաշտպանվելու համար արժե պահել հարցումների հեշը: Եթե նույն բանալիով ստացվել է այլ գումար կամ այլ պատվերի ID, սա պետք է լինի սխալ, այլ ոչ թե նոր գործողություն:
- բանալին + գործողության տեսակը որպես եզակի սահմանափակում;
- հարցման հեշ՝ հարցումի անփոփոխությունը ստուգելու համար.
- պահված պատասխանը անվտանգ կրկնության համար;
- ժամկետանց քաղաքականություն՝ հին բանալիները մաքրելու համար:
Ինչպե՞ս է անզորությունը կապված կարգավիճակների հետ:
Idempotency-ն չի փոխարինում պետական մեքենային, այլ գործում է վավերական անցումների կանոնների հետ միասին։
Եթե վճարումն արդեն վերջնական վճարովի կարգավիճակում է, pending webhook-ի կրկնությունը չպետք է հետ դարձնի պատվերը: Idempotency-ն պաշտպանում է կրկնօրինակներից, իսկ պետական մեքենան պաշտպանում է սխալ անցումներից:
Երկու պաշտպանությունն անհրաժեշտ է միաժամանակ: Բանալին օգնում է հասկանալ, որ վիրահատությունն արդեն կատարվել է, և անցումային կանոնները որոշում են, թե արդյոք բիզնեսի կարգավիճակը կարող է փոխվել:
- վերջնական կարգավիճակը չի կարող վերագրվել հին միջանկյալով.
- վերադարձը նոր իրադարձություն է, ոչ թե ձախողված.
- կրկնօրինակ իրադարձությունները պետք է գրանցվեն որպես կրկնակի առաքում.
- ձեռնարկի փոփոխությունները պետք է ունենան առանձին աուդիտի հետք:
FAQ
Արդյո՞ք «Idempotency» բանալին պետք է նույնը լինի պատվերի և վճարման համար:
Պարտադիր չէ: Սովորաբար ավելի լավ է բանալիներն առանձնացնել ըստ գործողության տեսակի՝ վճարման ստեղծում, webhook առաքում, ֆիսկալ առաջադրանք:
Ի՞նչ անել, եթե նույն բանալին այլ գումարով է եկել:
Սա համարեք հակամարտություն և նոր օպերացիա մի ստեղծեք։ Դա անելու համար պահվում է հարցման հեշը կամ ստուգվում են հիմնական դաշտերը:
Idempotency անհրաժեշտ է միայն POST հարցումների համար:
Ամենից հաճախ դա անհրաժեշտ է հրամանների համար, որոնք ստեղծում կամ փոխում են վիճակը՝ վճարում, չեկ, իրադարձության առաքում, վերադարձ: