Το κουμπί γυρίζει, η καρτέλα δείχνει σφάλμα και η φόρμα που συμπληρώνατε δέκα λεπτά έχει χαθεί. Αυτό που δεν γνωρίζετε είναι αν η εγγραφή πρόλαβε να γίνει πριν πεθάνει η σύνδεση. Το να αντιμετωπίζετε αυτό το άγνωστο ως αποτυχία είναι ο τρόπος με τον οποίο δημιουργούνται διπλά σχόλια, διπλές παραγγελίες και επαναλαμβανόμενα αιτήματα υποστήριξης.

Ανακτήστε με σταθερή σειρά: κρατήστε το κείμενο, βρείτε το αποτέλεσμα και μόνο τότε αποφασίστε αν επιτρέπεται δεύτερη υποβολή.

Ξεκινήστε από το κείμενο και τη χρονική σήμανση

Αντιγράψτε το περιεχόμενο από τη σελίδα πριν αγγίξετε οτιδήποτε άλλο, συμπεριλαμβανομένου οποιουδήποτε προχείρου κρατά ακόμη το πρόγραμμα περιήγησης στο πεδίο. Σημειώστε την ώρα, τη σελίδα όπου βρισκόσασταν και την ενέργεια που κάνατε, γιατί αυτές οι τρεις λεπτομέρειες είναι που καθιστούν δυνατή την υπόλοιπη διερεύνηση. Αν η καρτέλα είναι ακόμη ανοιχτή, αφήστε την ανοιχτή μέχρι να διαβάσετε την καταχώριση δικτύου. Η αποθήκευση του κειμένου δεν κοστίζει τίποτα και η απώλειά του κοστίζει ολόκληρη την εργασία.

Έπειτα διαχωρίστε τις δύο μορφές αποτυχίας που μπορείτε πράγματι να παρατηρήσετε. Μια σύνδεση που έπεσε στη μέση του αιτήματος και ένας διακομιστής που απάντησε με σφάλμα φαίνονται διαφορετικά στον πίνακα δικτύου, και μόνο το δεύτερο σας λέει κάτι για την απόφαση της εφαρμογής.

Αναζητήστε το αποτέλεσμα στην ίδια την όψη της εφαρμογής

Επαναφορτώστε την όψη ανάγνωσης που θα έδειχνε το αποτέλεσμα: τη λίστα σχολίων, το ιστορικό παραγγελιών, την ουρά αιτημάτων ή την εγγραφή που επεξεργαζόσασταν. Αντιπαραβάλετε με βάση τον λογαριασμό, τον προορισμό, την ώρα και το περιεχόμενο και όχι την πιο πρόσφατη καταχώριση, γιατί κάποιος άλλος μπορεί να έγραψε μετά από εσάς. Για μια εργασία υποβάθρου, αναζητήστε την υπάρχουσα αναφορά και την κατάστασή της αντί να δημιουργήσετε νέα λειτουργία ως δοκιμή συνδεσιμότητας.

Αν το αποτέλεσμα είναι εκεί, τελειώσατε και το σφάλμα ανήκει στη διαδρομή απάντησης και όχι στην εγγραφή. Αν δεν είναι, κρατήστε την πιθανότητα ότι η εφαρμογή δεν το έχει δεσμεύσει ακόμη: μια εργασία σε ουρά, μια καθυστερημένη όψη ανάγνωσης ή ένα αντίγραφο που υστερεί μπορούν να κρύψουν για λίγο μια επιτυχημένη εγγραφή.

Δώστε του μια καθορισμένη δεύτερη ματιά πριν βγάλετε συμπέρασμα και σημειώστε την ώρα και των δύο ελέγχων. Δύο έλεγχοι με είκοσι δευτερόλεπτα απόσταση είναι πολύ ασθενέστερη απόδειξη από δύο ελέγχους με δέκα λεπτά απόσταση.

Αποφασίστε αν μια δεύτερη υποβολή είναι ασφαλής

Η απάντηση εξαρτάται από τη λειτουργία, όχι από την υπομονή σας. Το 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, η απάντηση ή το χρονικό όριο και η ώρα που συνέβη είναι αυτά που μπορεί ένας διαχειριστής να συσχετίσει με τα αρχεία της εφαρμογής. Εξαγάγετε ή αντιγράψτε την καταχώριση ως εντολή μόνο αν στη συνέχεια αφαιρέσετε από το αντίγραφο τα cookies, τις κεφαλίδες εξουσιοδότησης και οποιοδήποτε ιδιωτικό περιεχόμενο. Αφήστε τη δική σας συνεδρία άθικτη και μην επαναλάβετε ποτέ ένα καταγεγραμμένο αίτημα με διαπιστευτήρια ως συντόμευση.

Ρωτήστε τον ιδιοκτήτη της υπηρεσίας μία συγκεκριμένη ερώτηση: πέτυχε η λειτουργία με αυτό το περιεχόμενο αυτή την ώρα και υπάρχει αναφορά γι’ αυτήν; Σε αυτή την ερώτηση υπάρχει απάντηση, ενώ στο "χάλασε ο ιστότοπος" δεν υπάρχει.

Το νόημα της άσκησης είναι να διαπιστωθεί ότι η ενέργεια συνέβη ακριβώς μία φορά. Ένα μήνυμα σφάλματος που μπορείτε να κλείσετε δεν είναι το ίδιο με μια εγγραφή που μπορείτε να εμπιστευτείτε, και το δεύτερο είναι αυτό που χρειάζεστε πριν υποβάλετε οτιδήποτε άλλο.

Σχετικά άρθρα