Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Global hata yönetimi: Tüm hataları tek merkezde yakalamak
Uygulamanın herhangi bir yerinde oluşan beklenmedik hataları tek bir merkezde yakalamayı işliyoruz: try-catch dağınıklığından kurtulmak, exception middleware kurmak ve kullanıcıya düzgün, güvenli cevap dönmek.
Loglama: ILogger, Serilog ve yapılandırılmış (structured) loglama
Loglamayı işliyoruz: ILogger'ın temelleri, log seviyeleri, düz metin ile yapılandırılmış loglama arasındaki fark ve Serilog'un neden bu işi ciddi projelerde çok daha güçlü hale getirdiği.
Configuration ve Options pattern: appsettings katmanları ve ayarları koddan ayırmak
Ayarları koddan ayırmayı işliyoruz: appsettings dosyaları ve ortam katmanları, bağlantı dizelerini güvenli yönetmek, Options pattern ile ayarları güçlü tiplerle okumak ve hassas verileri koddan uzak tutmak.
Async/await: API'de doğru asenkron kullanım
Async/await'in gerçekte ne yaptığını işliyoruz: senkron ve asenkron farkı, Task nedir, bir API'nin neden asenkron olması gerektiği, ölçeklenebilirliğe etkisi ve sık yapılan hatalar.
Pagination, filtering ve sorting: Büyük listeleri verimli döndürmek
Binlerce kayıtlı bir listeyi verimli döndürmeyi işliyoruz: sayfalama (pagination), filtreleme ve sıralama; IQueryable'ın tembel doğası, Skip/Take mantığı ve sorgunun veritabanında çalışmasını sağlamak.
API versioning: Eski istemcileri kırmadan API'yi geliştirmek
API'yi zamanla geliştirirken eski istemcileri nasıl kırmayacağımızı işliyoruz: kırıcı değişiklik nedir, versiyonlama neden gerekli, URL/header/query yöntemleri ve .NET'te versiyonlamayı kurmak.
Authentication ve authorization: Kimlik doğrulama ile yetkilendirme arasındaki fark
Çoğu geliştiricinin karıştırdığı iki kavramı ayırıyoruz: authentication (sen kimsin?) ile authorization (neye iznin var?). Aradaki fark, doğru sıra ve .NET'te bu ikisinin nasıl konumlandığı.
JWT ile kimlik doğrulama: Token nasıl üretilir, nasıl doğrulanır?
JWT ile kimlik doğrulamayı işliyoruz: token nedir, üç parçası ne anlama gelir, neden imzalanır, sunucu neden durum tutmaz ve .NET'te token üretip doğrulamayı adım adım kuruyoruz.
Role ve policy tabanlı yetkilendirme: Kime neyin izinli olduğunu belirlemek
Yetkilendirmeyi derinleştiriyoruz: rol tabanlı yetki nedir, nerede yetersiz kalır, policy ve claim tabanlı yaklaşım nasıl daha esnek çözüm sunar ve .NET'te bunları nasıl kurarız?
CORS, rate limiting ve güvenlik başlıkları: API'yi dış tehditlere karşı sağlamlaştırmak
API'yi kötüye kullanıma karşı sağlamlaştıran üç konuyu işliyoruz: CORS ile hangi sitelerin erişebileceğini kontrol etmek, rate limiting ile isteği sınırlamak ve güvenlik başlıklarıyla temel korumayı eklemek.
Swagger/OpenAPI ile dokümantasyon ve Scalar: API'ni kendi kendini anlatır hale getir
API dokümantasyonunu işliyoruz: OpenAPI nedir, neden otomatik dokümantasyon önemli, .NET 9'da OpenAPI desteği, Swagger UI ve modern bir alternatif olan Scalar ile interaktif dokümantasyon kurmak.
Unit test: xUnit ve Moq ile kodun parçalarını izole test etmek
Unit test'i işliyoruz: bir birimi izole test etmek ne demek, neden test yazarız, xUnit ile test yapısı, Moq ile bağımlılıkları taklit etmek ve iyi test yazmanın temel ilkeleri.