Uygulama katmanı
Doğrulama ve ProblemDetails
Hataları tutarlı, makine tarafından okunabilir ve güvenli biçimde döndürmek.
Kavramı anlayalım
Doğrulamanın iki türü vardır. Biçim doğrulaması girdinin şeklini kontrol eder: zorunlu mu, uzunluğu uygun mu, e-posta biçiminde mi. Bu iş veri açıklamaları ([Required], [MaxLength], [EmailAddress]) ile model binding sırasında yapılır ve [ApiController] hatalı isteği otomatik olarak 400 ile döndürür. İş doğrulaması ise kuralları kontrol eder: bu slug zaten kullanılıyor mu, bu kullanıcı bu kaynağın sahibi mi. Bu kontroller servis katmanında yapılır.
Hata yanıtları için RFC 9457 ‘Problem Details’ standardı kullanılır: type, title, status, detail ve isteğe bağlı ek alanlar. Doğrulama hatalarında ‘errors’ nesnesi alan bazlı mesajları taşır; istemci bunları ilgili form alanlarının yanında gösterebilir. traceId, kullanıcı bir hata bildirdiğinde ilgili log kaydını bulmayı sağlar.
Durum kodu doğru seçilmelidir: biçim hatası 400, çakışma (aynı slug) 409, bulunamayan kaynak 404. Hata mesajları kullanıcıya ne yapacağını söylemeli ama iç ayrıntıyı (SQL, yığın izi, dosya yolu) asla sızdırmamalıdır.
Tutarlı hata biçimi istemci kodunu basitleştirir ve destek sürecini hızlandırır.
Her hatayı 200 ve { success: false } ile döndürmek; önbellekler, izleme araçları ve istemciler bunu başarı sanır.
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.
İletişim formu gönderiliyor ama e-posta alanına ‘ayse-at-ornek’ yazılmış.
Aynı konu. Üç farklı derinlik.
public sealed record CreatePost(
[Required, MaxLength(160)] string Title,
[Required, RegularExpression("^[a-z0-9-]+$")] string Slug);Biçim kuralları istek modelinin üzerinde durur.
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 yazı oluşturma isteği gelir: başlık boş ve slug başka bir yazıda kullanılıyor. Hangi hata önce, hangi durum koduyla dönmeli?
Çözümü ve açıklamasını göster
Önce biçim doğrulaması çalışır: boş başlık → 400 (ValidationProblemDetails, errors.Title).
İstek controller’a ulaşmadığı için slug çakışması kontrol edilmez.
Başlık düzeltilip tekrar gönderilince slug çakışması → 409.Biçim doğrulaması model binding sırasında, iş doğrulaması servis içinde yapılır; sıralı olduklarından ilk hata yanıtı belirler.