Dotnet Core 3.1 ile Restful Api Altyapısı Oluşturma Part-I

Mustafa Alkan
BilgeAdam Teknoloji
3 min readAug 18, 2020

Merhabalar, bu makalemde Dotnet Core 3.1 ile basit bir web Api uygulaması oluşturacağız ve de EF Core Code First, Generic Repository, Unit of Work, Dependency Injection, IOC gibi yaklaşımları ve tasarım desenlerini; Automapper, Swagger, Linq gibi farklı kütüphaneleri kullanacağız. Adım adım tüm kurumları ve implementasyonları anlatacağım.

İlk olarak eğer kurulu değilse DotnetCore 3.1 SDK’sını buradan indirip kuralım:

Şimdi de VS 2019'muzu açıp Create New Project -> Asp.net Core Web Application ve API’yi seçip projemizi oluşturuyoruz.

Projemizi oluşturduysak şimdi de database tarafında tablolara mapleyeceğimiz entity classlarımızı oluşturalım. Yeni bir Entities directorysi yaratıp içine aşağıdaki classları oluşturalım.

1: Product Classı

2- OrderItems Classı

3- Son olarak Order Classı

Entity classlarımızı hazırladıysak, şimdi de DataContext classımız oluşturalım. Tabi bunun için bazı paket kurulumlarına ihtiyacımız var.

İsterseniz Dotnet CLI üzerinden, isterseniz de Nuget Package Manager üzerinden Entity Framework Core packagelarını yüklememiz gerekiyor:

dotnet add package Microsoft.EntityFrameworkCore

dotnet add package Microsoft.EntityFrameworkCore.Tools

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Eğer Dotnet CLI arayüzünü kullanmıyorsanız VS üzerinden Package Manager Console ekranına gelip:

Install-Package Microsoft.EntityFrameworkCore

Install-Package Microsoft.EntityFrameworkCore.Tools

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Kurulum işlemlerimiz tamamlandıysa şimdi gelin DbContext classımız oluşturalım: EfCoreDbContext directorysi oluşturup içine DbContext nesnesinden türeyen SampleDbContext classını oluşturalım.

Şimdi de Startup.cs classımızın altındaki ConfigureServices methodunun içine şu kod parçacığını dahil edelim.

Daha sonra Sql Serverımızın Connection Stringini dahil etmek için app.settings dosyasını açalım ve hangi database’e migrate etmek istiyorsak DefaultConnection key’ine karşılık connection stringini dahil edelim:

Şimdi ise Entity classlarımızı Database’e migrate edelim:

Dotnet CLI ile komutlarımızı çalıştırmak istersek:

dotnet ef migrations add Initial

dotnet ef database update

veya Package Manager Console üzerinden:

Add-Migration Inital

Update-Database

Generic Repository:

Generic Repository: Temel olarak database CRUD işlemleri için her bir DB Entity için tek tek Repositoryler oluşturabilirdik. Ama ben kod tekrarından kaçınmak için Generic Type <T> ifadesiyle her bir entity için tek bir yapı kurmak istiyorum. Yani ben nesnemi oluşturduğum Generic Repository sınıfına göndereyim ve de o nesneye ait CRUD işlemleri yapsın.

Generic Repository ile bütün entity nesnelerime ait database işlemlerini tek bir class üzerinden manage edebiliyoruz ve kod tekrarından kurtulmuş oluyoruz. Böylece projede ne kadar fazla classa sahip olursak olalım hiç bir değişikliğe ihtiyaç duymuyoruz. Bu da aklımıza SOLID presiplerinden Open / Closed prensibini akla getiriyor :)

Şimdi ise implementasyona geçelim.

GenericRepository klasörünü oluşturup IGenericRepository interfaceni oluşturalım:

Şimdi de Generic Repository classımız oluşturup yukarıdaki interfacei inherit edip interface methodlarını implemente edelim:

Unit Of Work

Tüm transactionlarımızı tek bir yerden yönetip Commit, Rollback ve Disposs edebilmemi sağlayan güzel bir tasarım kalıbıdır. Böylece bütün DB işlemlerin toplu halde yapılabilmesini ve hata anında geri alınabilmesini sağlar. Aşağıda kodları paylaştığım alanda da göreceksiniz ki, Unit of Work classı altında generic repositorylerinden türettiğimiz repository classlarını encapsule eder. Singleton prensibi ile de oluşturduğum repository nesnelerinin tek bir defaya mahsus oluşturulmasını sağlarız. Aşağıdaki örnek kodda göreceğimiz üzere:

Şimdi de IUnitOfWork interface’i ve UnitOfWork classını oluşturalım:

Şimdi ise Dependency Injection ilkesi gereği gevşek bağımlılık sağlamak için IUnitOfWork ve UnitOfWork.cs nesnelerini birbine bağlayalım. Startup.cs classı içerisinde ConfigureServices methodunun içine aşağıdaki kod parçasını yapıştırabiliriz:

Bu makalemin 2. partında Dependency Injection patternine değinip; Service ve Controller classlarımızı oluşturup Swagger kurulumunu yapacağız. Aşağıdaki linkten makalenin devamına ulaşabilirsiniz:

Dotnet Core 3.1 ile Restful Api Altyapısı Oluşturma Part-II

--

--

Mustafa Alkan
BilgeAdam Teknoloji

Senior Software Engineer #DotnetCore #Aspnet #Mvc #Net5