+− THE DAILY DIFFdev & AI news
SHIP IT

Stripe cavab yox olduqda sorğunuzu xatırlayır

Vaxtaşırı server əməliyyatı tamamladıqdan sonra ödəniş qeyri-müəyyən qala bilər.

Vaxtaşırı server əməliyyatı tamamladıqdan sonra ödəniş qeyri-müəyyən qala bilər. Bu “Under the Hood” izahatı Stripe API v1-in sənədləşdirilmiş idempotentlik müqaviləsindən istifadə edərək sabit əməliyyat açarlarını, saxlanmış cavabın təkrar oynatılmasını, parametr və eyni vaxtda icra limitlərini, saxlama üfüqünü və nəticənin uzlaşmasını göstərir.

Yazılı nəşri oxuyun (İngiliscə) ↗

Bu videoda nələr əhatə olunur

  • İdempotentlik əməliyyatın təkrarlanmasının nəzərdə tutulan təsiri ilə bağlıdır. Stripe API v1 sənədləşdirilmiş saxlanmış cavabın təkrar oynatılması müqaviləsini əlavə edir.
  • Eyni məntiqi hərəkətin təkrarı eyni açar və parametrlərdən istifadə edir. Əməliyyat açarını ayrı SDK çağırışları və ya tətbiq yenidən başlamaları arasında qoruyun; həqiqətən yeni bir hərəkət öz açarına ehtiyac duyur.
  • Son nöqtənin icrası başladıqdan sonra, Stripe API v1 ilk sorğunun statusunu və 500 səhvləri daxil olmaqla gövdəsini saxlayır və təkrar cəhdlərdə bu saxlanmış cavabı qaytarır.
  • Eyni açarla dəyişdirilmiş parametrlər uyğunsuzluq yaradır. Validasiya uğursuzluqları və eyni vaxtda icra münaqişələri həmin cəhd üçün idempotent nəticə saxlamır və təkrarlana bilər.
  • Stripe API v1 açarlarını ən azı 24 saat saxlayır və bundan sonra onları budaq edə bilər. Həll olunmamış şəbəkə təkrar cəhdlərini ilk 24 saatla məhdudlaşdırın, sonra dayandırın və əməliyyatı təkrarlamadan əvvəl uzlaşdırın.
  • Keşlənmiş 500 əlaqə bərpa olunduqdan sonra da təkrar oynatmağa davam edə bilər. Orijinal əməliyyat yan təsirlərə səbəb ola bilər; onun nəticəsini müəyyən etmək üçün müvafiq obyektdən, İdarə Paneli sorğusundan və veb-kancalardan istifadə edin.
  • API v2 fərqli təkrar oynatma semantikasından istifadə edir. Açar e-poçt, inventar və hər bir yerli verilənlər bazası əməliyyatı üçün universal olaraq dəqiq bir dəfə çatdırılmanı təmin etmir.

Tərcümə olunmuş transkript

Orijinal ingilis dilindəki nəqldən tərcümə edilmişdir. Mövcud audio və subtitrlər YouTube tərəfindən idarə olunur.

Vaxt aşımı ödənişinizi ləğv etdimi?

0:00 Siz vaxt aşımının ödənişinizin uğursuz olduğunu düşünürsünüz. Cavab yoxa çıxsa da, server işini tamamlaya bilər, sizin ödəniş səhifənizi qətiyyətlə heç nə göstərmədən buraxaraq. Niyə təkrar cəhd yenidən ödənişə səbəb ola bilər? Stripe bir cəhdi necə xatırlayır? Nə vaxt təkrar cəhd etməyi dayandırmalısınız? Və bir xoşagəlməz detalı yadda saxlayın. Yadda saxlanmış səhv şəbəkə problemini geridə qoyub davam edə bilər.

0:17 Buna qayıdacağıq. Bu, The Daily Diff-dir, pərdə arxasında.

İdempotentlik açarı nəyi müəyyən edir?

0:21 İdempotentlik o deməkdir ki, bir əməliyyatın təkrarlanması onu bir dəfə etməklə eyni nəzərdə tutulan təsirə malikdir. İdempotentlik açarı bir məntiqi hərəkəti işarələyir. Stripe-in API versiyası bir təkrar cəhdlərdə bu etiketi tanıyır və saxlanmış bir cavabı təkrar oynadır. Qəhvə almağı təsəvvür edin. Stripe ödəniş sorğunuzu tamamlayır və cavab evə qayıdarkən itir. Müştəri bir spinner görür. Onların bankı daha maraqlı bir şərhə malik ola bilər. Qorunmayan bir yaratma sorğusu yan təsiri təkrarlaya bilər.

Eyni açar təkrar cəhdi necə təhlükəsiz edir?

0:45 İlk cəhddən əvvəl unikal bir açar əlavə edin və təkrar cəhdlər üçün saxlayın. Əgər tətbiqiniz yenidən başlayarsa, bu açarı qeydlərinizdəki əməliyyatla birlikdə qoruyun. Stripe-in birinci versiya API-si üçün, son nöqtənin icrası başladıqdan sonra, ilk sorğunun statusu və gövdəsi saxlanılır. Eyni açar və parametrləri yenidən göndərin və Stripe saxlanmış cavabı qaytarır. Qəhvə öz yerində qalır, qəbzi yenidən səyahət edərkən.

Stripe tam olaraq nəyi saxlayır?

1:07 Stripe-in əsl ifadəsi belədir. Eyni açarla təkrar cəhdlər saxlanmış cavabı qaytarır, beş yüz səhvlər daxil olmaqla. Sənədləşmə sizin nikbin adlandırdığınız təkrar cəhd köməkçisindən daha çox iş görür. Müştəri yenidən toxunur. Tətbiqiniz bunun gözlənilən alış-verişi bərpa edib-etmədiyini və ya başqa birini başlayıb-başlatmadığını müəyyənləşdirir. Həqiqətən yeni bir qəhvə yeni bir açar alır. Hər bir şəbəkə təkrar cəhdi üçün yeni bir açar qorumanı pozur.

1:27 Eyni açarla fərqli parametrlər uyğunsuzluğa səbəb olur.

Sorğu dəyişdikdə nə baş verir?

1:30 Əgər parametrlər validasiyadan keçməzsə və ya həmin açarla başqa bir sorğu hələ də icra olunursa, Stripe həmin cəhd üçün idempotent nəticə saxlamır. Bu sorğular təkrar cəhd edilə bilər. Yarışan bir sorğu münaqişəyə səbəb olur. Bunlar birinci versiya qaydalarıdır. İkinci versiya fərqli davranır. Bir başlıq sisteminizdə dəqiq bir dəfə çatdırılmaya zəmanət verə bilməz. E-poçt, inventar və verilənlər bazanızın hər biri uğursuzluq idarəetməsinə ehtiyac duyur.

1:52 Açar əməliyyatı sənədləşdirilmiş əhatə dairəsində qoruyur. Stripe birinci versiya açarlarını ən azı iyirmi dörd saat saxlayır və bundan sonra onları budaq edə bilər.

Yadda saxlanmış nəticəni təkrarlamaq nə qədər müddət təhlükəsizdir?

1:59 Budaqlanmış açar yeni bir sorğu icra edə bilər. Həll olunmamış təkrar cəhdləri ilk gün ərzində saxlayın. Bundan sonra dayandırın və orijinal nəticəni uzlaşdırın. Serverə nəfəs almaq üçün eksponensial geri çəkilmə və titrəmə istifadə edin. Əks halda təkrar cəhdlər yanan bir qəhvə dükanının xaricində bir növbə yaradır. Stripe-in kitabxanaları təkrar cəhdləri idarə edir, lakin kitabxananızın defolt parametrlərini yoxlayın. Həmin yapışqan səhv çətinlikdir.

Niyə yadda saxlanmış səhv geri gəlməyə davam edə bilər?

2:20 Keşlənmiş beş yüz cavab əlaqə bərpa olunduqdan sonra da təkrar oynatmağa davam edir. Orijinal əməliyyat yan təsirlərə səbəb ola bilər. Nəticəsini obyektlər, İdarə Paneli və veb-kancalar istifadə edərək həll edin. Yeni bir açar hərəkəti təkrarlaya bilər. Əgər bunu məndən eşitməkdənsə oxumağa üstünlük verirsinizsə, fərq hər səhər elektron poçtunuza düşür, daily diff dot dev saytında pulsuzdur, link aşağıdadır.

Bu müqavilə ilə təkrar cəhd düyməsini göndərərdimmi?

2:39 Hökm, pərdə arxasında. Göndərin. Mən sabit açarları məhdud təkrar cəhdlər və uzlaşma ilə göndərərdim, beləliklə, müştərilər sizin paylanmış sistemlər təhsilinizə maliyyə ayırmadan qəhvə alırlar. Və bugünkü fərq bu qədər. Mən Axrisidən Nikoyam. Məsuliyyətlə birləşdirin.

Mənbələr

  1. Idempotent requestsStripe Docs
  2. Designing robust and predictable APIs with idempotencyStripe Engineering — Brandur Leach
  3. Advanced error handlingStripe Docs
  4. HTTP Semantics — RFC 9110 §9.2.2 Idempotent MethodsIETF / RFC Editor

Əlaqəli videolar