Je li to slanje kojem je istekao rok stvarno sačuvalo vaš rad?
Greška u pregledniku dokazuje da odgovor nije stigao, a ne da je upis neuspješan. Sačuvajte tekst, pronađite rezultat u aplikaciji i tek onda procijenite je li ponovni pokušaj siguran.
Dugme se vrti, kartica pokazuje grešku, a obrazac koji ste popunjavali deset minuta je nestao. Ono što ne znate jeste je li upis prošao prije nego što je veza prekinuta. Tretiranje te nepoznanice kao neuspjeha način je na koji nastaju dupli komentari, dvostruke narudžbe i ponovljeni zahtjevi podršci.
Oporavljajte se u utvrđenom redu: zadržite tekst, pronađite rezultat i tek onda odlučite je li drugo slanje dopušteno.
Počnite s tekstom i vremenskom oznakom
Kopirajte sadržaj sa stranice prije nego što dotaknete bilo što drugo, uključujući i svaku skicu koju preglednik još drži u polju. Zapišite vrijeme, stranicu na kojoj ste bili i radnju koju ste izvršili, jer upravo ta tri detalja omogućuju ostatak istrage. Ako je kartica još otvorena, ostavite je otvorenom dok ne pročitate mrežni zapis. Čuvanje teksta ne košta ništa, a gubitak teksta košta cijeli zadatak.
Zatim razdvojite dva oblika kvara koja doista možete primijetiti. Veza koja je pukla usred zahtjeva i poslužitelj koji je odgovorio greškom izgledaju različito u mrežnom panelu, a samo drugo govori nešto o odluci aplikacije.
Tražite rezultat u vlastitom prikazu aplikacije
Ponovno učitajte prikaz za čitanje koji bi pokazao rezultat: popis komentara, historiju narudžbi, red zahtjeva ili zapis koji ste uređivali. Upoređujte po računu, odredištu, vremenu i sadržaju, a ne po najnovijem zapisu, jer je neko drugi možda pisao poslije vas. Za pozadinski posao potražite postojeću referencu i njen status, umjesto da stvarate novu operaciju kao test povezanosti.
Ako je rezultat tamo, gotovi ste i greška pripada putu odgovora, a ne upisu. Ako nije, zadržite mogućnost da ga aplikacija još nije potvrdila: posao u redu čekanja, odgođeni prikaz za čitanje ili replika koja zaostaje mogu neko vrijeme sakriti uspješan upis.
Dajte mu određeni drugi pogled prije nego što donesete zaključak i zabilježite vrijeme obje provjere. Dvije provjere udaljene dvadeset sekundi mnogo su slabiji dokaz od dvije provjere udaljene deset minuta.
Procijenite je li drugo slanje sigurno
Odgovor zavisi od operacije, a ne od vašeg strpljenja. HTTP razdvaja metode koje se mogu ponoviti s istim namjeravanim efektom od onih koje ne mogu i savjetuje protiv automatskih ponavljanja druge vrste, osim ako se zna da semantika to dopušta. Stvaranje komentara, postavljanje narudžbe i slanje plaćanja obično su u drugoj grupi, zato drugi klik koji izgleda uspješno ne govori ništa o prvom.
Ako održavate klijenta, koristite mehanizam ponovnog pokušaja ili idempotentnosti koji API dokumentuje i vežite ga za istu logičku operaciju, umjesto da za svaki pokušaj generišete novi ključ. Identifikator zahtjeva koji se koristi za praćenje nije ključ za suzbijanje duplikata, osim ako ga poslužitelj tako tretira.
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.jsonKljuč pomaže samo ako ga usluga čuva uz operaciju i vrati izvorni rezultat pri ponavljanju. Testirajte to ponašanje na probnoj krajnjoj točki prije nego što se na njega oslonite u produkciji.
Prikupljajte dokaze prije nego ponovo nešto pritisnete
Sačuvajte mrežni zapis umjesto snimke ekrana greške. Metoda zahtjeva, URL, odgovor ili istek vremena i vrijeme kad se to dogodilo ono je što administrator može povezati sa zapisima aplikacije. Izvezite ili kopirajte zapis kao naredbu samo ako zatim iz kopije uklonite kolačiće, zaglavlja autorizacije i svaki privatni sadržaj. Ostavite vlastitu sesiju netaknutom i nikada ne reprodukujte presretnuti zahtjev s vjerodajnicama kao prečicu.
Pitajte vlasnika usluge jedno konkretno pitanje: je li operacija s ovim sadržajem u ovo vrijeme uspjela i postoji li referenca za nju? To pitanje ima odgovor, dok "je li se stranica pokvarila" nema.
Smisao vježbe je utvrditi da se radnja dogodila točno jednom. Poruka o grešci koju možete odbaciti nije isto što i zapis kojem možete vjerovati, a drugo vam treba prije nego što pošaljete bilo što drugo.