Stripe იმახსოვრებს თქვენს მოთხოვნას, როდესაც პასუხი ქრება
ტაიმაუტმა შეიძლება გაურკვეველი დატოვოს შეკვეთა სერვერის მიერ ოპერაციის დასრულების შემდეგ.
ტაიმაუტმა შეიძლება გაურკვეველი დატოვოს შეკვეთა სერვერის მიერ ოპერაციის დასრულების შემდეგ. ეს "კულუარული" განმარტება იყენებს Stripe API v1-ის დოკუმენტირებულ იდემპოტენტურობის კონტრაქტს, რათა აჩვენოს ოპერაციის სტაბილური გასაღებები, შენახული პასუხის განმეორებითი დაკვრა, პარამეტრებისა და კონკურენტულობის ლიმიტები, შენარჩუნების ჰორიზონტი და შედეგების შეჯერება.
წაიკითხეთ წერილობითი გამოცემა (ინგლისური) ↗
რას მოიცავს ეს ვიდეო
- იდემპოტენტურობა ეხება ოპერაციის გამეორების განზრახ ეფექტს. Stripe API v1 ამატებს დოკუმენტირებულ შენახული პასუხის განმეორებითი დაკვრის კონტრაქტს.
- იგივე ლოგიკური მოქმედების განმეორებითი მცდელობა იყენებს იმავე გასაღებს და პარამეტრებს. შეინახეთ ოპერაციის გასაღები ცალკეული SDK ზარების ან აპლიკაციის გადატვირთვის დროს; ნამდვილად ახალ მოქმედებას სჭირდება საკუთარი გასაღები.
- აღსრულების დაწყების შემდეგ, Stripe API v1 ინახავს პირველი მოთხოვნის სტატუსს და სხეულს, 500 შეცდომის ჩათვლით, და აბრუნებს ამ შენახულ პასუხს განმეორებითი მცდელობისას.
- შეცვლილი პარამეტრები იგივე გასაღებით იწვევს შეუსაბამობას. ვალიდაციის შეცდომები და ერთდროული აღსრულების კონფლიქტები არ ინახავს იდემპოტენტურ შედეგს ამ მცდელობისთვის და შეიძლება განმეორდეს.
- Stripe ინახავს API v1 გასაღებებს მინიმუმ 24 საათის განმავლობაში და შეუძლია მათი წაშლა მოგვიანებით. შეზღუდეთ გადაუჭრელი ქსელის განმეორებითი მცდელობები პირველი 24 საათით, შემდეგ შეწყვიტეთ და შეაჯერეთ ოპერაციის გამეორებამდე.
- ქეშირებულ 500-ს შეუძლია განმეორებითი დაკვრის გაგრძელება კავშირის აღდგენის შემდეგ. თავდაპირველ ოპერაციას შეიძლება ჰქონდეს გვერდითი მოვლენები; გამოიყენეთ შესაბამისი ობიექტი, Dashboard-ის მოთხოვნა და webhook-ები მისი შედეგის დასადგენად.
- API v2 იყენებს განმეორებითი დაკვრის განსხვავებულ სემანტიკას. გასაღები არ ადგენს უნივერსალურ ზუსტად-ერთჯერად მიწოდებას ელფოსტის, ინვენტარის და ყველა ლოკალური მონაცემთა ბაზის ოპერაციისთვის.
ნათარგმნი ტრანსკრიპტი
ნათარგმნია ორიგინალური ინგლისური ნარატივიდან. ხელმისაწვდომი აუდიო და სუბტიტრები კონტროლდება YouTube-ის მიერ.
გააუქმა თუ არა ტაიმაუტმა თქვენი გადახდა?
0:00 თქვენ ფიქრობთ, რომ ტაიმაუტი ნიშნავს, რომ თქვენი გადახდა ჩავარდა. სერვერს შეუძლია დაასრულოს მუშაობა, სანამ პასუხი გაქრება, ტოვებს თქვენს შეკვეთას, რომელიც თავდაჯერებულად აჩვენებს აბსოლუტურად არაფერს. რატომ შეუძლია განმეორებით მცდელობას კვლავ გადახდა? როგორ იმახსოვრებს Stripe მცდელობას? როდის უნდა შეწყვიტოთ განმეორებითი მცდელობა? და გაითვალისწინეთ ერთი უსიამოვნო დეტალი. დამახსოვრებულ შეცდომას შეუძლია გადაურჩეს ქსელის პრობლემას.
0:17 ამას დავუბრუნდებით. ეს არის The Daily Diff, კულუარებში.
რას იდენტიფიცირებს იდემპოტენტურობის გასაღები?
0:21 იდემპოტენტურობა ნიშნავს, რომ ოპერაციის გამეორებას იგივე დანიშნულება აქვს, რაც მის ერთხელ შესრულებას. იდემპოტენტურობის გასაღები აღნიშნავს ერთ ლოგიკურ მოქმედებას. Stripe-ის API ვერსია ერთი ცნობს ამ ეტიკეტს განმეორებითი მცდელობისას და უკრავს შენახულ პასუხს. წარმოიდგინეთ ყავის ყიდვა. Stripe ასრულებს თქვენს გადახდის მოთხოვნას და პასუხი იკარგება უკან დაბრუნებისას, მომხმარებელი ხედავს მბრუნავ წრეს. მათ ბანკს შეიძლება ჰქონდეს უფრო ამაღელვებელი ინტერპრეტაცია. დაუცველ შექმნის მოთხოვნას შეუძლია გვერდითი ეფექტის გამეორება.
როგორ ხდის ერთი და იგივე გასაღები განმეორებით მცდელობას უსაფრთხოს?
0:45 პირველი მცდელობის წინ მიამაგრეთ უნიკალური გასაღები და შეინახეთ იგი განმეორებითი მცდელობისთვის. თუ თქვენი აპლიკაცია გადაიტვირთება, შეინახეთ ეს გასაღები ოპერაციასთან ერთად თქვენს ჩანაწერებში. Stripe-ის ვერსია ერთი API-ისთვის, როგორც კი აღსრულება დაიწყება, პირველი მოთხოვნის სტატუსი და სხეული ინახება. გაგზავნეთ იგივე გასაღები და პარამეტრები კვლავ და Stripe აბრუნებს შენახულ პასუხს. ყავა რჩება თავის ადგილას, სანამ მისი ქვითარი კვლავ მოგზაურობს.
რას ინახავს Stripe ზუსტად?
1:07 აქ არის Stripe-ის რეალური ფორმულირება. განმეორებითი მცდელობები იგივე გასაღებით აბრუნებენ შენახულ პასუხს, 500 შეცდომის ჩათვლით. დოკუმენტაცია უფრო მეტ სამუშაოს ასრულებს, ვიდრე თქვენი ოპტიმისტურად დასახელებული განმეორებითი დამხმარე. მომხმარებელი კვლავ აჭერს ღილაკს. თქვენი აპლიკაცია წყვეტს, გააგრძელებს თუ არა ეს მიმდინარე შეძენას ან დაიწყებს ახალს. ნამდვილად ახალი ყავა იღებს ახალ გასაღებს. ახალი გასაღები ყოველი ქსელის განმეორებითი მცდელობისთვის აუქმებს დაცვას.
1:27 განსხვავებული პარამეტრები იგივე გასაღებით იწვევს შეუსაბამობას.
რა ხდება, როდესაც მოთხოვნა იცვლება?
1:30 თუ პარამეტრები ვერ გადიან ვალიდაციას, ან სხვა მოთხოვნა ამ გასაღებით ჯერ კიდევ მიმდინარეობს, Stripe არ ინახავს იდემპოტენტურ შედეგს ამ მცდელობისთვის. ეს მოთხოვნები შეიძლება განმეორდეს. კონკურენტული მოთხოვნა იღებს კონფლიქტს. ეს არის ვერსია ერთი წესები. ვერსია ორი განსხვავებულად იქცევა. ჰედერი ვერ იძლევა გარანტიას ზუსტად ერთჯერადი მიწოდების თქვენს სისტემაში. ელფოსტა, ინვენტარი და თქვენი მონაცემთა ბაზა თითოეულს სჭირდება შეცდომების დამუშავება.
1:52 გასაღები იცავს ოპერაციას მისი დოკუმენტირებული ფარგლებში. Stripe ინახავს ვერსია ერთი გასაღებებს მინიმუმ ოცდაოთხი საათის განმავლობაში და შეუძლია მათი წაშლა
რამდენ ხანს არის უსაფრთხო დამახსოვრებული შედეგის განმეორებითი მცდელობა?
1:59 შემდეგ. წაშლილ გასაღებს შეუძლია ახალი მოთხოვნის შესრულება. შეინახეთ გადაუჭრელი განმეორებითი მცდელობები პირველი დღის განმავლობაში. ამის შემდეგ, შეწყვიტეთ და შეაჯერეთ ორიგინალური შედეგი. გამოიყენეთ ექსპონენციალური უკუგანვითარება და რხევა სერვერისთვის სუნთქვის სივრცის მისაცემად. წინააღმდეგ შემთხვევაში, განმეორებითი მცდელობები რიგს ქმნის დამწვარი ყავის მაღაზიის გარეთ. Stripe-ის ბიბლიოთეკები ამუშავებენ განმეორებით მცდელობებს, მაგრამ შეამოწმეთ თქვენი ბიბლიოთეკის ნაგულისხმევი პარამეტრები. ეს შემაშფოთებელი შეცდომა არის ხრიკი.
რატომ შეიძლება დამახსოვრებული შეცდომა განმეორდეს?
2:20 ქეშირებული ხუთასი პასუხი განმეორებითი დაკვრის გაგრძელებას აგრძელებს კავშირის აღდგენის შემდეგ. ორიგინალურ ოპერაციას შესაძლოა ჰქონოდა გვერდითი მოვლენები. გადაწყვიტეთ მისი შედეგი ობიექტების, Dashboard-ის და webhooks-ის გამოყენებით. ახალ გასაღებს შეუძლია მოქმედების გამეორება. თუ ამის წაკითხვა გირჩევნიათ, ვიდრე ჩემი მოსმენა, "დიფი" ყოველ დილას თქვენს შემოსულებში ხვდება, უფასოდ the 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



