Το Stripe θυμάται το αίτημά σας όταν εξαφανίζεται η απάντηση
Ένα χρονικό όριο μπορεί να αφήσει μια ολοκλήρωση αγοράς αβέβαιη αφού ο διακομιστής έχει ολοκληρώσει τη λειτουργία.
Ένα χρονικό όριο μπορεί να αφήσει μια ολοκλήρωση αγοράς αβέβαιη αφού ο διακομιστής έχει ολοκληρώσει τη λειτουργία. Αυτή η επεξήγηση "Under the Hood" χρησιμοποιεί το τεκμηριωμένο συμβόλαιο ιδεοδυναμίας του Stripe API v1 για να δείξει σταθερά κλειδιά λειτουργίας, επανάληψη αποθηκευμένης απάντησης, περιορισμούς παραμέτρων και ταυτόχρονης εκτέλεσης, τον ορίζοντα διατήρησης και τη συμφιλίωση αποτελεσμάτων.
Διαβάστε την γραπτή έκδοση (Αγγλικά) ↗
Τι καλύπτει αυτό το βίντεο
- Η ιδεοδυναμία αφορά την επιδιωκόμενη επίδραση της επανάληψης μιας λειτουργίας. Το Stripe API v1 προσθέτει ένα τεκμηριωμένο συμβόλαιο επανάληψης αποθηκευμένης απάντησης.
- Μια επανάληψη της ίδιας λογικής ενέργειας χρησιμοποιεί το ίδιο κλειδί και παραμέτρους. Διατηρήστε το κλειδί λειτουργίας σε ξεχωριστές κλήσεις SDK ή επανεκκινήσεις εφαρμογών. Μια πραγματικά νέα ενέργεια χρειάζεται το δικό της κλειδί.
- Αφού ξεκινήσει η εκτέλεση του τελικού σημείου, το Stripe API v1 αποθηκεύει την κατάσταση και το σώμα της πρώτης αίτησης, συμπεριλαμβανομένων των σφαλμάτων 500, και επιστρέφει αυτή την αποθηκευμένη απάντηση σε επαναλήψεις.
- Αλλαγμένες παράμετροι με το ίδιο κλειδί παράγουν μια αναντιστοιχία. Αποτυχίες επικύρωσης και συγκρούσεις ταυτόχρονης εκτέλεσης δεν αποθηκεύουν ιδεοδύναμο αποτέλεσμα για αυτήν την προσπάθεια και μπορούν να επαναληφθούν.
- Το Stripe διατηρεί τα κλειδιά API v1 για τουλάχιστον 24 ώρες και μπορεί να τα περικόψει αργότερα. Περιορίστε τις μη επιλυμένες επαναλήψεις δικτύου στις πρώτες 24 ώρες, στη συνέχεια σταματήστε και συμφιλιώστε πριν επαναλάβετε τη λειτουργία.
- Ένα αποθηκευμένο 500 μπορεί να συνεχίσει να αναπαράγεται αφού αποκατασταθεί η συνδεσιμότητα. Η αρχική λειτουργία ενδέχεται να έχει παρενέργειες. Χρησιμοποιήστε το σχετικό αντικείμενο, την αίτηση Dashboard και τα webhooks για να διαπιστώσετε το αποτέλεσμά της.
- Το API v2 χρησιμοποιεί διαφορετική σημασιολογία επανάληψης. Ένα κλειδί δεν καθιερώνει καθολική παράδοση ακριβώς-μίας φοράς για email, αποθέματα και κάθε τοπική λειτουργία βάσης δεδομένων.
Μεταφρασμένη μεταγραφή
Μεταφράστηκε από την πρωτότυπη αγγλική αφήγηση. Ο διαθέσιμος ήχος και οι υπότιτλοι ελέγχονται από το YouTube.
Ακύρωσε ένα χρονικό όριο την πληρωμή σας;
0:00 Νομίζετε ότι ένα χρονικό όριο σημαίνει ότι η πληρωμή σας απέτυχε. Ο διακομιστής μπορεί να ολοκληρωθεί ενώ η απάντηση εξαφανίζεται, αφήνοντας την ολοκλήρωση αγοράς σας να εμφανίζει με σιγουριά απολύτως τίποτα. Γιατί μια επανάληψη μπορεί να χρεώσει ξανά; Πώς θυμάται το Stripe μια προσπάθεια; Πότε πρέπει να σταματήσετε την επανάληψη; Και να έχετε κατά νου μια δυσάρεστη λεπτομέρεια. Ένα απομνημονευμένο σφάλμα μπορεί να επιζήσει του προβλήματος δικτύου.
0:17 Θα επανέλθουμε σε αυτό. Αυτό είναι το The Daily Diff, κάτω από το κάλυμμα.
Τι προσδιορίζει ένα κλειδί ιδεοδυναμίας;
0:21 Η ιδεοδυναμία σημαίνει ότι η επανάληψη μιας λειτουργίας έχει την ίδια επιδιωκόμενη επίδραση με την εκτέλεση μία φορά. Ένα κλειδί ιδεοδυναμίας φέρει την ετικέτα μιας λογικής ενέργειας. Η έκδοση ένα του API του Stripe αναγνωρίζει αυτήν την ετικέτα σε επαναλήψεις και αναπαράγει μια αποθηκευμένη απάντηση. Φανταστείτε να αγοράζετε έναν καφέ. Το Stripe ολοκληρώνει την αίτηση πληρωμής σας και η απάντηση χάνεται κατά την επιστροφή στο σπίτι. Ο πελάτης βλέπει ένα spinner. Η τράπεζά τους μπορεί να έχει μια πιο συναρπαστική ερμηνεία. Μια μη προστατευμένη αίτηση δημιουργίας μπορεί να επαναλάβει την παρενέργεια.
Πώς το ίδιο κλειδί καθιστά ασφαλή την επανάληψη;
0:45 Επισυνάψτε ένα μοναδικό κλειδί πριν από την πρώτη προσπάθεια και κρατήστε το για επαναλήψεις. Εάν η εφαρμογή σας επανεκκινήσει, διατηρήστε αυτό το κλειδί με τη λειτουργία στα αρχεία σας. Για την έκδοση ένα του API του Stripe, μόλις ξεκινήσει η εκτέλεση του τελικού σημείου, η κατάσταση και το σώμα της πρώτης αίτησης αποθηκεύονται. Στείλτε το ίδιο κλειδί και παραμέτρους ξανά, και το Stripe επιστρέφει την αποθηκευμένη απάντηση. Ο καφές παραμένει στη θέση του ενώ η απόδειξή του ταξιδεύει ξανά.
Τι ακριβώς αποθηκεύει το Stripe;
1:07 Εδώ είναι η πραγματική διατύπωση του Stripe. Οι επαναλήψεις με το ίδιο κλειδί επιστρέφουν την αποθηκευμένη απάντηση, συμπεριλαμβανομένων πεντακοσίων σφαλμάτων. Η τεκμηρίωση κάνει περισσότερη δουλειά από τον αισιόδοξα ονομασμένο βοηθό επανάληψης. Ο πελάτης πατάει ξανά. Η εφαρμογή σας αποφασίζει εάν αυτό συνεχίζει την εκκρεμή αγορά ή ξεκινά μια άλλη. Ένας πραγματικά νέος καφές παίρνει ένα νέο κλειδί. Ένα φρέσκο κλειδί για κάθε επανάληψη δικτύου ακυρώνει την προστασία.
1:27 Διαφορετικές παράμετροι με το ίδιο κλειδί ενεργοποιούν μια αναντιστοιχία.
Τι συμβαίνει όταν αλλάζει η αίτηση;
1:30 Εάν οι παράμετροι αποτύχουν στην επικύρωση, ή μια άλλη αίτηση με αυτό το κλειδί εξακολουθεί να εκτελείται, το Stripe δεν αποθηκεύει κανένα ιδεοδύναμο αποτέλεσμα για αυτήν την προσπάθεια. Αυτές οι αιτήσεις μπορούν να επαναληφθούν. Μια αίτηση ανταγωνισμού λαμβάνει μια σύγκρουση. Αυτοί είναι οι κανόνες της έκδοσης ένα. Η έκδοση δύο συμπεριφέρεται διαφορετικά. Μια κεφαλίδα δεν μπορεί να υποσχεθεί ακριβώς μία φορά παράδοση σε όλο το σύστημά σας. Το email, το απόθεμα και η βάση δεδομένων σας χρειάζονται χειρισμό σφαλμάτων.
1:52 Το κλειδί προστατεύει τη λειτουργία εντός του τεκμηριωμένου πεδίου της. Το Stripe διατηρεί κλειδιά έκδοσης ένα για τουλάχιστον είκοσι τέσσερις ώρες και μπορεί να τα περικόψει
Πόσο καιρό είναι ασφαλές να επαναληφθεί το απομνημονευμένο αποτέλεσμα;
1:59 αργότερα. Ένα περικομμένο κλειδί μπορεί να εκτελέσει μια νέα αίτηση. Κρατήστε τις μη επιλυμένες επαναλήψεις εντός της πρώτης ημέρας. Πέρα από αυτό, σταματήστε και συμφιλιώστε το αρχικό αποτέλεσμα. Χρησιμοποιήστε εκθετική αναμονή και τρέμουλο για να δώσετε στον διακομιστή χώρο να αναπνεύσει. Διαφορετικά, οι επαναλήψεις σχηματίζουν μια ουρά έξω από ένα καμένο καφέ. Οι βιβλιοθήκες του Stripe χειρίζονται τις επαναλήψεις, αλλά ελέγξτε τις προεπιλογές της βιβλιοθήκης σας. Αυτό το επίμονο σφάλμα είναι το πρόβλημα.
Γιατί ένα απομνημονευμένο σφάλμα μπορεί να επιστρέφει συνεχώς;
2:20 Μια αποθηκευμένη απάντηση πεντακοσίων συνεχίζει να αναπαράγεται αφού αποκατασταθεί η συνδεσιμότητα. Η αρχική λειτουργία ενδέχεται να έχει δημιουργήσει παρενέργειες. Επιλύστε το αποτέλεσμά της χρησιμοποιώντας αντικείμενα, το Dashboard και webhooks. Ένα νέο κλειδί μπορεί να επαναλάβει την ενέργεια. Αν προτιμάτε να το διαβάσετε παρά να με ακούσετε να το λέω, το diff φτάνει στην εισερχόμενή σας κάθε πρωί, δωρεάν στο daily diff dot dev, σύνδεσμος παρακάτω.
Θα έστελνα ένα κουμπί επανάληψης με αυτό το συμβόλαιο;
2:39 Ετυμηγορία, κάτω από το κάλυμμα. SHIP IT. Θα έστελνα σταθερά κλειδιά με οριοθετημένες επαναλήψεις και συμφιλίωση, ώστε οι πελάτες να πίνουν καφέ χωρίς να χρηματοδοτούν την εκπαίδευσή σας σε κατανεμημένα συστήματα. Και αυτή είναι η διαφορά για σήμερα. Είμαι ο Νίκο από την Axrisi. Συγχωνεύστε υπεύθυνα.
Πηγές
- Idempotent requestsStripe Docs
- Designing robust and predictable APIs with idempotencyStripe Engineering — Brandur Leach
- Advanced error handlingStripe Docs
- HTTP Semantics — RFC 9110 §9.2.2 Idempotent MethodsIETF / RFC Editor



