API hatalarını uçtan uca nasıl tasarlarsınız? Backend'den dönen hataları frontend'de kullanıcıya nasıl gösterirsiniz?
Cevap
İyi bir hata tasarımı üç şey sağlar: tutarlı bir hata formatı, doğru HTTP durum kodu ve makinenin okuyabileceği bir hata kodu. Böylece frontend her hata için mesaj metnini parse etmek zorunda kalmaz ve geliştirici hatayı loglarda kolayca bulur.
Standart format: RFC 9457 (Problem Details)
{
"type": "https://api.ornek.com/errors/insufficient-stock",
"title": "Yetersiz stok",
"status": 409,
"code": "INSUFFICIENT_STOCK",
"detail": "Seçtiğiniz üründen sadece 2 adet kaldı.",
"errors": { "quantity": ["En fazla 2 olabilir"] },
"requestId": "a1b2c3"
}Backend kuralları
- 4xx istemci hatası, 5xx sunucu hatasıdır; validasyon için 400/422, yetki için 401/403, çakışma için 409.
- Tüm hatalar tek bir global error handler'dan geçer; beklenmeyen hatalarda stack trace kullanıcıya gönderilmez, sadece loglanır.
- Her yanıtta
requestIdolur; kullanıcı destek ekibine bunu iletirse log anında bulunur.
app.use((err, req, res, next) => {
const status = err.status ?? 500;
if (status >= 500) logger.error({ err, reqId: req.id });
res.status(status).type("application/problem+json").json({
title: status >= 500 ? "Beklenmeyen bir hata oluştu" : err.message,
status, code: err.code ?? "INTERNAL", errors: err.fieldErrors, requestId: req.id,
});
});Frontend kuralları
- Alan hataları (
errors) formdaki ilgili input'un altında gösterilir. - İş kuralı hataları (
code) için kullanıcı dostu ve çevrilebilir mesaj:INSUFFICIENT_STOCK-> "Stok yetersiz". - 401 -> token yenile veya login'e yönlendir; 403 -> "yetkiniz yok" ekranı; 404 -> bulunamadı sayfası.
- 5xx ve ağ hataları -> genel mesaj + "Tekrar dene" butonu; GET istekleri için otomatik retry (exponential backoff), POST için retry sadece idempotency key varsa.
- React'te beklenmeyen render hataları Error Boundary ile, API hataları ise veri katmanında (TanStack Query
onError) merkezi ele alınır.
İlgili Web Mimarisi soruları
- SSR, SSG ve CSR arasındaki farklar nelerdir?
- Monorepo nedir? Avantajları, dezavantajları ve araçları nelerdir?
- MVC mimarisi nedir? Modern web uygulamalarında nasıl karşılık bulur?
- Bir kullanıcı girişinin uçtan uca akışını (frontend'den veritabanına) anlatın.
- Büyük dosya yükleme akışını nasıl tasarlarsınız? Presigned URL nedir?
- Backend for Frontend (BFF) deseni nedir, ne zaman kullanılır?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.