Kas see aegunud saatmine tegelikult sinu töö salvestas?
Brauseri viga tõestab, et vastus ei jõudnud kohale, mitte et kirjutus ebaõnnestus. Salvesta tekst, leia tulemus rakendusest ja otsusta alles siis, kas kordamine on ohutu.
Nupp keerleb, vahekaart näitab viga ja vorm, mille täitmisele kulus kümme minutit, on kadunud. Sa ei tea, kas kirjutus jõudis kohale enne, kui ühendus katkes. Selle tundmatu käsitlemine ebaõnnestumisena ongi viis, kuidas tekivad duplikaatsed kommentaarid, topeltkujud ja korduvad tugipiletid.
Taasta kindlas järjekorras: hoia tekst alles, leia tulemus ja alles siis otsusta, kas teine saatmine on lubatud.
Alusta tekstist ja ajatemplist
Kopeeri sisu lehelt enne, kui puudutad midagi muud, sealhulgas mustandit, mida brauser veel väljal hoiab. Kirjuta üles kellaaeg, leht, kus olid, ja toiming, mille tegid, sest just need kolm detaili teevad ülejäänud uurimise võimalikuks. Kui vahekaart on veel avatud, jäta see lahti, kuni oled võrgu kirje läbi lugenud. Teksti salvestamine ei maksa midagi ja selle kaotamine maksab kogu ülesande.
Seejärel erista kahte tõrke kuju, mida sa tegelikult jälgida saad. Ühendus, mis katkes keset päringut, ja server, mis vastas veaga, näevad võrgupaneelis erinevad välja, ja ainult teine ütleb midagi rakenduse otsuse kohta.
Otsi tulemust rakenduse enda vaates
Laadi uuesti lugemisvaade, mis tulemuse näitaks: kommentaaride loend, tellimuste ajalugu, piletijärjekord või kirje, mida toimetasid. Sobita konto, sihtkoha, aja ja sisu järgi, mitte kõige värskema kirje järgi, sest keegi teine võis kirjutada pärast sind. Taustatöö puhul otsi olemasolev viide ja selle olek, selle asemel et luua ühenduse testiks uus toiming.
Kui tulemus on olemas, on sul valmis ja viga kuulub vastuse teele, mitte kirjutusele. Kui seda pole, jäta alles võimalus, et rakendus pole seda veel kinnitanud: järjekorras ootav töö, hilinenud lugemisvaade või maha jääv koopia võivad õnnestunud kirjutust mõnda aega varjata.
Anna sellele enne järelduse tegemist kindel teine pilk ja pane kirja mõlema kontrolli aeg. Kaks kontrolli kahekümne sekundi vahega on palju nõrgem tõend kui kaks kontrolli kümne minuti vahega.
Otsusta, kas teine saatmine on ohutu
Vastus sõltub toimingust, mitte sinu kannatlikkusest. HTTP eristab meetodeid, mida saab korrata sama kavatsetud mõjuga, nendest, mida ei saa, ja soovitab teist liiki automaatset kordamist vältida, kui pole teada, et semantika seda lubab. Kommentaari loomine, tellimuse esitamine ja makse saatmine on tavaliselt teises rühmas, seepärast ei ütle teine õnnestununa näiv klõps esimese kohta midagi.
Kui haldad klienti, kasuta kordamise või idempotentsuse mehhanismi, mida API dokumenteerib, ja seo see sama loogilise toiminguga, selle asemel et iga katse jaoks uus võti genereerida. Jälgimiseks kasutatav päringu identifikaator ei ole duplikaatide tõkestamise võti, kui server ei käsitle seda sellisena.
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.jsonVõti aitab ainult siis, kui teenus salvestab selle toimingu juurde ja tagastab kordamisel algse tulemuse. Testi seda käitumist lavastuskeskkonna lõpp-punktis enne, kui toodangus sellele lootma jääd.
Kogu tõendeid enne, kui midagi uuesti vajutad
Hoia alles võrgu kirje, mitte vea ekraanipilt. Päringu meetod, URL, vastus või aegumine ja toimumise aeg on see, mida administraator saab rakenduse kirjetega korreleerida. Ekspordi või kopeeri kirje käsuna ainult siis, kui eemaldad seejärel koopiast küpsised, autoriseerimispealkirjad ja igasuguse privaatse sisu. Jäta oma sessioon puutumata ega korda kunagi tabatud volitusi kandvat päringut lühiütena.
Küsi teenuse omanikult üht konkreetset küsimust: kas toiming selle sisuga sel ajal õnnestus ja kas selle kohta on viide? Sellele küsimusele on vastus, samas kui "kas sait läks katki" vastust ei ole.
Harjutuse mõte on tuvastada, et toiming juhtus täpselt üks kord. Veateade, mille saad kõrvale lükata, ei ole sama mis kirje, mida saad usaldada, ja teist on sul vaja enne, kui midagi muud saadad.