Dayanıklılık ve gözlem
Hata yönetimi: istisnadan anlamlı yanıta
Beklenen hatalar ile beklenmeyenleri ayırmak ve kullanıcıya iç ayrıntı sızdırmadan yanıt vermek.
Kavramı anlayalım
Her hata aynı değildir. Beklenen hatalar iş akışının parçasıdır: kayıt bulunamadı, slug zaten kullanılıyor, yetki yok. Bunlar istisna fırlatmadan, uygun durum koduyla (404, 409, 403) döndürülmelidir. Beklenmeyen hatalar ise programın öngörmediği durumlardır: veritabanına ulaşılamaması, null referans, bir bağımlılığın çökmesi. Bunlar en dıştaki hata yakalayıcıya kadar yükselmelidir.
Her katmanda try/catch yazmak çoğunlukla zararlıdır: istisnayı yakalayıp yutan veya yalnız loglayıp devam eden kod, hatanın gerçek yerini gizler ve tutarsız durum bırakır. Bir istisnayı yalnız onunla anlamlı bir şey yapabiliyorsan yakala: yeniden dene, alternatif kaynağa geç veya daha anlamlı bir hataya çevir.
ASP.NET Core’da UseExceptionHandler ve IExceptionHandler, beklenmeyen istisnaları merkezi olarak yakalar, kaydeder ve istemciye ProblemDetails döndürür. Üretimde yığın izi, SQL metni veya bağlantı dizesi asla yanıta konmaz; bunun yerine bir traceId verilir. Simülatördeki ‘Veritabanı hatası’ senaryosu bu akışı gösterir.
İyi hata yönetimi hem kullanıcıyı hem geliştiriciyi doğru bilgiyle buluşturur.
catch (Exception) { } ile hatayı yutmak veya ex.ToString()’i istemciye döndürmek.
Bir mektubun şehirdeki yolculuğu
İsteği bir mektup, sunucuyu bir şehir gibi düşün. Senaryo seç, oynat ve mektubun hangi kapıdan geçip nerede durdurulduğunu izle.
Normal bir yazı isteği yola çıkıyor.
Aynı konu. Üç farklı derinlik.
// Beklenen durum: istisna değil, sonuç
var post = await posts.GetPublishedAsync(slug, ct);
return post is null ? NotFound() : Ok(post);Bulunamamak bir hata durumu değil, olası bir sonuçtur.
Bu sayfa gerçek bir sunucuya veya veritabanına bağlanmaz. Kod örnekleri .NET 8, Next.js ve SQL Server için temsilîdir; süreler simülasyondaki örnek değerlerdir, ölçüm değildir. Örnekleri yalnız kendi geliştirme ortamında dene; gerçek bağlantı dizesi, token veya parola paylaşma.
Önce kendin dene.
Bir müşteri ‘sayfa hata verdi’ diye ekran görüntüsü gönderiyor; görüntüde yalnız ‘traceId: 00-4bf92f…’ var. Sorunu nasıl bulursun?
Çözümü ve açıklamasını göster
Log sisteminde TraceId = 00-4bf92f… ile ara:
hata kaydı, istisna türü, yığın izi, isteğin yolu ve süresi.
Dağıtık izleme varsa aynı kimlikle Next.js ve SQL adımları da görünür.traceId, kullanıcıya iç ayrıntı göstermeden destek talebini teknik kayda bağlar.