Батырма айналып тұр, қойынды қате көрсетеді, ал он минут толтырған пішін жоғалып кетті. Білмейтініңіз — байланыс үзілмей тұрып жазу жетті ме. Осы белгісіздікті сәтсіздік деп қабылдау қайталанған пікірлердің, қосарланған тапсырыстардың және қайталанатын қолдау билеттерінің пайда болу жолы.

Белгіленген тәртіппен қалпына келтіріңіз: мәтінді сақтап қалыңыз, нәтижені табыңыз, содан кейін ғана екінші жіберуге рұқсат бар-жоғын шешіңіз.

Мәтінмен және уақыт белгісімен бастаңыз

Басқа нәрсеге қол тигізбес бұрын мазмұнды беттен көшіріңіз, браузер әлі өрісте ұстап тұрған жобаны да қоса. Уақытты, қай бетте болғаныңызды және жасаған әрекетіңізді жазып алыңыз, өйткені қалған тексеруді мүмкін ететін дәл осы үш дерек. Қойынды әлі ашық болса, желі жазбасын оқығанша ашық қалдырыңыз. Мәтінді сақтау ештеңеге тұрмайды, ал оны жоғалту бүкіл тапсырмаға тұрады.

Содан кейін шынымен байқауға болатын екі ақау түрін ажыратыңыз. Сұраныс ортасында үзілген байланыс пен қатемен жауап берген сервер желі панелінде басқаша көрінеді және қолданбаның шешімі туралы тек екіншісі ғана айтады.

Нәтижені қолданбаның өз көрінісінен іздеңіз

Нәтижені көрсететін оқу көрінісін қайта жүктеңіз: пікірлер тізімі, тапсырыстар тарихы, билет кезегі немесе өңдеп жатқан жазба. Ең соңғы жазбаға қарап емес, шот, межелі жер, уақыт және мазмұн бойынша сәйкестендіріңіз, өйткені сізден кейін басқа біреу жазуы мүмкін. Фондық тапсырма үшін байланыс сынағы ретінде жаңа операция жасамай, бар сілтемені және оның күйін іздеңіз.

Нәтиже сонда болса, жұмысыңыз бітті және қате жазуға емес, жауап жолына жатады. Болмаса, қолданба оны әлі бекітпеуі мүмкін деген ықтималдықты сақтаңыз: кезектегі тапсырма, кешіккен оқу көрінісі немесе артта қалған көшірме сәтті жазуды біраз уақыт жасыра алады.

Қорытынды жасамас бұрын оған белгілі бір екінші көзқарас беріңіз және екі тексерудің уақытын жазыңыз. Жиырма секунд аралықпен екі тексеру он минут аралықпен екі тексеруден әлдеқайда әлсіз дәлел.

Екінші жіберудің қауіпсіздігін шешіңіз

Жауап операцияға байланысты, сіздің шыдамдылығыңызға емес. HTTP бірдей көзделген әсермен қайталауға болатын әдістерді мүмкін еместерден ажыратады және екінші түрді автоматты түрде қайталауға қарсы кеңес береді, егер семантика рұқсат ететіні белгісіз болса. Пікір жасау, тапсырыс беру және төлем жіберу әдетте екінші топта, сондықтан сәтті болып көрінген екінші басу біріншісі туралы ештеңе айтпайды.

Клиентті ұстасаңыз, API құжаттайтын қайталау немесе идемпотенттік механизмін қолданыңыз және әр әрекетке жаңа кілт жасамай, оны сол логикалық операцияға байлаңыз. Бақылау үшін қолданылатын сұраныс идентификаторы қайталауларды басу кілті емес, егер сервер оны солай қарастырмаса.

curl -i -X POST https://api.example.net/v1/orders \
  -H "Idempotency-Key: 6f1c2a94-3b7e-4a10-9c22-5d0e8f7b1a63" \
  -H "Content-Type: application/json" \
  --data @order.json

Кілт тек сұранысты операциямен бірге сақтап, қайталауда бастапқы нәтижені қайтарса ғана көмектеседі. Өндірісте оған сенбес бұрын бұл мінез-құлықты сынақ соңғы нүктесінде тексеріңіз.

Тағы бірдеңе баспас бұрын дәлел жинаңыз

Қатенің скриншотының орнына желі жазбасын сақтаңыз. Сұраныс әдісі, URL, жауап немесе уақыт шегі және болған уақыты — әкімші қолданба жазбаларымен салыстыра алатын дәл осы деректер. Жазбаны команда ретінде экспорттау немесе көшіру тек кейін көшірмеден cookie файлдарын, авторизация тақырыптарын және кез келген жеке мазмұнды алып тастасаңыз ғана жарамды. Өз сессияңызды бүтін қалдырыңыз және ұсталған, куәліктері бар сұранысты қысқа жол ретінде ешқашан қайталамаңыз.

Сервис иесіне бір нақты сұрақ қойыңыз: осы мазмұнмен осы уақытта операция сәтті болды ма және оған сілтеме бар ма? Бұл сұрақтың жауабы бар, ал "сайт бұзылды ма" сұрағының жауабы жоқ.

Бұл жаттығудың мәні — әрекет дәл бір рет болғанын анықтау. Жабуға болатын қате хабарламасы сенуге болатын жазбамен бірдей емес, ал тағы бірдеңе жібермес бұрын сізге екіншісі керек.

Қатысты мақалалар