OData C# (Geliştiriciler İçin Nasıl Çalışır)
Açık Veri Protokolü (OData), Microsoft .NET geliştirmede RESTful API'lerin oluşturulmasını ve tüketilmesini kolaylaştırır. Verilerin tanıdık CRUD (Oluştur, Oku, Güncelle, Sil) işlemleriyle sorgulanması ve manipüle edilmesi için standart bir yaklaşım sunar. Bu makale, Açık Veri Protokolünün .NET'teki API geliştirmesini nasıl düzenlediğini, örnekler sunarak ve önemli avantajlarını vurgulayarak inceler. OData hakkında daha fazla keşif yapmak için kaynak kodu incelemek üzere OData C# GitHub Deposu'na bakabilirsiniz.

OData, RESTful web API'leri oluşturmak için standart uygulamaları izler ve işlemleri tanımlamak için GET ve POST gibi URL'ler ve HTTP fiilleri kullanır. Verileri Temel Veri Modeli (EDM) ve mesaj kodlaması için JSON veya AtomPub kullanarak temsil eder. OData, GraphQL'e kıyasla API geliştirmesini basitleştirirken, daha az gelişmiş özellik sunabilir.

.NET'te OData Kullanmanın Avantajları
- Standartlaştırma: OData, varlık veri modellerini tanımlamak, istekleri işlemek ve yanıtları biçimlendirmek için tutarlı bir yol önerir. Bu durum geliştirme karmaşıklığını azaltır ve istemci uygulama entegrasyonunu basitleştirir.
- Zengin Sorgu Yetenekleri: OData, verinin sorgulanması için CRUD işlemlerini gerçekleştiren bir yöntem destekler, filtreleme ($filter), sıralama (Artan/Düşen Sıra)($orderby) ve sayfalama ($top, $skip) işlevselliği sunar, böylece istekte bulunanlar belirli veri setlerini verimli bir şekilde alabilirler.
- Gelişmiş Geliştirici Deneyimi: .NET kütüphaneleri, OData için API geliştirmeyi kolaylaştırır. Geliştiriciler, yönlendirme, sorgu işleme ve veri serileştirme için önceden oluşturulmuş bileşenlerden yararlanarak kodun yinelemesini ve geliştirme süresini azaltabilir.
- Uyumluluk: Çeşitli platformlardaki OData uyumlu istemciler, sizin .NET tabanlı OData hizmetinizle sorunsuz bir şekilde etkileşime girebilir, daha geniş uygulama entegrasyonunu teşvik eder.
.NET Framework'te OData ile Başlamak
.NET kütüphaneleri, veri setlerini verimli bir şekilde manipüle etmek için .NET geliştirmede geliştirici deneyimini geliştirir. .NET geliştirmede RESTful API'lerin oluşturulmasını ve tüketilmesini basitleştirir. Verileri tanıdık CRUD işlemleri (Oluştur, Oku, Güncelle, Sil) yoluyla sorgulama ve manipüle etme için bir standart yaklaşım sunar.
.NET Projelerinde OData Kurulumu
Visual Studio'da yeni projenizi açarak başlayın. Ardından Çözüm Gezgini'ne gidin, projenizin üzerine sağ tıklayın ve "NuGet Paketlerini Yönet" seçeneğini seçin. Microsoft.AspNetCore.OData'i arayın ve yükleyin. Mevcut OData sürümü 8.2.5'tir.
NuGet Paket Yöneticisi Konsolu'nda OData'yı kurmak için aşağıdaki komutu kullanın.
Install-Package Microsoft.AspNetCore.OData

Örnek: ASP.NET Core'da Bir OData Hizmeti Oluşturma
ASP.NET Core uygulamasında basit bir OData model sınıfı oluşturalım. Aşağıdaki kodda, bu sınıf OData sözdizimini kullanarak sorgulanabilecek bir hizmetler listesi sunar.
public class Service
{
public int Id { get; set; }
public string FirstName { get; set; }
public decimal Price { get; set; }
}
public class Service
{
public int Id { get; set; }
public string FirstName { get; set; }
public decimal Price { get; set; }
}
Public Class Service
Public Property Id As Integer
Public Property FirstName As String
Public Property Price As Decimal
End Class
Kodun Açıklaması
Service sınıfı, C#'te bir servisi yönetmek için temel bir veri yapısı temsil eder. Üç özelliği içerir: Id: Servis için tamsayı bir tanımlayıcı. FirstName: Servisle ilgili adını temsil eden bir string. Price: Servisin fiyatını belirten ondalık bir değer. Bu sınıf, .NET geliştirmesinde daha karmaşık servis ile ilgili işlevsellikler oluşturmak için bir yapı taşı olarak kullanılabilir. Senaryoya bağlı olarak koleksiyon veya gezinme özelliklerini de kullanabiliriz.
Visual Studio'da ASP.NET Core uygulamasında standart bir OData uç noktası aracılığıyla hizmetler listesini sunmak için bir OData denetleyicisi nasıl kurabileceğinizi gösterir. Verilen örnek, statik bir hizmetler listesi kullanarak temel bir uygulamayı ve Web API'de OData sorgulama işlevlerini etkinleştirmeyi gösterir:
using DemoOData.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OData.Query;
using Microsoft.AspNetCore.OData.Routing.Controllers;
namespace DemoOData.Controllers
{
[Route("odata/[controller]")]
public class ServiceController : ODataController
{
private static readonly List<Service> Products = new List<Service>
{
new Service { Id = 1, FirstName = "Laptop", Price = 6239.9M },
new Service { Id = 2, FirstName = "Smartphone", Price = 2585.9M }
};
[HttpGet]
[EnableQuery]
public IActionResult Get() => Ok(Products);
}
}
using DemoOData.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OData.Query;
using Microsoft.AspNetCore.OData.Routing.Controllers;
namespace DemoOData.Controllers
{
[Route("odata/[controller]")]
public class ServiceController : ODataController
{
private static readonly List<Service> Products = new List<Service>
{
new Service { Id = 1, FirstName = "Laptop", Price = 6239.9M },
new Service { Id = 2, FirstName = "Smartphone", Price = 2585.9M }
};
[HttpGet]
[EnableQuery]
public IActionResult Get() => Ok(Products);
}
}
Imports DemoOData.Models
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.AspNetCore.OData.Query
Imports Microsoft.AspNetCore.OData.Routing.Controllers
Namespace DemoOData.Controllers
<Route("odata/[controller]")>
Public Class ServiceController
Inherits ODataController
Private Shared ReadOnly Products As New List(Of Service) From {
New Service With {
.Id = 1,
.FirstName = "Laptop",
.Price = 6239.9D
},
New Service With {
.Id = 2,
.FirstName = "Smartphone",
.Price = 2585.9D
}
}
<HttpGet>
<EnableQuery>
Public Function [Get]() As IActionResult
Return Ok(Products)
End Function
End Class
End Namespace
Kodun Açıklaması
Sağlanan kod, OData protokolünü kullanarak veri sorgulama ve değiştirme olanağı tanıyan bir ODataController adlı bir ASP.NET Core uygulamasında ServiceController tanımlar. Bu, talepleri odata/Service yönlendirir ve bir dizüstü bilgisayar ve bir akıllı telefon da dahil olmak üzere Service nesnelerinden oluşan statik bir liste sunar. Get yöntemi, [EnableQuery] ile dekore edilmiş olup, Müşterilere (filtreleme, sıralama, sayfalama) OData sorgularını Ürünler listesinde yürütme olanağı sağlar; sonuçları HTTP GET istekleri için bir IActionResult olarak geri döndürür.
Program.cs'de OData Hizmetlerini Kaydet
.NET 6 uygulamasına OData'yı entegre etmek için gereken OData paketlerini yüklememiz ve yapılandırmamız gerekir. Bu, OData modelini tanımlama, OData middleware'i kurma ve filtreleme, sıralama ve genişletme gibi OData özelliklerini destekleyecek hizmetleri yapılandırmayı içerir.
using DemoOData.Models;
using Microsoft.AspNetCore.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.ModelBuilder;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Service>("Services");
return builder.GetEdmModel();
}
builder.Services.AddControllers()
.AddOData(options => options
.AddRouteComponents("odata", GetEdmModel())
.Select()
.Filter()
.OrderBy()
.SetMaxTop(20)
.Count()
.Expand()
);
using DemoOData.Models;
using Microsoft.AspNetCore.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.ModelBuilder;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Service>("Services");
return builder.GetEdmModel();
}
builder.Services.AddControllers()
.AddOData(options => options
.AddRouteComponents("odata", GetEdmModel())
.Select()
.Filter()
.OrderBy()
.SetMaxTop(20)
.Count()
.Expand()
);
Imports DemoOData.Models
Imports Microsoft.AspNetCore.OData
Imports Microsoft.OData.Edm
Imports Microsoft.OData.ModelBuilder
Private builder = WebApplication.CreateBuilder(args)
' Add services to the container.
builder.Services.AddControllers()
' Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer()
builder.Services.AddSwaggerGen()
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'static IEdmModel GetEdmModel()
'{
' ODataConventionModelBuilder builder = New ODataConventionModelBuilder();
' builder.EntitySet<Service>("Services");
' Return builder.GetEdmModel();
'}
builder.Services.AddControllers().AddOData(Function(options) options.AddRouteComponents("odata", GetEdmModel()).Select().Filter().OrderBy().SetMaxTop(20).Count().Expand())
Kodun Açıklaması
Bu kod, bir .NET 6 uygulamasında OData desteğini yapılandırır. Öncelikle, gerekli ad alanlarını içe aktarır ve bir WebApplicationBuilder örneği oluşturur. GetEdmModel metodu, ODataConventionModelBuilder metoduyla OData modelini tanımlar; bu da Service varlıkları için bir varlık seti belirtir. AddOData metodu, belirli seçimi etkinleştirme, filtreleme, sıralama, sayma, genişletme ve sorgu sonuçları için maksimum 20'ye kadar bir top değeri ayarlama dahil OData servislerini yapılandırmak için çağrılır. Bu kurulum, uygulamanın OData sorgularını etkili bir şekilde ele alabilmesini sağlar.
AddOData() yöntemi, sorgulama için kullanılan veri modelini elde eden GetEdmModel() yöntemini kullanır; bu da bir OData servisi temeli oluşturur. Bu servis, açık veri tanımlamak için Varlık Veri Modeli (EDM) olarak bilinen soyut bir veri modeli kullanır. ODataConventionModelBuilder sınıfı, varsayılan isimlendirme kurallarıyla bir EDM oluşturur ve bu da kod gereksinimlerini en aza indirir. Alternatif olarak, geliştiriciler EDM üzerindeki daha fazla kontrol için ODataModelBuilder sınıfını kullanabilir.
Kodun Ekran Görüntüsü

Hizmeti Çalıştırma
Hizmeti çalıştırdıktan sonra, OData sorgu seçenekleri kullanarak Hizmeti sorgulayabilirsiniz:
https://localhost:7131/odata/Service
Programın Çıkışı

IronPDF'ye Giriş
IronPDF, .NET uygulamalarında dosyaların PDF'ye dönüştürülmesi, PDF sayfalarının bölünmesi ve PDF'den sayfa çıkarılması işlemlerini basitleştirmek için tasarlanmış kapsamlı bir C# kütüphanesidir. HTML, CSS, görüntüler ve JavaScript'ten PDF'ler oluşturma yeteneği de dahil olmak üzere çeşitli özellikler sunar, geliştiricilerin web içeriğini yüksek kaliteli PDF belgelerine zahmetsizce dönüştürmesini sağlar. Sezgisel API'si ve güçlü render motoru ile IronPDF, PDF oluşturma süreçlerini düzenler, uygulamalarına dinamik belge oluşturma yeteneklerini kolaylıkla entegre etme olanağı sağlar.

Projeye IronPDF Ekleme
IronPDF'i Visual Studio içinde yüklemek için NuGet Paket Yöneticisi Konsolu'na gidin ve aşağıdaki komutu kullanın.
Install-Package IronPdf
PDF Oluşturma
Bir .NET uygulamasında HTML içeriğinden PDF belgesi oluşturmak için DinkToPdf gibi bir kütüphaneden ChromePdfRenderer sınıfını kullanabiliriz. Bu örnek, bir Çalışan kaydının detaylarını içeren bir PDF oluşturmayı gösterir.
public record Employee (string FirstName, string LastName);
class Program
{
static void Main(string[] args)
{
var employee = new Employee("Iron", "Developer");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {employee.FirstName} {employee.LastName}</p>");
pdf.SaveAs("PersonRecord.pdf");
}
}
public record Employee (string FirstName, string LastName);
class Program
{
static void Main(string[] args)
{
var employee = new Employee("Iron", "Developer");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {employee.FirstName} {employee.LastName}</p>");
pdf.SaveAs("PersonRecord.pdf");
}
}
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record Employee(string FirstName, string LastName)
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim employee As New Employee("Iron", "Developer")
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {employee.FirstName} {employee.LastName}</p>")
pdf.SaveAs("PersonRecord.pdf")
End Sub
End Class
Bu örnek, basit bir Çalışan kaydı oluşturur ve ardından kişinin adını gösteren bir PDF belgesi oluşturmak için IronPDF kullanır. Bu, .NET uygulamalarında C# kayıtlarının, PDF oluşturma ile nasıl sorunsuz bir şekilde entegre olabildiğini göstermektedir.

Sonuç
OData, .NET'te standartlaştırılmış sorgulama ve manipülasyon yetenekleri sağlayarak RESTful API'lerin geliştirilmesini ve tüketilmesini basitleştirir. Ayrıca, Entity Framework ile entegre edebiliriz, veri erişimi ve yönetimini basitleştirerek geliştirme verimliliğini artırır. OData, API geliştirmeyi kolaylaştırır, çeşitli platformlar arasında sorunsuz entegrasyon ve uyumluluk sağlayan zengin sorgulama işlevsellikleri ve gelişmiş geliştirici deneyimi sunar. Ek olarak, IronPDF, .NET uygulamaları içinde kapsamlı özellikler ve sağlam PDF manipülasyonu desteği sağlar.
Sıkça Sorulan Sorular
OData, .NET'te API geliştirmesini nasıl basitleştirir?
OData, CRUD işlemlerini kullanarak veri sorgulama ve manipülasyonu için standart bir protokol sağlayarak .NET'te API geliştirmesini basitleştirir. RESTful uygulamalar için URL'ler ve HTTP fiilleri ile Genel Veri Modeli'ni (EDM) kullanarak JSON veya AtomPub formatlarında veri temsil eder.
.NET uygulamalarında OData'nın kullanılmasının temel faydaları nelerdir?
OData'nın .NET uygulamalarında kullanılmasının temel faydaları, standardizasyon, zengin sorgulama özellikleri, geliştirici deneyiminin iyileştirilmesi ve farklı platformlar arasında birlikte çalışabilirliktir, bu da karmaşıklığı azaltır ve verilerin etkin bir şekilde alınmasını sağlar.
Bir ASP.NET Core uygulamasında bir OData servisini nasıl kurarım?
Bir ASP.NET Core uygulamasında bir OData servisi kurmak için, bir OData modeli tanımlayıp ara yazılımı yapılandırmanız gerekmektedir. Bunu, Microsoft.AspNetCore.OData NuGet paketini yükleyerek ve ODataConventionModelBuilder'ı kullanarak varlık veri modelinizi tanımlayarak yapabilirsiniz.
OData'daki EnableQuery özniteliğinin rolü nedir?
OData'daki EnableQuery özniteliği, OData kontrolcüsü tarafından ortaya konulan veri üzerinde filtreleme, sıralama ve sayfalama gibi işlemleri gerçekleştirmenize olanak tanır ve API'nin esnekliğini ve kullanılabilirliğini artırır.
.NET'te HTML içeriğinden PDF nasıl oluşturulur?
IronPDF kütüphanesini kullanarak .NET'te HTML içeriğinden PDF oluşturabilirsiniz. Bir HTML dizesi oluşturarak ve ChromePdfRenderer sınıfını kullanarak bu HTML'yi PDF belgesi olarak oluşturabilir ve ardından bir dosyaya kaydedebilirsiniz.
.NET'te ODataConventionModelBuilder'ın amacı nedir?
.NET'te ODataConventionModelBuilder, varsayılan adlandırma kuralları kullanarak bir Genel Veri Modeli (EDM) otomatik olarak oluşturmak için kullanılır ve Uygulamalarda OData modelinin tanımlanması için gereken kod miktarını azaltır.
.NET'te PDF manipülasyonu için kapsamlı bir kütüphane nedir?
IronPDF, PDF manipülasyonu için C# içinde kapsamlı bir kütüphanedir; dosyaların PDF'ye dönüştürülmesi, PDF sayfalarının bölünmesi ve kaldırılması ve HTML'den PDF oluşturma gibi görevleri kolaylaştırır.
.NET hizmetlerinde OData, birlikte çalışabilirliği nasıl artırır?
OData, OData standardına uyan istemcilerin .NET tabanlı OData hizmetleri ile sorunsuz etkileşime girmesine izin vererek, farklı uygulamalar ve platformlar arasında daha geniş entegrasyonu teşvik eder.
OData bağlamında CRUD işlemleri nedir?
OData bağlamında CRUD işlemleri, RESTful API'lerde veri manipülasyonu için temel olan Oluşturma, Okuma, Güncelleme ve Silme işlemlerine atıfta bulunur.




