Düymə fırlanır, vərəq xəta göstərir və on dəqiqə doldurduğunuz forma yox olur. Bilmədiyiniz şey yazının bağlantı kəsilmişdən əvvəl baş verib-vermədiyidir. Bu bilinməyəni uğursuzluq kimi qəbul etmək təkrar şərhlərin, ikiqat sifarişlərin və təkrarlanan dəstək biletlərinin yaranma üsuludur.

Sabit ardıcıllıqla bərpa edin: mətni saxlayın, nəticəni tapın və yalnız bundan sonra ikinci göndərişə icazə verilib-verilmədiyini qərar verin.

Mətnlə və vaxt damğası ilə başlayın

Heç nəyə toxunmadan əvvəl məzmunu səhifədən kopyalayın, o cümlədən brauzerin hələ sahədə saxladığı qaralama da daxil olmaqla. Vaxtı, olduğunuz səhifəni və etdiyiniz əməliyyatı yazın, çünki bu üç təfərrüat araşdırmanın qalan hissəsini mümkün edir. Vərəq hələ açıqdırsa, şəbəkə qeydini oxuyana qədər onu açıq saxlayın. Mətni saxlamaq heç bir şeyə başa gəlmir, onu itirmək isə bütün tapşırığa başa gəlir.

Sonra həqiqətən müşahidə edə biləcəyiniz iki nasazlıq formasını ayırın. Sorğunun ortasında qırılan bağlantı və xəta ilə cavab verən server şəbəkə panelində fərqli görünür və yalnız ikincisi tətbiqin qərarı barədə sizə nəsə deyir.

Nəticəni tətbiqin öz görünüşündə axtarın

Nəticəni göstərəcək oxu görünüşünü yenidən yükləyin: şərhlər siyahısı, sifariş tarixçəsi, bilet növbəsi və ya redaktə etdiyiniz qeyd. Ən son girişə deyil, hesaba, təyinat yerinə, vaxta və məzmuna uyğunlaşdırın, çünki sizdən sonra başqası yaza bilərdi. Fon tapşırığı üçün yeni əməliyyatı bağlantı testi kimi yaratmaq əvəzinə mövcud istinadı və onun statusunu axtarın.

Nəticə oradadırsa, işiniz bitib və xəta yazıya deyil, cavab yoluna aiddir. Yoxdursa, tətbiqin onu hələ qeyd etməməsi ehtimalını saxlayın: növbədə gözləyən tapşırıq, gecikmiş oxu görünüşü və ya geridə qalan replika uğurlu yazını bir müddət gizlədə bilər.

Nəticə çıxarmazdan əvvəl ona müəyyən ikinci baxış verin və hər iki yoxlamanın vaxtını qeyd edin. İyirmi saniyə fasilə ilə iki yoxlama, on dəqiqə fasilə ilə iki yoxlamadan qat-qat zəif sübutdur.

İkinci göndərişin təhlükəsiz olduğuna qərar verin

Cavab səbrinizdən deyil, əməliyyatdan asılıdır. HTTP eyni nəzərdə tutulan effektlə təkrarlana bilən metodları bilinməyənlərdən ayırır və ikinci növün avtomatik təkrarlanmasının əleyhinə məsləhət verir, məgər semantika buna icazə verdiyi bilinirsə. Şərh yaratmaq, sifariş vermək və ödəniş göndərmək adətən ikinci qrupdadır, buna görə də uğurlu görünən ikinci klik birincisi barədə heç nə demir.

Əgər müştərini siz saxlayırsınızsa, API-nin sənədləşdirdiyi təkrar və ya idempotentlik mexanizmindən istifadə edin və hər cəhd üçün yeni açar yaratmaq əvəzinə onu eyni məntiqi əməliyyata bağlayın. İzləmə üçün istifadə olunan sorğu identifikatoru, server onu belə qəbul etmirsə, dublikatın qarşısını alma açarı deyil.

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

Açar yalnız xidmət onu əməliyyata qarşı saxlayır və təkrar zamanı orijinal nəticəni qaytarırsa kömək edir. İstehsalda ona güvənməzdən əvvəl bu davranışı sınaq son nöqtəsində yoxlayın.

Yenidən nəyəsə basmadan əvvəl sübut toplayın

Xətanın ekran görüntüsü əvəzinə şəbəkə qeydini saxlayın. Sorğu metodu, URL, cavab və ya vaxt aşımı və bunun baş verdiyi vaxt inzibatçının tətbiq qeydləri ilə əlaqələndirə biləcəyi məlumatdır. Qeydi yalnız sonra kopyadan kukiləri, avtorizasiya başlıqlarını və hər hansı şəxsi məzmunu silsəniz, əmr kimi ixrac edin və ya kopyalayın. Öz sessiyanızı toxunulmaz saxlayın və heç vaxt tutulmuş, etimad məlumatı daşıyan sorğunu qısa yol kimi təkrar göndərməyin.

Xidmət sahibinə bir konkret sual verin: bu məzmunla bu vaxtda əməliyyat uğurlu oldumu və onun üçün istinad varmı? Bu sualın cavabı var, "sayt pozuldu" sualının isə cavabı yoxdur.

Bu məşqin məqsədi əməliyyatın düz bir dəfə baş verdiyini müəyyən etməkdir. İmtina edə biləcəyiniz xəta mesajı etibar edə biləcəyiniz qeydlə eyni şey deyil və başqa bir şey göndərməzdən əvvəl sizə ikincisi lazımdır.

Əlaqəli məqalələr