post-thumb

Web uygulamaları ve mobil uygulamalar arasında veri alışverişi için RESTful API'ler günümüzde yaygın olarak kullanılmaktadır. ASP.NET Core ise .NET platformu üzerinde RESTful API'ler oluşturmak için ideal bir framework'tür. Bu makalede, ASP.NET Core ile RESTful API oluşturmanın temellerini inceleyeceğiz ve API'lerinizi daha sağlam ve ölçeklenebilir hale getirecek gelişmiş tekniklere de değineceğiz.

Makalenin Kapsamı

Bu makalede aşağıdaki konuları ele alacağız:

  • Tanımlar: API, RESTful API, ASP.NET Core, ORM, Entity Framework Core, veritabanı, katmanlı mimari, design pattern, Repository pattern, Unit of Work pattern
  • ASP.NET Core ile Yeni Bir API Projesi Oluşturma: Visual Studio ile yeni bir ASP.NET Core API projesi oluşturma ve temel yapılandırma
  • Entity Framework Core ile Veritabanı Modeli Oluşturma: Veritabanı tablolarını ve ilişkilerini temsil eden nesneler oluşturma ve Entity Framework Core ile veritabanı ile etkileşime geçme
  • Design Patternleri ve Katmanlı Mimari: Repository pattern ve Unit of Work pattern gibi design patternlerini kullanarak API'nizi daha modüler ve bakımı kolay hale getirme ve katmanlı mimari ile API'yi farklı katmanlara ayırma
  • CRUD İşlemleri için RESTful API'ler Oluşturma: GET, POST, PUT, DELETE gibi HTTP yöntemlerini kullanarak CRUD (Create, Read, Update, Delete) işlemleri için RESTful API'ler oluşturma
  • API'yi Güvenli Hale Getirme: JWT token'lar gibi kimlik doğrulama ve yetkilendirme mekanizmaları kullanarak API'nizi yetkisiz erişime karşı koruma
  • Swagger ile API Dokümantasyonu Oluşturma: Swagger kullanarak API'nizin için açık ve interaktif dokümantasyon oluşturma
  • API'yi Test Etme: Birim testleri ve uçtan uca testler ile API'nizin işlevselliğini ve güvenilirliğini test etme

Makalenin Farklılıkları

Bu makale, diğer API geliştirme makalelerinden aşağıdaki yönlerden farklıdır:

  • Kapsamlı: Makale, API geliştirmenin temellerini ve gelişmiş tekniklerini kapsar.
  • Pratik: Makalede yer alan bilgiler, örnek kodlar ve adım adım rehberler ile pekiştirilir.
  • Güncel: Makale, ASP.NET Core'un en son sürümüne ve güncel web geliştirme trendlerine göre güncellenmektedir.

Hedef Kitle

Bu makale, aşağıdaki kişilere yöneliktir:

  • ASP.NET Core ile RESTful API geliştirmeye başlamak isteyenler
  • API geliştirme becerilerini geliştirmek isteyenler
  • Daha sağlam ve ölçeklenebilir API'ler oluşturmak isteyenler

Günümüzde, web uygulamaları ve mobil uygulamalar arasında veri alışverişi için RESTful API'ler yaygın olarak kullanılmaktadır. ASP.NET Core, .NET platformu üzerinde RESTful API'ler oluşturmak için ideal bir framework'tür. Bu makalede, ASP.NET Core ile RESTful API oluşturmanın temellerini inceleyeceğiz.

Bölüm 1: Tanımlar

API (Uygulama Programlama Arayüzü): İki veya daha fazla yazılım sistemi arasında iletişim kurmak için kullanılan bir arabirimdir. API'ler, bir sistemin işlevlerini diğer sistemlere açarak veri alışverişi ve işlevsellik paylaşımı sağlar.

RESTful API (Representational State Transfer API): REST mimarisini kullanan bir API türüdür. REST, web servisleri için bir mimari stilidir ve altı temel prensibe dayanır:

  • Tanımlanmış kaynaklar: Her kaynak, bir URI (Uniform Resource Identifier) tarafından tanımlanır.
  • Tekdüzen arayüz: Tüm işlemler, HTTP yöntemleri (GET, POST, PUT, DELETE) kullanılarak gerçekleştirilir.
  • Durumsuzluk: Her istek, önceki isteklerden bağımsız olarak işlenir.
  • Önbelleğe alma: Veriler, aracılar ve istemciler tarafından önbelleğe alınabilir.
  • Katmanlama: Sistem, katmanlara ayrılabilir.
  • Kod talep edildiğinde: Sunucu, istemciye uygulama kodunu göndermez.

Rest API

ASP.NET Core: Microsoft tarafından geliştirilen, açık kaynak kodlu, platformlar arası bir web geliştirme framework'üdür. ASP.NET Core ile web siteleri, web API'leri, mobil uygulamalar ve IoT (Nesnelerin İnterneti) cihazları için uygulamalar geliştirmek mümkündür.

ORM (Object-Relational Mapping): Nesneleri veritabanı tablolarına ve sorgularına eşler ve veritabanı işlemlerini kolaylaştırır. ORM kullanarak, SQL sorguları yazmadan nesneler aracılığıyla veritabanı ile etkileşime girebilirsiniz.

ORM

Entity Framework Core: Microsoft tarafından geliştirilen, açık kaynak kodlu bir ORM framework'üdür. Entity Framework Core, .NET platformu üzerinde veritabanı ile etkileşimi kolaylaştırmak için kullanılır.

Design Pattern: API'mizin tasarımı ve geliştirilmesi için Repository Pattern ve Unit of Work Pattern gibi design patternleri kullanabiliriz. Repository pattern, veritabanı ile etkileşimi soyutlar ve veritabanına erişimi kolaylaştırır. Unit of Work pattern ise birden fazla veritabanı işlemini tek bir işlem olarak ele alarak tutarlılığı sağlar.

  • Design Pattern Özellikleri:
    • Tekrarlayan problemleri çözer. Yaygın yazılım problemlerine genel çözümler sunar.
    • Kodun yeniden kullanılabilirliğini artırır. Farklı projelerde tekrar kullanılabilir kod parçaları sağlar.
    • Kodun daha organize ve anlaşılır olmasını sağlar.
    • Kodun daha kolay test edilebilmesini sağlar.
    • Kodun daha kolay ölçeklenebilmesini sağlar.
  • Bazı Yaygın Design Pattern'ler:
    • Singleton: Tek bir instance'ın oluşturulmasını ve kullanılmasını sağlar.
    • Factory: Nesnelerin oluşturulmasını soyutlar.
    • Observer: Bir nesnenin durumundaki değişiklikleri diğer nesnelere bildirir.
    • Decorator: Nesnelere dinamik olarak yeni işlevler ekler.
    • Strategy: Farklı algoritmalar arasında seçim yapılmasını sağlar.

Design Pattern

Repository Pattern

Repository pattern, veritabanı ile etkileşimi soyutlayan bir design pattern'dir. Bu pattern, veritabanı sorgularını ve işlemlerini bir arayüz aracılığıyla gerçekleştirir ve uygulama katmanını veritabanı detaylarından gizler.

Unit of Work

Unit of Work pattern, birden fazla veritabanı işlemini tek bir işlem olarak ele alarak tutarlılığı sağlayan bir design pattern'dir. Bu pattern, tüm işlemleri hafızada tutar ve sonunda tek bir işlem olarak veritabanına kaydeder.

  • Unit of Work Özellikleri:
    • Tutarlılık: Birden fazla veritabanı işleminin tutarlı bir şekilde tamamlanmasını sağlar.
    • Atomicity: Birden fazla veritabanı işleminin tek bir işlem olarak ele alınmasını sağlar.
    • Isolation: Birden fazla veritabanı işleminin birbirinden etkilenmemesini sağlar.
    • Durability: Birden fazla veritabanı işleminin veritabanına kalıcı olarak kaydedilmesini sağlar.

Unit Of Work

Katmanlı Mimari (N-Layered Architecture) : Bu mimari, API'yi farklı katmanlara ayırarak daha modüler, bakımı kolay ve test edilebilir hale getirir. Katmanlar arasındaki bağımlılıklar azaltılarak kodun daha okunaklı ve anlaşılır olması sağlanır.

Genellikle üç katman kullanılır:

  1. Sunum Katmanı:
    • Kullanıcı arayüzü (UI) ile ilgili kodları içerir.
    • API isteklerini alır ve işleme koyar.
    • İşlem sonuçlarını kullanıcı arayüzüne gönderir.
    • HTML, CSS, JavaScript gibi web teknolojileri kullanılır.
  2. Uygulama Katmanı (Business (BLL - Business Logic Layer)) 
    • API'nin iş mantığını içerir.
    • Veritabanı sorguları ve işlemleri, CRUD işlemleri
    • Verilerin doğrulanması, hesaplamalar, iş akışları
    • Hataları yakalama ve işleme, istisnalar
    • Kimlik doğrulama, yetkilendirme
    • Verileri önbelleğe alma
    • İşlemleri ve hataları kaydetme
  3. Veri Erişim Katmanı (DAL - Data Access Layer)
    • Veritabanına bağlanma ve bağlantıyı yönetme
    • SELECT, INSERT, UPDATE, DELETE gibi SQL sorgularını oluşturma ve yürütme
    • Veritabanından gelen verileri işlemek ve uygulama katmanına uygun formatta sunmak
    • Veritabanı hatalarını yakalama ve işleme
    • Verileri önbelleğe alma (isteğe bağlı)
    • DAL Teknolojileri:
      • Entity Framework Core gibi ORM araçları
      • ADO.NET
      • Dapper gibi mikro ORM araçları
      • Veritabanı bağlantı kütüphaneleri (Npgsql, SqlConnection, etc.)
    • DAL Örnekleri:
      • Kullanıcı bilgilerini veritabanından alma
      • Ürün bilgilerini veritabanına ekleme
      • Siparişleri veritabanında güncelleme
      • Veritabanındaki log kayıtlarını okuma
    • DAL'ın Avantajları:
      • Soyutlama: Veritabanı detayları uygulama katmanından gizlenir.
      • Modülerlik: Veritabanı erişimi ayrı bir katmanda yönetilir.
      • Bakımda kolaylık: Kod daha organize ve anlaşılır hale gelir.
      • Yeniden kullanılabilirlik: DAL farklı projelerde tekrar kullanılabilir.
      • Test edilebilirlik: DAL ayrı ayrı test edilebilir.
    • DAL ile ilgili bazı önemli noktalar:
      • DAL, uygulama katmanından bağımsız olarak geliştirilmeli ve test edilmelidir.
      • DAL, veritabanı sorgularını ve işlemlerini optimize etmeye odaklanmalıdır.
      • DAL, veritabanı bağlantı bilgilerini ve kimlik bilgilerini güvenli bir şekilde saklamalıdır.
      • DAL, hata işleme ve istisna yönetimi için sağlam bir mekanizmaya sahip olmalıdır.
    • Ek Bilgiler:
      • Data Access Object (DAO) deseni, DAL'ın bir alt kümesi olarak düşünülebilir.
      • Repository deseni, DAL'da yaygın olarak kullanılan bir design pattern'dir.
      • Unit of Work deseni, birden fazla veritabanı işlemini tek bir işlem olarak ele alarak tutarlılığı sağlar.

 

N-Layered Arch