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