ASP.NET Core ile REST API geliştirmek isteyenler için hazırladığım açık kaynak başlangıç projemi paylaşmak istiyorum.
Proje Adı: AspNetRestKit
GitHub: https://github.com/hamzadenizyilmaz/AspNetRestKit
Teknoloji: .NET 8 / ASP.NET Core Web API
Veritabanı Desteği: SQLite, SQL Server, PostgreSQL
Lisans: GPL-3.0
Amaç: Temiz, anlaşılır, geliştirilebilir ve güvenli bir REST API başlangıç altyapısı sunmak.
AspNetRestKit, sıfırdan API yazarken tekrar tekrar kurulması gereken temel yapıları hazır şekilde sunan bir ASP.NET Core Web API starter kit projesidir.
Proje içerisinde kimlik doğrulama, rol bazlı yetkilendirme, repository/service yapısı, DTO kullanımı, Swagger dokümantasyonu, loglama, audit kayıtları, pagination, filtering, sorting, API versioning ve multi-database desteği gibi birçok temel backend ihtiyacı hazır şekilde yer almaktadır.
Bu proje özellikle ASP.NET Core öğrenenler, REST API mimarisi kurmak isteyenler, kendi SaaS/API altyapısına başlangıç yapmak isteyenler veya temiz klasör yapısına sahip örnek bir backend projesi arayanlar için hazırlanmıştır.
Projenin Öne Çıkan Özellikleri
1. .NET 8 ve ASP.NET Core Web API Altyapısı
AspNetRestKit, güncel .NET 8 altyapısı ile hazırlanmıştır. REST API geliştirme mantığına uygun şekilde controller, service, repository, DTO, mapper, middleware ve settings yapıları ayrılmıştır.
Proje, yeni başlayanların ve orta seviye geliştiricilerin rahatça anlayabileceği sade fakat düzenli bir mimariyle hazırlanmıştır. Aynı zamanda gerçek projelerde genişletilebilir bir temel sunar.
2. JWT Authentication
Projede JWT Bearer authentication yapısı bulunmaktadır. Kullanıcı kayıt, giriş, token alma, refresh token yenileme, token iptal etme ve mevcut kullanıcı bilgisini alma gibi temel kimlik doğrulama işlemleri mevcuttur.
Mevcut auth endpoint örnekleri:
POST /api/v1/auth/register POST /api/v1/auth/login POST /api/v1/auth/refresh-token POST /api/v1/auth/revoke-token GET /api/v1/auth/me3. Rol Bazlı Yetkilendirme
Projede Admin ve User rol yapısı bulunmaktadır.
Admin rolü: Ürün/kategori oluşturma, güncelleme, silme, durum değiştirme ve audit log görüntüleme gibi yetkilere sahiptir.
User rolü: Kimlik doğrulaması gerektiren kullanıcı endpointlerine erişebilir.
Bu yapı sayesinde gerçek projelerde ihtiyaç duyulan temel yetkilendirme mantığı örnek olarak incelenebilir ve geliştirilebilir.
4. Entity Framework Core Desteği
Veritabanı işlemleri Entity Framework Core üzerinden yapılmaktadır. DbContext, repository yapısı, entity modelleri, seed data ve provider bazlı ayarlar projede hazır şekilde bulunmaktadır.
5. Multi Database Desteği
AspNetRestKit sadece tek bir veritabanına bağlı değildir. Projede birden fazla veritabanı desteği bulunmaktadır.
Desteklenen veritabanları:
• SQLite
• SQL Server
• PostgreSQL
Varsayılan yapı SQLite ile çalışacak şekilde tasarlanmıştır. İstenirse appsettings.json üzerinden SQL Server veya PostgreSQL kullanılabilir.
Örnek provider ayarı:
"DatabaseSettings": {
"Provider": "SQLite",
"ConnectionString": ""
}6. Swagger / OpenAPI DokümantasyonuAPI endpointlerini test etmek ve dokümante etmek için Swagger/OpenAPI desteği bulunmaktadır. Projeyi çalıştırdıktan sonra Swagger UI üzerinden endpointler kolayca test edilebilir.
Varsayılan Swagger adresleri:
https://localhost:7025/swagger http://localhost:5025/swagger7. Product ve Category CRUD Yapısı
Projede örnek olarak ürün ve kategori yönetimi bulunmaktadır. Bu yapı gerçek projelerde ürün, hizmet, müşteri, sipariş, fatura veya farklı entity yapılarına genişletilebilir.
Product endpoint örnekleri:
GET /api/v1/products
GET /api/v1/products/{id}
GET /api/v1/products/by-category/{categoryId}
POST /api/v1/products
PUT /api/v1/products/{id}
PATCH /api/v1/products/{id}/status
DELETE /api/v1/products/{id}Category endpoint örnekleri:GET /api/v1/categories
GET /api/v1/categories/{id}
POST /api/v1/categories
PUT /api/v1/categories/{id}
PATCH /api/v1/categories/{id}/status
DELETE /api/v1/categories/{id}8. Pagination, Filtering ve SortingListeleme endpointlerinde sayfalama, filtreleme ve sıralama desteği bulunmaktadır. Bu yapı, büyük verilerle çalışan API projeleri için temel ihtiyaçlardan biridir.
Örnek sorgu:
GET /api/v1/products?search=mouse&minPrice=10&maxPrice=100&pageNumber=1&pageSize=10&sortBy=price&sortDirection=asc9. Soft Delete Desteği
Silme işlemlerinde doğrudan veriyi fiziksel olarak kaldırmak yerine soft delete mantığı kullanılmaktadır. Bu yapı, gerçek projelerde veri güvenliği ve geçmiş kayıt takibi açısından önemlidir.
10. Serilog ile Loglama
Projede Serilog ile console ve file logging yapısı bulunmaktadır. Uygulama logları dosyaya yazılabilir ve ileride merkezi loglama sistemlerine taşınabilir.
Log dosya örneği:
logs/aspnetrestkit-.log11. Audit Log Yapısı
Önemli işlemler audit log olarak kayıt altına alınmaktadır.
Audit log kapsamındaki işlem örnekleri:
• Kullanıcı kaydı
• Kullanıcı girişi
• Ürün oluşturma
• Ürün güncelleme
• Ürün silme
• Kategori oluşturma
• Kategori güncelleme
• Kategori silme
• Ürün/kategori durum değiştirme
• Refresh token iptal etme
Audit log endpointi:
GET /api/v1/audit-logsBu endpoint Admin rolü ile kullanılabilir.
12. Global Exception Handling
Projede global hata yakalama middleware yapısı bulunmaktadır. API cevaplarında doğrudan stack trace gösterilmemesi hedeflenmiştir. Böylece hata yönetimi daha kontrollü ve güvenli hale getirilmiştir.
13. Security Headers ve Rate Limiting
Güvenlik tarafında security headers, rate limiting, özel validation response yapısı ve JWT Bearer authentication gibi temel güvenlik bileşenleri projeye eklenmiştir.
Bu yapı sayesinde API tarafında temel güvenlik katmanı oluşturulmuş olur. Canlı projelerde ihtiyaçlara göre daha da sıkılaştırılabilir.
14. Standart API Response Formatı
API cevaplarında standart response formatı kullanılarak frontend tarafında daha düzenli veri işleme imkânı sağlanmıştır.
Bu yapı; başarılı response, başarısız response, mesaj, veri ve hata yönetimi gibi alanlarda geliştirilebilir bir temel sunar.
15. GitHub Actions CI Pipeline
Projede GitHub Actions workflow yapısı bulunmaktadır. Pipeline; restore, build ve güvenlik kontrolü gibi temel işlemleri çalıştıracak şekilde hazırlanmıştır.
Workflow dosyası:
.github/workflows/dotnet-ci.ymlKlasör Yapısı
Projede sorumluluklar klasör bazında ayrılmıştır.
Controllers -> HTTP isteklerini karşılar. Services -> İş kuralları ve uygulama mantığı bulunur. DAL -> DbContext, repository, configuration ve seed data yapıları bulunur. Models -> Veritabanı entity modelleri bulunur. DTOs -> Request/response modelleri bulunur. Mapper -> Manuel mapping işlemleri bulunur. Middleware -> Exception handling ve security headers gibi yapılar bulunur. Settings -> Strongly typed configuration modelleri bulunur. database -> Provider bazlı SQL scriptleri bulunur.Bu yapı sayesinde proje hem sade kalır hem de büyütülebilir hale gelir.
Kullanılan Teknolojiler
• .NET 8
• ASP.NET Core Web API
• Entity Framework Core
• SQLite
• SQL Server
• PostgreSQL
• JWT Bearer Authentication
• Serilog
• Swagger / OpenAPI
• GitHub Actions
• Repository Pattern
• Service Layer
• API Versioning
• Audit Logging
• Rate Limiting
• Soft Delete
• DTO Yapısı
• Global Exception Middleware
Kurulum
Projeyi klonlamak için:
git clone https://github.com/hamzadenizyilmaz/AspNetRestKit.git cd AspNetRestKitPaketleri yüklemek için:
dotnet restoreProjeyi build etmek için:
dotnet buildMigration oluşturmak için:
dotnet ef migrations add InitialCreateVeritabanını güncellemek için:
dotnet ef database updateProjeyi çalıştırmak için:
dotnet runArdından Swagger üzerinden API test edilebilir:
https://localhost:7025/swaggerVisual Studio ile Çalıştırma
- Visual Studio 2022 veya güncel Visual Studio sürümünü açın.
- AspNetRestKit.sln dosyasını açın.
- NuGet paketlerinin restore edilmesini bekleyin.
- AspNetRestKit projesini startup project olarak seçin.
- HTTPS launch profile ile projeyi başlatın.
- Swagger UI üzerinden endpointleri test edin.
• ASP.NET Core Web API öğrenmek isteyenler
• JWT authentication yapısını incelemek isteyenler
• Repository ve service layer mantığını görmek isteyenler
• Swagger dokümantasyonu olan örnek API arayanlar
• SQLite, SQL Server veya PostgreSQL ile çalışabilecek örnek proje isteyenler
• Kendi SaaS, panel, mobil uygulama backend’i veya entegrasyon API’si için başlangıç altyapısı arayanlar
• Temiz klasör yapısına sahip, incelenebilir ve geliştirilebilir bir .NET projesi arayanlar
Canlı Projede Kullanacaklara Not
Bu proje bir başlangıç ve örnek altyapı olarak hazırlanmıştır. Canlı ortamda kullanmadan önce aşağıdaki kontrollerin yapılması önerilir:
• Varsayılan JWT secret kesinlikle değiştirilmelidir.
• Secret değerleri appsettings içinde düz metin olarak tutulmamalıdır.
• Environment variable, user secrets veya secret manager kullanılmalıdır.
• CORS ayarları canlı domainlere göre sınırlandırılmalıdır.
• Swagger canlı ortamda kapatılmalı veya koruma altına alınmalıdır.
• HTTPS zorunlu hale getirilmelidir.
• Production veritabanı bağlantıları güvenli şekilde yapılandırılmalıdır.
• Rate limiting değerleri gerçek trafiğe göre düzenlenmelidir.
• Gerçek veritabanı şifreleri, .env dosyaları, loglar ve secret dosyaları repoya eklenmemelidir.
• Düzenli olarak paket güvenlik kontrolü yapılmalıdır.
Paket güvenlik kontrolü için:
dotnet list package --vulnerableGeliştirme ve Katkı
Projeye katkı sunmak isteyenler GitHub üzerinden fork alıp geliştirme yapabilir. Pull request göndermeden önce projenin build edildiğinden emin olunması yeterlidir.
Katkı süreci:
- Repository fork alınır.
- Yeni bir feature branch oluşturulur.
- Geliştirme yapılır.
- dotnet build ile proje kontrol edilir.
- Pull request açılır.
AspNetRestKit; ASP.NET Core Web API tarafında güvenli, düzenli, anlaşılır ve geliştirilebilir bir başlangıç altyapısı arayanlar için hazırlanmış açık kaynak bir projedir.
JWT authentication, role-based authorization, EF Core, multi database desteği, Swagger, Serilog, audit logging, pagination, filtering, sorting ve GitHub Actions CI gibi birçok temel yapı hazır şekilde bulunmaktadır.
Projeyi incelemek, yıldızlamak veya katkı sağlamak isteyenler için GitHub bağlantısı:
GitHub: https://github.com/hamzadenizyilmaz/AspNetRestKit
Görüş, öneri ve katkılarınızı beklerim.
Teşekkürler.
Projemizin 7/24 aktif kesintisiz ve sizlere sunabilmesine destek sağlayan @bilhost; ailesine çok teşekkür ederim.