ASP.NET Core ile kurumsal web yazılımı geliştirmek, çoğu zaman bir kurumun iç süreçlerini yöneten, kullanıcı rolleri ve yetkileri olan, bir veritabanıyla çalışan bir uygulama kurmak demektir. ASP.NET Core, C# diliyle yazılan, açık kaynaklı ve platformlar arası bir web çatısıdır (framework). Biz de kurumsal web yazılımlarında ve mobil uygulamaların arka uçlarında kullandığımız teknolojilerden biri olarak onu tercih ediyoruz. Bu yazıda neden tercih edildiğini, nelerin abartılmaması gerektiğini ve MVC ile API ayrımını anlatıyoruz.
ASP.NET Core kurumsal yazılımda neden tercih edilir?
Tek bir nedeni yoktur; birkaç özellik bir araya geldiğinde kurumsal işler için uygun bir zemin oluşur:
- C# derlenen ve tür denetimi güçlü bir dildir; birçok hata yazılım çalışmadan, derleme aşamasında yakalanır.
- Web sayfaları, veri servisleri (API), arka plan işleri ve gerçek zamanlı bildirimler aynı çatı altında yazılabilir.
- Kimlik doğrulama, yetkilendirme ve veri erişimi için olgun, hazır bileşenler vardır.
- SQL Server ile doğal uyum içinde çalışır; MySQL gibi diğer veritabanları da desteklenir.
- Windows'ta da Linux'ta da çalışır, bu da barındırma tercihinde esneklik sağlar.
- Düzenli aralıklarla yeni sürümler çıkar ve bunların bir kısmı uzun süreli destek (LTS) sürümü olarak işaretlenir.
Bunlar ASP.NET Core'u her işte zorunlu kılmaz; yalnızca kurumsal ihtiyaçlarda sık tercih edilmesinin gerekçelerini özetler.
Bir de günlük geliştirme tarafı vardır: çatı, bağımlılık yönetimi (dependency injection), yapılandırma ve günlükleme (logging) gibi ihtiyaçları yerleşik olarak sunar. Bu, ekibin her projede aynı altyapıyı sıfırdan kurmasını önler ve kodun test edilmesini kolaylaştırır. Kurumsal yazılımlar uzun süre geliştirilip bakıldığı için bu düzen zaman içinde daha da önem kazanır.
Performans: gerçekten önemli olan nedir?
Derlenen bir dil, asenkron (aynı anda birçok isteği bekletmeden işleyen) programlama modeli ve hafif sunucu bileşeni sayesinde ASP.NET Core uygulamaları genellikle düşük kaynak kullanımıyla çok sayıda isteği karşılayabilir. Bu, özellikle yoğun kullanılan API'lerde fark yaratır.
Yine de kurumsal uygulamalarda yavaşlığın büyük bölümü çatıdan değil, tasarımdan gelir: eksik veritabanı indeksleri, gereksiz tekrarlanan sorgular, büyük veriyi tek seferde ekrana çekmek. Hızlı bir çatı, kötü tasarlanmış bir uygulamayı hızlı yapmaz. Bu yüzden performans, çatı seçiminden çok veri modelinin ve sorguların doğru kurulmasıyla ilgilidir.
Gerçek hayattaki iyileştirmeler genellikle şu başlıklardan gelir: sık okunan verinin önbelleğe alınması, büyük listelerin sayfalanması, ağır işlerin arka plana taşınması ve veritabanı sorgularının ölçülerek düzeltilmesi. Yük altında davranışı yayından önce denemek, performans beklentisini tahmin olmaktan çıkarıp ölçüme dayandırır.
Güvenlik özellikleri: çatı ne sağlar, ne sağlamaz?
ASP.NET Core güvenli yazılımı kolaylaştıran birçok hazır özellik sunar:
- Kimlik doğrulama ve rol ya da politika tabanlı yetkilendirme altyapısı (ASP.NET Core Identity dahil).
- Form sahteciliğine (CSRF) karşı koruma belirteçleri.
- Sayfa çıktısının varsayılan olarak HTML kodlanması; bu, betik enjeksiyonu (XSS) riskini azaltır.
- Entity Framework Core ile yazılan sorguların parametreli çalışması; bu, SQL enjeksiyonu riskini azaltır.
- HTTPS yönlendirmesi ve güvenli başlık ayarları için hazır ara katmanlar.
- Çerez ve anahtar gibi hassas verileri korumak için veri koruma bileşeni.
Bunlar araçtır, kendiliğinden güvenlik değildir. Yetki kuralları yanlış yazılırsa, paketler güncellenmezse ya da gizli anahtarlar kodun içine gömülürse çatı tek başına kurtaramaz. Güvenlik bir tasarım ve bakım disiplinidir; mutlak güvenlik vaadi etmiyoruz, ama doğru kullanıldığında bu özellikler riski belirgin biçimde azaltır.
Pratikte bu disiplin şu alışkanlıklardan oluşur: kullanılan paketlerin düzenli güncellenmesi, parolaların ve bağlantı bilgilerinin kodun dışında saklanması, kullanıcıya yalnızca ihtiyaç duyduğu yetkinin verilmesi, önemli işlemlerin kayıt altına alınması ve yedeklerin gerçekten geri yüklenebildiğinin denenmesi. Çatının özellikleri bu alışkanlıkların yerini tutmaz, onlarla birlikte anlam kazanır.
SQL Server ve MySQL ile veritabanı entegrasyonu
ASP.NET Core uygulamaları veritabanıyla çoğunlukla Entity Framework Core üzerinden konuşur. Bu bileşen, tabloları C# nesneleriyle eşleştirir ve veritabanı şemasındaki değişiklikleri sürüm sürüm (migration) yönetmeyi sağlar. SQL Server için olgun bir destek vardır; MySQL için de uygun sağlayıcılarla çalışılabilir.
Kurumsal uygulamalarda veri bütünlüğü kritiktir. Bir siparişin onaylanması gibi birden fazla tablonun birlikte değiştiği işlemler, ya hep birlikte tamamlanacak ya da hiç yapılmamış sayılacak şekilde işlem (transaction) içinde yürütülür. Raporlama gibi ağır sorgular gerektiğinde, hazır sorgu aracının yanında doğrudan SQL yazmak da mümkündür; böylece kolaylık ile denetim arasında denge kurulabilir.
Hangi veritabanının seçileceğini birkaç şey belirler: kurumda hâlihazırda bir SQL Server altyapısının bulunup bulunmadığı, raporlama ve yedekleme alışkanlıkları, ekibin bilgisi ve lisanslama koşulları. SQL Server'ın sürümlerinin lisans koşulları farklıdır; bu konuda güncel koşulları sağlayıcının belgelerinden kontrol edin. Kurumsal sistemlerin diğer yazılımlarla veri alışverişi gerekiyorsa web yazılımı ve kurumsal sistemler hizmetimiz bu bağlantıları da kapsar.
Windows ve Linux'ta barındırma, sürüm ve destek
ASP.NET Core uygulaması kendi sunucu bileşeni üzerinde çalışır. Windows sunucularda genellikle IIS arkasında, Linux sunucularda ise bir ters vekil sunucu (reverse proxy) arkasında yayımlanır; kapsayıcı (Docker) ile paketlemek de mümkündür. Hangisinin uygun olduğunu mevcut sunucu altyapınız, bakımı yapacak ekibin alışkanlığı ve güvenlik politikalarınız belirler.
Barındırma kararı yalnızca yayın ortamıyla sınırlı değildir. Geliştirme, test ve canlı ortamların ayrı tutulması, canlı veritabanının düzenli yedeklenmesi, hata kayıtlarının izlenmesi ve yayın sırasında geri dönüş planının hazır olması kurumsal bir yazılımın olağan gereklilikleridir. Sunucuyu kimin yöneteceğini, yani bu işlerin kimde olacağını proje başında netleştirin.
Barındırma kararında kontrol edilmesi gereken pratik nokta, kullanılacak .NET sürümünü barındırma ortamının destekleyip desteklemediğidir. Bazı paylaşımlı barındırma paketleri belirli sürümlerle sınırlı olabilir. Ayrıca her sürümün bir destek takvimi vardır; uzun süreli destek sürümleri daha uzun süre güvenlik güncellemesi alır. Proje başlarken güncel takvime bakıp destek süresi uzun bir sürümü seçmek, ileride yükseltme yükünü hafifletir.
MVC mi API mı? İkisi arasındaki fark
MVC (Model-View-Controller), sayfaları sunucuda üreten bir yaklaşımdır. Kullanıcının tarayıcıda gördüğü HTML sunucuda hazırlanır; yönetim panelleri ve iç portallar için sık kullanılır. Web API ise ekran üretmez, JSON gibi biçimlerde veri sunar; bu veriyi mobil uygulamalar, masaüstü programları ya da başka sistemler tüketir.
Çoğu projede ikisi birlikte yaşar. Yönetim paneli MVC ile yazılır, mobil uygulama aynı iş kurallarını API üzerinden kullanır; böylece kural tek yerde durur. Mobil tarafın arka ucunu nasıl kurduğumuzu mobil uygulama geliştirme süreci yazımızda anlattık.
Kendi ürünlerimizden Exchange Access Broker bu ayrımın somut bir örneğidir: kontrol düzlemi ve anlık oturum iptali ASP.NET Core Web API ile (SignalR dahil) çalışır, yönetim paneli ise Blazor WebAssembly ile yazılmıştır.
ASP.NET Core'un sınırları: ne zaman başka bir yol düşünmeli?
Her iş için en doğru araç olmak gibi bir iddiamız yok. Şu durumlarda başka seçenekleri de değerlendirmek gerekir:
- Basit bir tanıtım sitesi ya da blog için hazır bir içerik yönetim sistemi çoğu zaman yeterli ve daha pratiktir.
- İhtiyacınızı hazır bir yazılım karşılıyorsa özel geliştirme gereksiz olabilir; bu kararı özel yazılım mı hazır yazılım mı yazımızda ayrıca ele aldık.
- Bakımı devralacak ekibin C# ve .NET deneyimi yoksa uzun vadeli bakım planı ayrıca düşünülmelidir.
- Eski .NET Framework tabanlı bileşenlerle çalışılacaksa entegrasyon ek çaba gerektirebilir.
- Düzenli sürüm yükseltmesi bir bakım işidir; yükseltme yapılmayan bir uygulama zamanla destek dışı kalır.
Seçim yaparken şu soruyu da sorun: bu yazılım beş yıl sonra kim tarafından, hangi koşullarda bakılacak? Popüler bir çatı seçmek bakım sorununu çözmez; belgelenmiş kod, anlaşılır bir mimari ve sürdürülebilir bir yayın düzeni çözer. Bu yüzden teknoloji kararını bakım planıyla birlikte düşünmenizi öneririz.
Özetle ASP.NET Core, kurumsal ölçekte rol, yetki ve veritabanı içeren web yazılımlarında güçlü bir seçimdir; ama seçim, çatıdan önce ihtiyaca bakılarak yapılmalıdır. Projenizde bunun nasıl uygulanabileceğini konuşmak isterseniz yazılım iletişim sayfamızdan bize ulaşabilirsiniz.