OData C# (Geliştiriciler İçin Nasıl Çalışır)
Open Data Protocol (OData), Microsoft .NET geliştirmede RESTful API'leri oluşturmayı ve tüketmeyi basitleştirir. Alışılmış CRUD (Create, Read, Update, Delete) işlemlerini kullanarak veri sorgulama ve manipülasyon için standart bir yaklaşım sunar. Bu makale, Open Data Protocol'un .NET'te API geliştirmeyi nasıl kolaylaştırdığını örneklerle keşfederek ve anahtar faydalarını vurgulayarak incelemektedir. OData hakkında daha fazla bilgi edinmek için, kaynak kodu için OData C# GitHub Deposu 'na göz atabilirsiniz.

OData, RESTful web API'leri oluştururken GET ve POST gibi işlemleri tanımlamak için URL'ler ve HTTP fiilleri kullanarak standart uygulamaları takip eder. Veriyi Entity Data Model (EDM) kullanarak ve mesaj kodlaması için JSON veya AtomPub ile temsil eder. OData, GraphQL'e kıyasla API geliştirmeyi basitleştirir, ancak daha az gelişmiş özellikler sunabilir.

.NET'te OData Kullanmanın Faydaları
- Standartlaşma: OData, entity veri modellerini tanımlamanın, istekleri ele almanın ve yanıtları biçimlendirmenin tutarlı bir yolunu uygular. Bu, geliştirme karmaşıklığını azaltır ve istemci uygulama entegrasyonunu kolaylaştırır.
- Zengin Sorgulama Yetenekleri: OData, CRUD işlemleri, filtreleme ($filter), sıralama (Artan Sıra/Azalan Sıra)($orderby) ve sayfalama ($top,$skip) işlevlerini gerçekleştirmek için veriyi sorgulamanın tekdüze bir yolunu sunarak istemcilerin belirli veri setlerini verimli bir şekilde almasına olanak tanır.
- Gelişmiş Geliştirici Deneyimi: OData için .NET kütüphanesi 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 yararlanabilir; bu da kod tekrarlanmasını ve geliştirme süresini azaltır.
- Birlikte Çalışabilirlik: Çeşitli platformlardan OData uyumlu istemciler, .NET tabanlı OData hizmetinizle sorunsuz bir şekilde etkileşim kurabilir; daha geniş uygulama entegrasyonunu teşvik eder.
.NET Framework'te OData'ya Başlarken
.NET için OData kütüphaneleri veri setlerini etkili bir şekilde yönetmek için geliştirici deneyimini artırır. .NET geliştirme içinde RESTful API'leri oluşturmayı ve tüketmeyi basitleştirir. Alışılmış CRUD işlemleri (Create, Read, Update, Delete) kullanarak veri sorgulama ve manipülasyon için standart bir yaklaşım sunar.
.NET Projelerinde OData Kurulumu
Yeni projenizi Visual Studio'da açarak başlayın. Ardından, Solution Explorer'a gidin, projeniz üzerinde sağ tıklayın ve "NuGet Paketlerini Yönet"i seçin. Microsoft.AspNetCore.OData'yi arayın ve yükleyin. Mevcut OData sürümü 8.2.5'tir.
NuGet Paket Yöneticisi Konsolu'nda OData'yi yüklemek için aşağıdaki komutu kullanın.
Install-Package Microsoft.AspNetCore.OData

Örnek: ASP.NET Core'da Bir OData Hizmeti Oluşturma
Bir ASP.NET Core uygulamasında basit bir OData model sınıfı yaratalım. Aşağıdaki kodda, aşağıdaki sınıf, OData sözdizimi kullanılarak sorgulanabilecek hizmetlerin listesi sağlayacaktır.
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#'ta bir hizmeti yönetmek için temel bir veri yapısını temsil eder. Üç özelliği içerir: Id: Hizmet için bir tamsayı tanımlayıcı. FirstName: Hizmetle ilişkilendirilmiş ilk adı temsil eden bir dize. Price: Hizmetin fiyatını belirten ondalık bir değer. Bu sınıf, .NET geliştirmede daha karmaşık hizmetle ilgili işlevsellikler oluşturmak için bir yapı taşı olarak kullanılabilir. Senaryoya bağlı olarak koleksiyon veya navigasyon özelliklerini de kullanabiliriz.
ASP.NET Core uygulamanızı Visual Studio'da merkezi OData uç noktası aracılığıyla hizmetler listesini açığa çıkarmak için bir OData denetleyicisini nasıl kuracağınız burada yer alıyor. Aşağıdaki örnek, statik bir hizmet listesi kullanarak temel bir uygulamayı ve Web API'de OData sorgulama işlevlerini etkinleştirmeyi göstermektedir.
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, bir ASP.NET Core uygulamasında, OData protokolünü kullanarak veri sorgulama ve manipülasyonunu etkinleştiren ODataController adlı bir ServiceController tanımlar. İstekleri odata/Service'ya yönlendirir ve bir dizüstü bilgisayar ve bir akıllı telefon içeren, statik bir Service listesi sunar. [EnableQuery] ile süslenmiş Get yöntemi, OData sorgularını (filtreleme, sıralama, sayfalama) Ürünler listesi üzerinde gerçekleştirmesine olanak tanır ve sonuçları HTTP GET istekleri için bir IActionResult olarak döner.
Program.cs'de OData Hizmetlerini Kaydedin
.NET 6 uygulamasina OData'yi entegre etmek icin gerekli OData paketlerini yükleyip yapılandırmamız gerekir. Bu, OData modelini tanımlamayı, OData ara katmanını kurmayı ve filtreleme, sıralama ve genişletme gibi OData özelliklerini desteklemek icin 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. İlk olarak, gerekli ad alanlarını içe aktarıp bir WebApplicationBuilder örneği oluşturur. GetEdmModel yöntemi, ODataConventionModelBuilder kullanarak OData modelini tanımlar ve Service varlıkları için bir varlık seti belirtir. AddOData yöntemi daha sonra OData hizmetlerini yapılandırmak için çağrılır ve sorgu sonuçları için seçme, filtre, sıralama, sayma, genişletme ve maksimum üst değer olarak 20 belirleme gibi seçenekleri etkinleştirir. Bu yapılandırma, uygulamanın OData sorguları ile etkili bir şekilde başa çıkmasını sağlar.
GetEdmModel() yöntemini kullanan AddOData() yöntemi, sorgulama için kullanılan veri modelini alır, bir OData hizmetinin temelini oluşturur. Bu hizmet, sunulan verileri tanımlamak için Varlık Veri Modeli (EDM) olarak bilinen soyut bir veri modeli kullanır. ODataConventionModelBuilder sınıfı, kod gereksinimlerini en aza indirerek varsayılan adlandırma kurallarıyla bir EDM üretir. Alternatif olarak, geliştiriciler EDM üzerinde daha fazla kontrol sağlamak için ODataModelBuilder sınıfını kullanabilir.
Kodun Ekran Görüntüsü

Hizmeti Çalıştırma
Hizmeti çalıştırdıktan sonra, aşağıdaki gibi çeşitli OData sorgu seçeneklerini kullanarak Hizmeti sorgulayabilirsiniz:
https://localhost:7131/odata/Service
Programın Çıktısı

IronPDF'ye Giriş
IronPDF, dosyaların PDF'e dönüştürülmesi, PDF sayfalarının bölünmesi ve PDF'den sayfaların çıkarılması işlemlerini .NET uygulamalarında basitleştirmek üzere tasarlanmış kapsamlı bir C# kütüphanesidir. HTML, CSS, resimler ve JavaScript'ten PDF oluşturma dâhil olmak üzere geniş bir dizi özellik sunmakta, geliştiricilerin web i̇çeriğini yüksek kaliteli PDF belgelerine kolayca dönüştürmelerine izin vermektedir. Sezgisel API'si ve güçlü render motoruyla IronPDF, geliştiricilere PDF oluşturma süreçlerini düzene sokma olanağı tanıyarak, uygulamalara dinamik belge oluşturma yeteneklerinin kolay bir şekilde entegre edilmesini sağlar.

Proje İçin IronPDF Ekleme
IronPDF'i Visual Studio'da kurmak için, NuGet Paket Yöneticisi Konsoluna 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 veya benzeri bir kütüphaneden ChromePdfRenderer sınıfını kullanabiliriz. Bu örnek, bir Çalışan kaydının detayları ile nasıl bir PDF oluşturulacağını göstermektedir.
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 çalışan kişinin adını gösteren bir PDF belgesi oluşturmak için IronPDF'i kullanır. C# kayıtlarının .NET uygulamalarında PDF oluşturma ile ne kadar sorunsuz bir şekilde entegre olabileceğini göstermektedir.

Sonuç
OData, .NET'te standart sorgulama ve manipülasyon yetenekleri sağlayarak RESTful API'lerin geliştirilmesini ve tüketilmesini basitleştirir. Ayrıca veri erişimini ve yönetimini kolaylaştırarak geliştirme verimliliğini artırmak için Entity Framework ile de entegre edilebilir. OData, zengin sorgu işlevleri ve geliştirilmiş geliştirici deneyimi ile API geliştirmeyi hızlandırır, farklı platformlar arasında sorunsuz entegrasyon ve birlikte çalışabilirlik sağlar. Ek olarak, IronPDF, .NET uygulamaları içinde sağlam PDF manipülasyonu için kapsamlı özellikler ve destek sunar.
Sıkça Sorulan Sorular
OData, .NET'te API geliştirmeyi nasıl kolaylaştırır?
OData, .NET'te standartlaşmış bir protokol sağlayarak API geliştirmeyi kolaylaştırır. CRUD işlemleri kullanılarak veri sorgulama ve manipüle etme imkanı verir. URL'ler ve HTTP fiilleriyle RESTful uygulamaları takip eder ve veriyi JSON veya AtomPub formatlarında temsil etmek için bir Varlık Veri Modeli (EDM) kullanır.
.NET uygulamalarında OData kullanmanın temel faydaları nelerdir?
.NET uygulamalarında OData kullanmanın temel faydaları arasında standartlaşma, zengin sorgu yetenekleri, geliştirilmiş geliştirici deneyimi ve farklı platformlar arasında uyumluluk yer alır, bu da karmaşıklığı azaltır ve verimli veri çekimini artırır.
Bir ASP.NET Core uygulamasında OData servisini nasıl kurabilirim?
Bir ASP.NET Core uygulamasında OData servisi kurmak için bir OData modeli tanımlamanız ve ara yazılımı yapılandırmanız gereklidir. Microsoft.AspNetCore.OData NuGet paketini yükleyip ODataConventionModelBuilder kullanarak varlık veri modelinizi tanımlayabilirsiniz.
OData'daki EnableQuery özelliğinin rolü nedir?
OData'daki EnableQuery özelliği, istemcilerin bir OData denetleyici tarafından sunulan veriler üzerinde filtreleme, sıralama ve sayfalama gibi işlemleri gerçekleştirmesine izin verir, bu da API'nin esnekliğini ve kullanılabilirliğini artırır.
.NET'te HTML içeriğinden nasıl PDF oluşturabilirim?
.NET'te HTML içeriğinden PDF oluşturmak için IronPDF kütüphanesini kullanabilirsiniz. HTML dizgesi oluşturarak ve ChromePdfRenderer sınıfını kullanarak, HTML'yi bir PDF belgesi olarak render edebilir, ardından bunu bir dosya olarak kaydedebilirsiniz.
ODataConventionModelBuilder'ın .NET'teki amacı nedir?
ODataConventionModelBuilder, .NET uygulamalarında OData modelini tanımlamak için gereken kod miktarını azaltarak, varsayılan adlandırma kuralları kullanarak otomatik olarak bir Varlık Veri Modeli (EDM) üretir.
.NET'te PDF manipülasyonu için kapsamlı bir kütüphane nedir?
IronPDF, C# dilinde PDF manipülasyonu için kapsamlı bir kütüphanedir. Dosyaları PDF'lere dönüştürme, PDF sayfalarını ayırma ve kaldırma, ve HTML'den PDF oluşturma gibi görevleri kolaylaştırır.
OData, .NET servislerinde nasıl etkileşim geliştirmeyi artırır?
OData, OData standardına uygun istemcilerin .NET tabanlı OData servisleriyle sorunsuz bir şekilde etkileşime girmesini sağlayarak, farklı uygulama 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'ler içindeki verileri manipüle etmek için temel işlemler olan Oluşturma, Okuma, Güncelleme ve Silme işlemlerine atıfta bulunur.




