Export bitmeden sekme kapandı
Müşteri, dışa aktarma devam ederken tarayıcıyı kapatıyor. Döndüğünde aynı buton var ama önceki işe dair açıklama yok. Yeniden başlatıyor. Backend aynı işi tekrar yapıyor olabilir; müşteri ise hangi isteğin kullanılabilir dosya üreteceğini bilmiyor.
HTTP 202 Accepted, isteğin işlenmek üzere kabul edildiğini söyler; başarıyla tamamlandığını değil. MDN bu ayrımı açıklıyor. Ürünün kalan hikâyeyi anlatması gerekir: Ne kabul edildi, durum nerede tutuluyor ve sonuç nasıl öğrenilecek?
İşi kuyruğa almak altyapı kararıdır. İlk istek bittikten sonra da anlaşılır kılmak ürünün sorumluluğudur.
İşe geri bulunabilecek bir kimlik ver
Varsayımsal bir katalog export'unda sahibi ve kapsamı belirli, kalıcı bir iş kaydı oluşturulabilir. Uygulamaya dönüldüğünde bu kayıt bulunmalı; ilk sekmenin onu hatırlaması gerekmemeli. Bekliyor, çalışıyor, tamamlandı, başarısız ve iptal edildi durumları işin dilinde ayrılmalı.
Sonucun belirli bir yeri olmalı. Tamamlanan export, geçerlilik koşulu görünen bir dosya sunabilir. Başarısız iş ise yeniden deneme kararına yetecek açıklamayı korumalı. Hiçbiri çoktan kaybolmuş geçici bir bildirime bağlı olmamalı.
Yetkiler burada da geçerlidir. İş kimliğini bilmek, başka kurumun ilerlemesini, kaynak verisini veya çıktısını görme hakkı vermemeli. Durum endpoint'i ve indirme yolu aynı sahiplik sınırının parçalarıdır.
Süslenmiş ilerleme yerine gözlenen durumu göster
İlerleme çubuğu sistemin gerçekten gözleyebildiği bir şeyi temsil etmeli. Toplam iş bilinmiyorsa yüzde uydurmak yerine mevcut aşama ve anlamlı durum gösterilebilir. Kayıtların işlenmesi ile indirilecek arşivin hazırlanması farklı aşamalardır; son aşamanın kolayca sayılabilen bir birimi olmayabilir.
Mesaj, ne yapıldığını ve müşterinin beklemesi gerekip gerekmediğini açıklamalı. Sayfadan ayrılmak güvenliyse söylenmeli. Ek bilgi gerekiyorsa neyin eksik olduğu gösterilmeli ve tamamlanan çalışma korunmalı.
Worker sağlıklı olsa da sessizlik hata gibi görünebilir. Hareketli animasyon ise durmuş bir worker'ı gizleyebilir. Bu durumları ayıran operasyon sinyalleri seçilmeli. Beklenen durum değişmiyorsa müşteriye sade bir açıklama sunulmalı.
İşi tekrarlarken sonucunu çoğaltma
Retry butonu sadece aynı fonksiyonu yeniden çağırmaz; bir iş kararı verir. Export için yinelenen hesaplama tolere edilebilir. Davetiye gönderen veya sipariş değiştiren işlerde tamamlanan etkilerin tekrarı ciddi karışıklık yaratır.
Hangi parçaların güvenle tekrarlanabileceği, hangilerinin tamamlanma kaydı gerektirdiği belirlenmeli. Denemeler temel işten ayırt edilmeli ki destek ekibi ne olduğunu anlatabilsin. Yeni tıklamanın başka görev mi açtığını, eski görevi mi sürdürdüğünü müşterinin tahmin etmesi gerekmez.
İptal de dürüst bir açıklama ister. Durdurma talebi geri alınamayan işlemden sonra gelebilir. Sistem yalnızca kalan işleri önleyebiliyorsa bunu söylemeli. İptal edildi etiketi, gönderilen mesajların veya uygulanmış değişikliklerin geri alındığı anlamına gelmemeli.
Bu hafta test sırasında tarayıcıyı kapat
Müşteri için önemli bir arka plan işi seçelim. Başlatıp sayfadan ayrılalım, başka yerde giriş yapıp durumunu tekrar bulalım. Sonra worker'ı durduralım, kısmi sonuçtan sonra retry yapalım ve tamamlanmaya yakın iptal isteyelim.
Her geçişte müşteriye gösterilen açıklamayı, kalıcı kaydı ve dışarıdaki gerçek etkiyi karşılaştıralım. Destek ekibi console çıktısı istemeden doğru denemeyi bulabiliyor mu, kontrol edelim. İlk spinner, sekme ve bağlantı ortadan kalktıktan sonra bile sonucu anlaşılabiliyorsa arka plan işi ürünün gerçek bir parçası hâline gelmiştir.
