Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
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.
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ığı.
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.
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.
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.
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.
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.
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.
Dependency injection derinlemesine: Singleton, Scoped ve Transient lifetime'lar
Dependency injection'ın kalbindeki lifetime kavramını işliyoruz. Singleton, scoped ve transient arasındaki fark, hangisinin ne zaman kullanılacağı ve yanlış seçimin yol açtığı sinsi hatalar.
DTO-entity dönüşümü: Elle yazmak mı, AutoMapper mı?
Entity ile DTO arasındaki dönüşümü konuşuyoruz. Elle mapping'in artıları, AutoMapper'ın ne zaman kolaylık ne zaman gizli maliyet olduğu ve projende hangisini seçmen gerektiğine dair pratik bir bakış.
Repository pattern gerçekten gerekli mi? Servis katmanını konuşalım
Controller'dan doğrudan DbContext kullanmak yerine araya katman koymayı konuşuyoruz. Servis katmanı ne işe yarar, repository pattern gerçekten gerekli mi, ne zaman değer, ne zaman fazladan yük?
Entity Framework Core'a giriş: DbContext ve ilk migration
Verimizi gerçek bir veritabanında saklamaya başlıyoruz. EF Core nedir, DbContext neyi temsil eder, DbSet ile tablolar nasıl tanımlanır ve ilk migration ile veritabanı nasıl oluşturulur, adım adım.