Yanıtın dönüşü ve yayın
Bitirme: bir isteği baştan sona izle
Öğrendiklerini tek bir senaryoda birleştir: bir özelliği tasarla, her katmandaki kararlarını gerekçelendir.
Kavramı anlayalım
Bu bitirme çalışmasında küçük ama gerçekçi bir özellik tasarlayacaksın: blog yazılarına ‘beğen’ butonu. Ziyaretçiler bir yazıyı beğenebilir, beğeni sayısı yazı sayfasında görünür, aynı kişi aynı yazıyı tekrar tekrar beğenemez. Amaç kod yazmaktan çok, isteğin her durağında doğru kararı verebilmektir.
Her katman için kendine şu soruları sor. Tarayıcı: buton bir istemci bileşeni mi, beğeni sayısı sunucuda mı üretilir, istek sürerken arayüz ne gösterir? Kenar ve frontend: bu POST isteği hangi yoldan gider, CSRF’e karşı ne yapılır? API: hangi metot ve durum kodu, hangi doğrulama, hangi hız sınırı? Kimlik: anonim ziyaretçi nasıl tekilleştirilir? Veri: tablo yapısı ne, aynı kişinin iki kez beğenmesi veritabanı düzeyinde nasıl engellenir, sayım nasıl hızlı yapılır? Önbellek: beğeni sayısı önbellekteyse nasıl güncellenir? Dayanıklılık: aynı anda gelen iki beğeni doğru sayılır mı, bir hata olduğunda kullanıcı ne görür?
Cevaplarını yazdıktan sonra simülatördeki senaryoları tekrar oynat ve kendi tasarımının her adımda nereye denk geldiğini işaretle. İyi bir tasarım, her katmanın kendi işini yaptığı ve hiçbir katmanın bir başkasının güvenliğini varsaymadığı tasarımdır.
Bilgi, tek tek kavramlarda değil, onları bir arada doğru kullanabilmekte ortaya çıkar.
Tekilleştirmeyi yalnız arayüzde (butonu devre dışı bırakarak) yapmak.
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.
Bir yazıya tıkladın. Tarayıcı ‘Bana bu yazıyı gönder’ diyen bir mektup yazıyor.
Aynı konu. Üç farklı derinlik.
POST /api/posts/ilk-yazi/likes
→ 201 Created { "likes": 43 } (ilk beğeni)
→ 200 OK { "likes": 43 } (zaten beğenmiş: idempotent)Aynı isteğin tekrarı durumu değiştirmez; tekrar deneme güvenlidir.
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.
Tasarımını tek paragrafta özetle: isteğin yolu, her katmandaki koruma ve veritabanında tekilleştirme. Ardından ‘bir bot dakikada 10.000 beğeni gönderirse ne olur?’ sorusunu yanıtla.
Çözümü ve açıklamasını göster
Örnek cevap:
Tarayıcıdaki istemci bileşeni aynı kökendeki route handler’a POST eder (Origin kontrolü);
API IP başına hız sınırı uygular (ör. dakikada 30), girdiyi doğrular,
PostLikes tablosundaki birleşik birincil anahtar tekrarı engeller, sayaç önbellekte güncellenir.
Bot: çoğu istek hız sınırında 429 alır; geçenler aynı ziyaretçi kimliğiyse kısıta takılır;
farklı kimlikler üretiyorsa ek sinyaller (CAPTCHA eşiği, kimliği doğrulanmış beğeni) gerekir.Hiçbir katman tek başına yeterli değildir; savunma ve doğruluk katmanların birlikte çalışmasından gelir.