OData Atau Open Data Protocol merupakan salah satu best practice untuk membangun atau menggunakan sebuah web api, OData sendiri dapat digunakan secara optional untuk membantu memanipulasi atau mengimplementasikan data secara khusus, kita dapat menggunakan query dalam protokol OData melalui endpointnya, Odata dalam Asp .Net Sendiri dapat diakses secara optional misalkan data yang ada di web api endpoint default kita tidak akan diubah seluruhnya ke OData, sehingga data tersebut masih dapat diakses secara default. berikut merupakan langkah untuk konfigurasinya
Konfigurasi OData di ASP .Net Core 3.1
Pertama, Tambahkan “Microsoft.AspNetCore.OData” reference di NuGet Packages ke project kita
Buka file Startup.cs pada project kita,
Tambahkan “services.AddOData();” di dalam Method ConfigureServices untuk mengenalkan aplikasi kita tentang OData
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddOData();
}
jangan lupa untuk menambahkan reference pada file startup.cs juga
using Microsoft.AspNet.OData.Extensions;
Kemudian kita perlu menambahkan dependency Injection pada method Configure di file yang sama pada UseMvcnya, dan juga tambahkan funsi query -query yang akan kita gunakan untuk memanipulasi data kita nantinya.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseMvc(routeBuilder => { routeBuilder.EnableDependencyInjection(); routeBuilder.Expand().Select().Filter().Count().OrderBy(); }); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
Hal yg perlu dilakukan selanjutnya adalah membuat route untuk mengakses ke format ODatanya sendiri sehingga data dalam endpoint kita masih bisa di akses dalam format default.
Buat method baru pada file startup.cs untuk menentukan Entity data model untuk ODatanya
IEdmModel GetEdmModel() { var odataBuilder = new ODataConventionModelBuilder(); odataBuilder.EntitySet<BDFEntitlement>("IniPegawai");
return odataBuilder.GetEdmModel();
}
Tambahkan reference pada file startup.cs
using Microsoft.OData.Edm; using Microsoft.AspNet.OData.Builder;
nb: dalam code diatas “BDFEntitlement” adalah model yang akan menjadi format result dari data kita, “IniPegawai” adalah web api controller kita. jadi kita dapat menambahkan Entityset seperlu kita.
Kemudian Kembali ke Method Configure untuk comment fungsi UseEndpointsnya karena kita akan menggunakan route dari ODatanya.
sama seperti alasan diatas, pada UseMvc kita perlu menambahkan
routeBuilder.MapODataServiceRoute("odata", "odata", GetEdmModel());
Kemudian karena kita menggunakan mvc di sini perlu untuk mendisable EndpointRoutingnya di method ConfigureServices pada service “AddController”, Rubah seperti dibawah ini.
services.AddControllers(mvcOptions => mvcOptions.EnableEndpointRouting = false);
Dengan ini konfigurasi di file startup.cs sudah selesai, dan dapat dilanjutkan ke webapi controllernya
langkah terakhir, hanya perlu menambahkan configurasi di setiap atas method controller yang akan kita gunakan dengan bersama OData seperti
// GET: api/IniPegawai
[HttpGet]
[EnableQuery()]
public IEnumerable Get()
{
return _context.BDFEntitlement.AsNoTracking().ToList();
}
Tambah reference pada controller Anda
using Microsoft.AspNet.OData;
Implementasi sederhana menggunakan OData
1. tanpa OData dengan endpoint
https://localhost:44383/api/inipegawai
2. Dengan OData dan mencoba querying pada endpoint nya
https://localhost:44383/odata/inipegawai?$Select=ProgramName,Remark,id&$filter=ProgramName eq 'Program Algostudio A'
Konklusi :
OData bisa berguna untuk membantu kita memanipulasi data sesuai yang kita butuhkan tanpa harus membuat endpoint lain, selain itu banyak query-query OData yang berguna misalkan expand yang memiliki fungsi untuk dapat menggabungkan lebih dari 1 data di endpoint berbeda dan banyak lainnya. mudahnya memanipulasi di data dari resultnya ini yang menurut Saya menjadikan Entity Framework yang menggunakan OData lebih fleksibel dari Entity Framework yang tidak menggunakan OData, untuk pembahasan lebih perbandingannya mungkin akan ada di artikel selanjutnya.
Terima kasih & Semoga artikel ini bermanfaat.