OData (Open Data Protocol) je otvoreni standard za izgradnju i konzumiranje RESTful API servisa koji omogućavaju rad sa podacima putem HTTP protokola. Razvijen je pod okriljem kompanije Microsoft, a danas je OASIS standard.
U .NET svetu, OData se najčešće koristi zajedno sa:
ASP.NET Core
Entity Framework Core
Omogućava klijentima da kroz URL parametre filtriraju, sortiraju, grupišu i paginiraju podatke — bez potrebe za pisanjem dodatnih endpointa.
Zašto koristiti OData u C# aplikacijama?
U klasičnom REST API-ju često pravimo više endpointa poput:
/api/products
/api/products/by-category/3
/api/products/expensive
/api/products/paged?page=2
Sa OData pristupom, sve to postaje jedan endpoint:
/odata/Products
A klijent sam definiše upit:
/odata/Products?$filter=Price gt 1000&$orderby=Name&$top=10
Dakle, server izlaže podatke, a klijent bira kako želi da ih dobije.
Osnovne OData opcije (Query Options)
OData koristi standardne query parametre:
Parametar Opis
$filter Filtriranje podataka
$select Izbor kolona
$expand Učitavanje povezanih entiteta
$orderby Sortiranje
$top Ograničavanje broja rezultata
$skip Preskakanje zapisa (paginacija)
$count Vraćanje ukupnog broja zapisa
Primer:
/odata/Customers?$filter=City eq ‘Belgrade’&$select=Name,Email
Kako OData funkcioniše u C# (ASP.NET Core)
U modernim aplikacijama koristi se paket:
Microsoft.AspNetCore.OData
1️⃣ Instalacija NuGet paketa
U Package Manager konzoli:
Install-Package Microsoft.AspNetCore.OData
2️⃣ Konfiguracija u Program.cs
builder.Services.AddControllers()
.AddOData(options => options
.Select()
.Filter()
.OrderBy()
.Expand()
.Count()
.SetMaxTop(100)
.AddRouteComponents(“odata”, GetEdmModel()));
3️⃣ Kreiranje EDM modela
using Microsoft.OData.ModelBuilder;
static IEdmModel GetEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet
return builder.GetEdmModel();
}
4️⃣ OData kontroler
using Microsoft.AspNetCore.OData.Query;
using Microsoft.AspNetCore.Mvc;
[Route(“odata/[controller]”)]
public class ProductsController : ControllerBase
{
private readonly AppDbContext _context;
public ProductsController(AppDbContext context)
{
_context = context;
}
[EnableQuery]
public IQueryable
{
return _context.Products;
}
}
Ključna stvar je [EnableQuery] atribut koji omogućava OData parsiranje query parametara.
Veza sa Entity Framework Core
Kada vraćaš IQueryable
LINQ → SQL → baza podataka
To znači da se filtriranje i sortiranje izvršava u bazi, a ne u memoriji aplikacije — što je veoma efikasno.
Prednosti OData
✔ Fleksibilan API
✔ Manje endpointa
✔ Standardizovan format
✔ Automatska paginacija i filtriranje
✔ Dobro se uklapa sa EF Core
Mane OData
❌ Može izložiti previše podataka ako se ne ograniči
❌ Potencijalno sporiji kompleksni upiti
❌ Veća kompleksnost validacije i sigurnosti
❌ Teže debugovanje u odnosu na klasičan REST
Kada koristiti OData?
OData je odličan izbor kada:
Praviš enterprise aplikaciju
Imaš kompleksne tabele i relacije
Koristiš Blazor ili SPA aplikaciju
Klijentima treba fleksibilno pretraživanje
Radiš sa BI ili reporting alatima
Nije idealan za:
Jednostavne mikroservise
API-je sa striktno definisanim endpointima
Javne API-je gde želiš potpunu kontrolu nad payload-om
Verzije OData
OData v3 (stara verzija, koristi se u starijim .NET aplikacijama)
OData v4 (moderni standard, koristi se u ASP.NET Core)
Primer realnog zahteva
GET /odata/Orders?$expand=Customer&$filter=Total gt 5000&$orderby=Date desc&$top=5
Ovo znači:
-
učitaj porudžbine
uključi kupca
filtriraj iznose veće od 5000
sortiraj po datumu opadajuće
vrati 5 zapisa
Sve bez dodatnog endpointa.
Zaključak
OData u C# aplikacijama omogućava izgradnju moćnog, fleksibilnog i standardizovanog API-ja uz minimalan dodatni kod. U kombinaciji sa ASP.NET Core i Entity Framework Core dobijaš skalabilno i efikasno rešenje za rad sa podacima.
Ako radiš enterprise sisteme, finansijske aplikacije ili kompleksne baze podataka — OData je ozbiljan kandidat

Facebook Comments