.NET 7: Response’u built-in middleware ile önbellekleme — Output caching
.NET 7 Preview 6 ile yeni bir middleware duyuruldu. Bu middleware output caching’i yönetmenize yardımcı olacak bir built-in middleware.
Output caching nedir?
Output cache, bir mekanizma tarafından döndürülen içeriğin önbellekte tutulmasını hedefleyen bir caching yöntemidir. Web API’leriniz için düşünecek olursak bir endpoint’e gelen aynı request için döndürülen verinin her seferinde servis tarafından tekrardan edinilmesi beklenmeden önbellekten getirilmek için kullanılır.
Output caching middleware’ın temel implementasyonu
IServiceCollection üzerinden AddOutputCache extension metodu ile servislerinize ekliyorsunuz.builder.Services.AddOutputCache();
Ardındansa IApplicationBuilder’da UseOutputCache extension metodu ile app’ın bunu kullanacağını belirtmeniz lazım
app.UseOutputCache();
Bunlardan sonra endpointlerinizde output caching konfigürasyonları yapabilirsiniz:
app.MapGet("/notcached", () => DateTime.Now.ToString());
app.MapGet("/cached", () => DateTime.Now.ToString()).CacheOutput();
/notcached endpoint’ine giden istekler o anki zamanı gösterecektir.
/cached endpoint’ine giden ilk istekte o anki zamanı alacaksınız, sonrasındaysa önbelleğe alınmış zamanı gösterecektir.
- VaryByQuery
VaryByQuery ile bir endpoint’e giden requestleri query parametresine göre önbelleğe almayı yönetebilirsiniz.
app.MapGet("/datetime", () => DateTime.Now.ToString()).CacheOutput(p => p.VaryByQuery("culture"));
/datetime endpoint’ine gidecek isteklerde query olarak iletilen culture parametresinin içindeki değere göre bir önbellekleme sağlayacak.
/datetime?culture=en
/datetime?culture= tr
şeklinde olan iki farklı request, farklı önbelleklerlemelere sahip olacak.
Fakat burada dikkat edilmesi gereken bir nokta var, /datetime endpoint’inin aldığı diğer query parametrelerinin ne olduğu yok sayılacaktır ve önbellekteki değer dönecektir. Yani, ?culture=en¶metre2=someValue, parametre2 önbellekteki veriyi ezmesi gereken bir değerse bile culture parametresine göre önbelleklendiği için önbelleklenen veri dönecektir.
VaryByQuery dışında önbelleklemeyi header veya belirleyeceğiniz değerler için de konfigüre etme şansınız var. Daha detaylı örnekler için şu projeye göz atabilirsiniz:
Aşağıdaki issuelardan da bu feature’ın gelişimini takip edebilirsiniz: