ღილაკი ტრიალებს, ჩანართი შეცდომას აჩვენებს და ფორმა, რომლის შევსებასაც ათი წუთი დახარჯეთ, გაქრა. არ იცით, მოასწრო თუ არა ჩაწერამ კავშირის გაწყვეტამდე. სწორედ ამ უცნობის წარუმატებლობად მიჩნევა ქმნის დუბლირებულ კომენტარებს, ორმაგ შეკვეთებს და განმეორებით მხარდაჭერის ბილეთებს.

აღადგინეთ ფიქსირებული რიგით: შეინახეთ ტექსტი, იპოვეთ შედეგი და მხოლოდ ამის შემდეგ გადაწყვიტეთ, დაშვებულია თუ არა მეორე გაგზავნა.

დაიწყეთ ტექსტით და დროის ნიშნით

დააკოპირეთ შიგთავსი გვერდიდან, სანამ რაიმე სხვას შეეხებით, მათ შორის ნებისმიერი ესკიზი, რომელსაც ბრაუზერი ჯერ კიდევ ინახავს ველში. ჩაწერეთ დრო, გვერდი, რომელზეც იმყოფებოდით და მოქმედება, რომელიც შეასრულეთ, რადგან სწორედ ეს სამი დეტალი ხდის დანარჩენ გამოძიებას შესაძლებელს. თუ ჩანართი ჯერ კიდევ ღიაა, დატოვეთ ღიად, სანამ ქსელის ჩანაწერს წაიკითხავთ. ტექსტის შენახვა არაფრად არ ჯდება, ხოლო მისი დაკარგვა მთელი დავალება ღირს.

შემდეგ გაამიჯნეთ ორი სახის ხარვეზი, რომელთა დაკვირვებაც ნამდვილად შეგიძლიათ. მოთხოვნის შუაში გაწყვეტილი კავშირი და შეცდომით პასუხგაცემული სერვერი ქსელის პანელში სხვადასხვაგვარად ჩანს და მხოლოდ მეორე გეუბნებათ რაღაცას აპის გადაწყვეტილებაზე.

მოძებნეთ შედეგი თავად აპის ხედში

ხელახლა ჩატვირთეთ კითხვის ხედი, რომელიც შედეგს აჩვენებდა: კომენტარების სია, შეკვეთების ისტორია, ბილეთების რიგი ან ჩანაწერი, რომელსაც არედაქტირებდით. შეადარეთ ანგარიშის, დანიშნულების, დროისა და შიგთავსის მიხედვით და არა უახლესი ჩანაწერის მიხედვით, რადგან შესაძლოა სხვამ დაწეროს თქვენს შემდეგ. ფონური დავალებისთვის მოძებნეთ არსებული მითითება და მისი სტატუსი, ნაცვლად იმისა, რომ კავშირის ტესტად ახალი ოპერაცია შექმნათ.

თუ შედეგი იქ არის, დასრულდა და შეცდომა პასუხის გზას ეკუთვნის და არა ჩაწერას. თუ არ არის, შეინარჩუნეთ ალბათობა, რომ აპმა ჯერ არ დააფიქსირა: რიგში მდგარი დავალება, დაგვიანებული კითხვის ხედი ან ჩამორჩენილი ასლი შეიძლება ცოტა ხნით დამალოს წარმატებული ჩაწერა.

სანამ დასკვნას გააკეთებთ, მიეცით მას განსაზღვრული მეორე შეხედვა და ჩაწერეთ ორივე შემოწმების დრო. ოცი წამის ინტერვალით ორი შემოწმება გაცილებით სუსტი მტკიცებულებაა, ვიდრე ათი წუთის ინტერვალით ორი.

გადაწყვიტეთ, უსაფრთხოა თუ არა მეორე გაგზავნა

პასუხი ოპერაციაზეა დამოკიდებული და არა თქვენს მოთმინებაზე. 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, პასუხი ან ვადის გასვლა და მომხდარის დრო არის ის, რაც ადმინისტრატორს აპის ჩანაწერებთან დაკავშირებაში დაეხმარება. ჩანაწერი როგორც ბრძანება მხოლოდ მაშინ გაიტანეთ ან დააკოპირეთ, თუ შემდეგ ასლიდან წაშლით cookie-ებს, ავტორიზაციის თავსართებს და ნებისმიერ პირად შიგთავსს. დატოვეთ საკუთარი სესია ხელუხლებელი და არასოდეს გაიმეოროთ დაჭერილი, სერტიფიკატების მატარებელი მოთხოვნა მოკლე გზად.

ჰკითხეთ სერვისის მფლობელს ერთი კონკრეტული კითხვა: შედგა თუ არა ოპერაცია ამ შიგთავსით ამ დროს და არსებობს თუ არა მისი მითითება? ამ კითხვას პასუხი აქვს, ხოლო "გატყდა თუ არა საიტი" პასუხი არ აქვს.

სავარჯიშოს აზრი იმის დადგენაა, რომ მოქმედება ზუსტად ერთხელ მოხდა. შეცდომის შეტყობინება, რომლის დახურვაც შეგიძლიათ, არ არის იგივე, რაც სანდო ჩანაწერი, და სწორედ მეორე გჭირდებათ, სანამ კიდევ რამეს გააგზავნით.

დაკავშირებული სტატიები