Да ли је то слање коме је истекао рок стварно сачувало ваш рад?
Грешка у прегледачу доказује да одговор није стигао, а не да је упис неуспешан. Сачувајте текст, пронађите резултат у апликацији и тек онда процените да ли је поновни покушај безбедан.
Дугме се врти, картица показује грешку, а образац који сте попуњавали десет минута је нестао. Оно што не знате јесте да ли је упис прошао пре него што је веза прекинута. Управо третирање те непознанице као неуспеха ствара дупле коментаре, двоструке поруџбине и поновљене захтеве подршци.
Опорављајте се у утврђеном реду: задржите текст, пронађите резултат и тек онда одлучите да ли је друго слање допуштено.
Почните с текстом и временском ознаком
Копирајте садржај са странице пре него што дотакнете било шта друго, укључујући и сваку скицу коју прегледач још држи у пољу. Запишите време, страницу на којој сте били и радњу коју сте извршили, јер управо та три детаља омогућују остатак истраге. Ако је картица још отворена, оставите је отвореном док не прочитате мрежни запис. Чување текста не кошта ништа, а губитак текста кошта цео задатак.
Затим раздвојите два облика квара која заиста можете приметити. Веза која је пукла усред захтева и сервер који је одговорио грешком изгледају различито у мрежном панелу, а само друго говори нешто о одлуци апликације.
Тражите резултат у сопственом приказу апликације
Поново учитајте приказ за читање који би показао резултат: списак коментара, историју поруџбина, ред захтева или запис који сте уређивали. Упоређујте по рачуну, одредишту, времену и садржају, а не по најновијем запису, јер је неко други можда писао после вас. За позадински посао потражите постојећу референцу и њен статус, уместо да стварате нову операцију као тест повезаности.
Ако је резултат тамо, готови сте и грешка припада путу одговора, а не упису. Ако није, задржите могућност да га апликација још није потврдила: посао у реду чекања, одложени приказ за читање или реплика која заостаје могу неко време сакрити успешан упис.
Дајте му одређени други поглед пре него што донесете закључак и забележите време обе провере. Две провере удаљене двадесет секунди много су слабији доказ од две провере удаљене десет минута.
Процените да ли је друго слање безбедно
Одговор зависи од операције, а не од вашег стрпљења. 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, одговор или истек времена и време кад се то догодило оно је што администратор може повезати са записима апликације. Извезите или копирајте запис као наредбу само ако затим из копије уклоните колачиће, заглавља ауторизације и сав приватни садржај. Оставите сопствену сесију нетакнутом и никада не репродукујте пресретнути захтев са акредитивима као пречицу.
Питајте власника услуге једно конкретно питање: да ли је операција с овим садржајем у ово време успела и постоји ли референца за њу? То питање има одговор, док "да ли се страница покварила" нема.
Смисао вежбе је утврдити да се радња догодила тачно једном. Порука о грешци коју можете одбацити није исто што и запис коме можете веровати, а друго вам треба пре него што пошаљете било шта друго.