.Net 6 ve Minimal Api

Enes Aysan
roofstacks-tech
Published in
4 min readJan 7, 2022

Merhaba, bugün sizlere bir süredir yazmayı istediğim .Net 6 ve Minimal Api den bahsetmeye çalışacağım. Daha sonrada Minimal api ile Get, Post, Put ve Delete işlemleri gerçekleştirdiğimiz, Swaggerı eklediğimiz bir örnek yaparak, bazı yeniliklerden bahsedeceğim.

.Net 6

Öncelikle .Net 6 ile konumuza başlayalım. Microsoft’un “The fastest .Net” sloganıyla duyurduğu framework performans açısından gerçekten iyi sonuçlar veriyor. (Detay merak edenler için ilgili linki sayfanın altında paylaştım). Ayrıca .Net 6 LTS(Long Term Support) sürüm olarak çıktı. Yani kısaca Microsoft bu sürüme uzun süreli destek verecek (3 yıl) ve managementını sağlayacak. Bundan önceki en son LTS sürüm NET Core 3.1 di.

regmedia-benchmark
regmedia-benchmark
miro-benchmark
Sol taraf .Net 5, Sağ taraf .Net 6
miro-benchmark
Sol taraf .Net 5, Sağ taraf .Net 6

.Net 6 içerisinde bir çok yeni özellik barındırıyor. Bu yeniliklerin detayını bulabileceğiniz Microsoft linkini yazının altına ekledim. Oradan detaylı olarak inceleyebilirsiniz fakat ben yine de yeni özelliklerden bazılarının konu başlıklarını aşağıda maddeler halinde belirteyim. Biz bugün biraz daha minimal api ve .Net 6 yapısı üzerine yoğunlaşacağız.

  • C# 10
  • F# 6
  • .Net MAUI(.Net Multi Platform App UI)
  • Minimal APIs
  • Entity framework Core geliştirmeleri
  • Hot Reload (Uygulama çalışırken yeni bir değişikliği görüntülemeyi sağlar.)
  • HTTP/3
  • System.Text.Json geliştirmeleri(Source Generators. Streamable Serialize/Deserialize, IgnoreCycles)
  • System.linq geliştirmeleri
  • ModuleInitializer Attribute (İlk çalıştırılacak metodu belirtmek için kullanılır)
  • PriorityQueue (Queue yapılarına öncelik verilerek buna göre işlem yapılmasını sağlar)
microsoft-devblogs-dotnet-unified-platform
microsoft-devblogs-dotnet-unified-platform

.Net 6 Minimal API ve Yapı

Öncelikle örneği denemek isterseniz bilgisayarınızda Visual Studio 2022 yada Visual Studio Code kurulu olmalıdır. Eğer Visual Studio 2022 kurulu değil ise (.Net 6 içerisinde geliyor) .Net 6 yı indirmeniz gerekir.
https://visualstudio.microsoft.com/tr/
https://dotnet.microsoft.com/en-us/download/dotnet/6.0

Baştan söyleyeyim minimal apileri kullanmak zorunda değilsiniz eski tarz controller üzerinden de geliştirmeler yapılabilmektedir. Hatta “webapi” template içerisinde yine controllerlı yapı default olarak gelmektedir. İlk olarak boş bir Asp .Net Core projesi oluşturalım ve Net 6 yı seçelim.
( Vs code kullanacaksanız “dotnet new web” )

İlk gözümüze çarpan Startup.cs olmaması olacaktır. Evet artık Startupda yaptığımız servis, middlewware konfigursayonlarımızı artık direk Program.cs içerisinde yapacağız.

Program.cs içerisini açtığımızda bizi gayet sade bir sayfa karşılıyor. (Burada syntax biraz Go ve Pythona benzemiş.)

.Net 6 Empty Structure
.Net 6 Empty Structure

Farkettiğiniz gibi main metodumuz yok. Net 6 default olarak Top level statement özelliği ile gelmektedir. Yani program.cs içeriisnde yazdığımız kodlar direk main metodu içerisinde yazılmış gibi düşünebilirsiniz. Yine bununla beraber usingler global olarak ekleniyor, bu özellik csproj dosyasında implicityusing flagi ile kontrol edilebilir.

Builder nesnemizi kullanarak tanımlamaları yapacağız. Artık eskiden default olarak gelen 5000 ve 5001 portları değişmiş. Yine port ayarları launchsettings içerisinde hem de app.Urls kullanarak program.cs içerisinde tanımlanabiliyor.

Güzel özelliklerden biride program.cs içerisinde ConfigureManager ile yeni config dosyalarını uygulamamızın içerisine eklememizin çok daha kolay ve maliyetsiz olması.

ConfigurationManager configurationManager = new();
configurationManager.AddJsonFile(“config.json”);
var value = configurationManager[“Key”];

Şimdi bir servis tanımlayarak burada dummy datalar ile Get, Post, Put ve Delete operasyonları gerçekleştireceğim. Bu servisi singleton olarak (Dummy datalar kaybolmasın tek instance çalışsın istediğim için) register ederek operasyonlarımda kullanacağım. Bununla beraber swaggerı apime ekleyeceğim ve bunların hepsini (servisin sınıfı hariç) sadece program.cs içerisinde yapacağım .

Swagger eklemek için Swashbuckle.AspNetCore paketini yükleyelim

install-package Swashbuckle.AspNetCore
//dotnet add package Swashbuckle.AspNetCore

builder nesnemizi kullanarak swaggerın kullanacağı servisleri inject edelim.

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

Şimdi de app nesnemizi kullanarak swagger ve swagger ui kullandığımızı belirtelim.

app.UseSwagger();
app.UseSwaggerUI();

Swagger ayarlarımızı da yaptığımıza göre şimdi Program.cs içerisinde servisimizi register edelim ve Get,Post,Put,Delete metodlarımızı yazalım.

Projeyi run ederek http://localhost:1000/swagger/index.html adresinden kontrollerimizi gerçekleştirelim.

Swagger-minimalapi
Swagger-minimalapi

Uzun bir yazı oldu farkındayım fakat kesmeme rağmen uzunluk bu kadar kısaldı, yazının uzunluğundan sıkılan arkadaşlar sayfanın üst kısmından videoyu izleyebilir. Umarım faydalı olmuştur, kalın sağlıcakla…

Github Link : https://github.com/EnesAys/Net6MinimalApi

KAYNAKLAR

https://devblogs.microsoft.com/dotnet/announcing-net-6/
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-6/
https://docs.microsoft.com/en-us/aspnet/core/migration/50-to-60-samples?view=aspnetcore-6.0
https://www.youtube.com/watch?v=2chFBs-m1k8
https://medium.com/geekculture/minimal-apis-in-net-6-a-complete-guide-beginners-advanced-fd64f4da07f5

--

--