A salvat acel trimitere expirat cu adevărat munca ta?
O eroare a browserului dovedește că răspunsul nu a ajuns, nu că scrierea a eșuat. Salvează textul, găsește rezultatul în aplicație și abia apoi decide dacă o nouă încercare este sigură.
Butonul se învârte, fila arată o eroare, iar formularul pe care l-ai completat zece minute a dispărut. Ce nu știi este dacă scrierea a ajuns înainte ca conexiunea să moară. Tratarea acelei necunoscute ca eșec este modul în care apar comentariile duplicate, comenzile duble și tichetele de suport repetate.
Recuperează într-o ordine fixă: păstrează textul, găsește rezultatul și abia apoi decide dacă un al doilea trimitere este permis.
Începe cu textul și cu marca de timp
Copiază conținutul din pagină înainte de a atinge orice altceva, inclusiv orice ciornă pe care browserul o mai ține în câmp. Notează ora, pagina pe care erai și acțiunea pe care ai făcut-o, pentru că exact aceste trei detalii fac posibilă restul investigației. Dacă fila este încă deschisă, lasă-o deschisă până citești intrarea de rețea. Salvarea textului nu costă nimic, iar pierderea lui costă întreaga sarcină.
Apoi separă cele două forme de defecțiune pe care chiar le poți observa. O conexiune care a căzut la mijlocul cererii și un server care a răspuns cu o eroare arată diferit în panoul de rețea, și doar a doua îți spune ceva despre decizia aplicației.
Caută rezultatul în vizualizarea proprie a aplicației
Reîncarcă vizualizarea de citire care ar arăta rezultatul: lista comentariilor, istoricul comenzilor, coada de tichete sau înregistrarea pe care o editai. Compară după cont, destinație, oră și conținut, nu după cea mai recentă intrare, pentru că altcineva poate fi scris după tine. Pentru o sarcină din fundal, caută referința existentă și starea ei în loc să creezi o operațiune nouă ca test de conectivitate.
Dacă rezultatul este acolo, ai terminat, iar eroarea aparține căii răspunsului, nu scrierii. Dacă nu este, păstrează posibilitatea ca aplicația să nu îl fi confirmat încă: o sarcină în coadă, o vizualizare de citire întârziată sau o replică rămasă în urmă pot ascunde o scriere reușită o vreme.
Dă-i o a doua privire definită înainte de a trage o concluzie și notează ora ambelor verificări. Două verificări la douăzeci de secunde distanță sunt o dovadă mult mai slabă decât două verificări la zece minute distanță.
Decide dacă un al doilea trimitere este sigur
Răspunsul depinde de operațiune, nu de răbdarea ta. HTTP separă metodele care pot fi repetate cu același efect dorit de cele care nu pot, și descurajează reîncercările automate de al doilea tip, dacă nu se știe că semantica le permite. Crearea unui comentariu, plasarea unei comenzi și trimiterea unei plăți sunt de obicei în al doilea grup, de aceea un al doilea clic care pare reușit nu spune nimic despre primul.
Dacă întreții clientul, folosește mecanismul de reîncercare sau de idempotență documentat de API, și leagă-l de aceeași operațiune logică în loc să generezi o cheie nouă pentru fiecare încercare. Un identificator de cerere folosit pentru urmărire nu este o cheie de suprimare a duplicatelor, dacă serverul nu îl tratează ca atare.
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.jsonCheia ajută doar dacă serviciul o stochează împreună cu operațiunea și returnează rezultatul original la o repetare. Testează acest comportament pe un punct final de testare înainte de a te baza pe el în producție.
Strânge dovezi înainte de a apăsa din nou ceva
Păstrează intrarea de rețea, nu o captură de ecran a erorii. Metoda cererii, URL-ul, răspunsul sau expirarea și momentul în care s-a întâmplat sunt ceea ce un administrator poate corela cu înregistrările aplicației. Exportă sau copiază intrarea ca o comandă doar dacă apoi elimini din copie cookie-urile, antetele de autorizare și orice conținut privat. Lasă-ți propria sesiune intactă și nu reda niciodată o cerere capturată cu acreditări ca scurtătură.
Întreabă proprietarul serviciului o singură întrebare concretă: operațiunea cu acest conținut la această oră a reușit și există o referință pentru ea? Această întrebare are răspuns, în timp ce "s-a stricat site-ul" nu are.
Scopul exercițiului este să stabilești că acțiunea s-a întâmplat exact o dată. Un mesaj de eroare pe care îl poți închide nu este același lucru cu o înregistrare în care poți avea încredere, iar pe cea de-a doua o ai nevoie înainte de a trimite orice altceva.