Gumb se vrti, kartica pokazuje pogrešku, a obrazac koji ste popunjavali deset minuta je nestao. Ono što ne znate jest je li upis prošao prije nego što je veza prekinuta. Tretiranje te nepoznanice kao neuspjeha način je na koji nastaju dvostruki 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 stoji ništa, a gubitak teksta stoji cijeli zadatak.

Zatim razdvojite dva oblika kvara koja doista možete primijetiti. Veza koja je pukla usred zahtjeva i poslužitelj koji je odgovorio pogreš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, povijest narudžbi, red zahtjeva ili zapis koji ste uređivali. Uspoređujte po računu, odredištu, vremenu i sadržaju, a ne po najnovijem zapisu, jer je netko drugi možda pisao poslije vas. Za pozadinski posao potražite postojeću referencu i njezin status, umjesto da stvarate novu operaciju kao test povezanosti.

Ako je rezultat tamo, gotovi ste i pogreš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 učinkom 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 skupini, 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 dokumentira i vežite ga za istu logičku operaciju, umjesto da za svaki pokušaj generirate 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.json

Ključ 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 ponovno nešto pritisnete

Sačuvajte mrežni zapis umjesto snimke zaslona pogreš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 reproducirajte 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 pogreš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.

Povezani članci