Yazılım Mimarileri ve Tasarım Desenleri Üzerine

Asp.NET Core WEB API – OData Query Options

Merhaba,

Bir önceki Asp.NET Core Web API Uygulamasına OData Implementasyonu başlıklı yazımızda bir Asp.NET Core Web API uygulamasına OData implemantasyonunun nasıl gerçekleştirildiğini incelemiştik. Bu içeriğimizde ise serverdan dönecek data miktarını kontrol etmemize imkan verecek olan OData Query Options yapılanmasını inceleyeceğiz.

OData Query Options Nedir?

OData Query Options temel olarak, kullanıcı tarafından url üzerinden yapılan veri sorgulamalarında(delete hariç) üretilen datanın kullanıcıya gönderilmeden önce filtrelenmesini, sıralanmasını vs. gibi işlemlere tabii tutularak yapılandırılmasını sağlayan seçeneklerdir.

OData Query Options; ‘System Query Options’, ‘Custom Query Options’ ve ‘Parameter Aliases’ olmak üzere üçe ayrılmaktadır. Hangi kategoriden olursa olsun seçenekler aşağıdaki prototipte olduğu gibi url üzerinde sorguya eklenmektedir.

https://localhost:5001/odata/{controller_name}?${options}={value}

Şimdi sırasıyla bu seçenekleri inceleyelim.

System Query Options

URL üzerinden yapılan sorgulama neticesinde döndürülecek olan data üzerinde filtreleme, seçme, sıralama gibi işlemler yapan, eleman adedini hesaplama, belirtilen adet kadarını ayıklama yahut görmezden gelme gibi eylemlerde bulunan ve navigation propertyler üzerinden fiziksel ilişkiye sahip olan diğer tablolarıda sorgulayabilmemizi sağlayan seçeneklerdir.

Endpoint Seviyesinde Operatör Belirleme

Yukarıdaki operatörleri incelerseniz eğer her biri için ‘Startup.cs’ dosyasındaki ‘Configure’ metodunda ayrı ayrı tanımlama yapmamız gerekti. Halbuki endpoint seviyesinde de hangi operatörülerin kullanılabileceğini aşağıdaki gibi belirtebilmekteyiz.

Görüldüğü üzere ‘EnableQuery’ attribute’unda ‘Allowed…’ ile başlayan tüm propertyler esasında bu actionda aktif olacak operatörleri belirlememizi sağlamaktadırlar.

Örneğin aşağıdaki kod bloğunu incelerseniz eğer;

        [EnableQuery(AllowedFunctions = AllowedFunctions.All)]
        public IActionResult Get()
        {
            return Ok(_northwindContext.Kategoriler.ToList());
        }

‘Get’ fonksiyonunda tüm fonksiyonel operatörlerin çalışmasına endpoint seviyesinde izin verildiğini göreceksiniz.

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

Mobil sürümden çık