Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

.NET 8 | Short-Circuit Routing

Merhaba,

Bu içeriğimizde .NET 8 ile Asp.NET Core’a gelen ve short-circuit routing olarak nitelendirilen küçük bir yeniliği inceliyor olacak, bu yeniliğin normal routing’den ne kadar farklı olduğuna ve hangi durumlarda kullanılması gerektiğine dair istişarede bulunuyor olacağız.

Şimdi konuya direkt kitabın ortasından girersek eğer; biliyorsunuz ki, Asp.NET Core’da bir istek geldiği taktirde bu isteğe karşın hangi endpoint’in tetikleneceği EndpointRoutingMiddleware middleware’i ile kararlaştırılmakta(ya da RoutingMiddleware‘de denmektedir), kararlaştırılan endpoint EndpointMiddleware middleware’i ile çalıştırılmaktadır.

.NET geliştiricileri bu iki durumu farklı middleware’ler ile ayırarak, belki çalışma sürecinde her iki middleware arasında bir başka middleware’i(ya da middleware’leri) daha çalıştırabilme avantajından istifade edebilme imkanını bizlere tanımaktadırlar. Mesela, isteğin geldiği endpoint’e dair metadata’lara dayalı olarak davranış değiştirmek istiyorsak eğer bu işi üstlenecek bir middleware oluşturabilir ve çalışmalarımızı yürütebiliriz. Ki bizler genellikle ne yapıyoruz? En yaygın örnek olarak, isteğin geldiği endpoint’e erişim yetkisinin olup olmadığını kontrol edebilmek için authentication ve authorization middleware’lerini çağırıyoruz. Böylece bu kontroller neticesinde ilgili endpoint’in çalıştırılıp, çalıştırılmayacağının kararını veriyoruz! Öyle değil mi? Özellikle API(ya da Minimal API) ve MVC uygulamalarında, controller’lara yapılan isteklerde bu şekilde çalışma gerçekleştiriyoruz.

Evet, duruma göre bu şekilde davranış gerçekleştiriyoruz gerçekleştirmesine lakin yazılım halidir ki kimi durumlarda da zerre kadar bir ara işleme ihtiyaç duymadan istekleri karşılamıyor da değiliz! Öyle endpoint’ler olabiliyor ki bunlara gelen istek süreçlerinde ne bir yetkilendirme kontrolü, ne CORS desteği yahut ne de farklı bir işleme gereksinim duyulmaksızın direkt çalıştırma odaklı süreç söz konusu olabiliyor. İşte bu tarz endpoint’lerin kullanıldığı istek süreçlerinde, isteğin işlenmesini lüzumsuz yere EndpointRoutingMiddleware ve EndpointMiddleware middleware süreçlerine bölmektense kıssadan hisse yaparak bu davranışları kümülatif bir şekilde tek seferde yapmaya odaklanmak isteyebiliriz. İştee .NET 8 ile gelmiş olan short-circuit routing davranışının devreye gireceği yer tam da burasıdır diyebiliriz.

Short-Circuit Routing Nedir?

İçeriğimizin ilk satırlarından beri bahsedildiği üzere .NET 8 ile gelmiş olan yeni bir özelliktir. Asp.NET Core uygulamasındaki kimi endpoint’lere uygulanarak gelen isteklere karşın EndpointRoutingMiddleware ile EndpointMiddleware arasındaki middleware’lerin atlatılarak hedef endpoint’in direkt olarak çalıştırılmasını sağlamaktadır.

Bunun için Minimal API’ler de aşağıdaki gibi ShortCircuit metodunu kullanabilirsiniz.

app.MapGet("/", () => "Merhaba dünya")
    .ShortCircuit();

İşte bu kadar basit! Bu şekilde kullanılan bir endpoint hızlıca ara katmanlara temas etmeksizin direkt çalıştırılıp, sonuç döndürüyor olacaktır.

Peki, o halde short-circuit routing’i ne zaman kullanmalıyız?

Tabi ki de ihtiyaç noktalarında 🙂 Yani mikro seviyede performans optimizasyonunun önemsendiği uygulamalarda endpoint’lere gelen istek süreçlerinde gereksiz bir şekilde middleware’lerin tetiklendiği durumlar varsa eğer o endpoint’leri short-circuit routing ile ayağa kaldırabilirsiniz. Bunların dışında; Google gibi arama motorlarının kullandığı /robots.txt gibi dosyaları tarif eden endpoint’lerde, /favicon.ico gibi tarayıcı tarafından otomatik olarak talep edilen adreslerde ve OpenID Connect gibi protokollerin kullandığı /.well-known/* vs. gibi adreslemelerde short-circuit routing biçilmiş kaftan olacaktır diyebiliriz.

MapShortCircuit Metodu

Bu metot ile uygulamaya gelecek olan isteğin, belli bir ifadeyle başlayıp başlamadığını kontrol edebilir ve direkt olarak kısa devre yapıp status code’u eşliğinde isteği boşa çıkarabilirsiniz.

app.MapShortCircuit((int)HttpStatusCode.NotFound, "admin");

Misal olarak yukarıdaki kod bloğunu incelerseniz eğer ‘admin’ ile başlayan bir isteğin status code’unu direkt olarak NotFount(404) şeklinde ayarlayacak ve geriye döndürüyor olacaktır.

Velhasıl kelam… Böylece .NET 8 ile gelmiş olan yeni bir özelliği daha incelemiş bulunuyoruz. Burada konuya dair unutulmaması gereken nokta şudur ki short-circuit routing‘in devrede olduğu endpoint’lere bir istek geldiği taktirde bu EndpointRoutingMiddleware yerine direkt olarak EndpointMiddleware middleware’inde yürütülüyor olacaktır. Ee haliyle böyle bir özelliğin ihtiyaç noktalarında kullanılması performans ve maliyet açısından oldukça avantaj sağlayacaktır diye düşünüyorum…

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir