ASP.NET Core ile C# Web Uygulaması Oluşturma
[[academy-video-youtube({"vid": "87oOF9Ve-KA", "start_time": "0", "title": "ASP.NET Core ile C# Web Uygulaması Oluşturma", "creator": "Tim Corey", "length": "52m 05s"})]]
Web uygulamaları oluşturmak, modern geliştiriciler için temel bir beceridir ve temel proje yapılarını anlamak esastır. Tim Corey'nin "Web API'ye Giriş" videosundan ilham alarak bu makale, ASP.NET Core çerçevesini kullanarak web uygulamaları kurmanın karmaşıklıklarına derinlemesine dalar.
Tim'in içgörülerini izleyerek web uygulamanızı kurma, yapılandırma ve optimize etme yollarını keşfedeceğiz, ASP.NET Core çerçevesinin tam potansiyelinden yararlanarak etkili ve sürdürülebilir web sayfaları ve API'ler oluşturmayı keşfediyoruz. İster web geliştirmeye yeni başlıyor olun, ister becerilerinizi geliştirmek istiyor olun, bu kılavuz, web geliştirme iş yükünün karmaşıklıklarını nasıl aşacağınızı göstererek, etkin ve yüksek performanslı web uygulamaları oluşturmak için gereken bilgileri sağlar.
Giriş
Tim Corey, öğreticiye ASP.NET Core ile API'lar oluşturma konusu tanıtarak başlar. Cihazlar arasında iletişimi kolaylaştıran, modern yazılım geliştirmede API'lerin oynadığı kritik rolü açıklayarak, güçlü ve ölçeklenebilir web uygulamaları oluşturmak için API temellerini anlamak bir önem taşır.
Tim, farklı web geliştirme çerçeveleri ('Blazor web sunucusu' ve 'Blazor web derlemesi' gibi) arasında entegrasyon sağlamak için ASP.NET Core'un Christians AS'in temel rolünü açıkladı. Blazor sayfalarının temel proje türü bile çoklu projelerde çeşitli işlevselliklerin sorunsuz entegrasyonunu etkinleştirir.
ASP.NET Core Web API Projesi Oluşturma
Başlangıç için, Tim Corey, yeni bir ASP.NET Core Web API projesi kurmayı gösterir. Videosunda özetlenen adımlar şunlardır:
- Visual Studio'yu Açma: Visual Studio Yükleyicisini açarak, yeni bir proje oluşturma seçeneğini seçin.

- API Şablonunu Seçme: Proje şablonlarından "ASP.NET Core Web API" seçin ve İleri'ye tıklayın.

- Proje Ayarlarını Yapılandırma: Proje adını, yerini ve çözüm adını girin.

- Ek Bilgiler: .NET Çerçevesini seçin, Kimlik Doğrulama türünü seçin ve diğer ayarların değiştirilmemesini önerir.

- Proje Oluşturma: Varsayılan yapılandırmalar ve gerekli kod ile projeyi oluşturmak için "Oluştur"a tıklayın.
Bu kurulum, Program.cs, controller klasörü ...
Varsayılan API Uygulama Görünümü
Tim Corey'nin videosunda 5:57'de, ASP.NET Core tarafından oluşturulan varsayılan API uygulamasının bir görünümünü sağlar.
Varsayılan Uygulamayı Çalıştırma
Tim, geliştiricilerin kutudan çıktığı gibi elde ettiklerini göstermek için varsayılan uygulamayı çalıştırarak başlar. Çalıştırıldığında, proje API'yı oluşturur, gerekli NuGet paketlerini indirir ve bir web sayfasını başlatır. Bu ilk kurulum, API'nin temel yapısını ve işlevlerini herhangi bir değişiklik yapmadan gösterir.

API ile Etkileşim
Başlatılan web sayfası, şu anda OpenAPI olarak bilinen Swagger tarafından desteklenmektedir. Swagger, API ile etkileşim için kullanıcı dostu bir arayüz sağlar. Hem geliştiricilerin hem de geliştirici olmayanların API uç noktalarını kolayca anlamalarını ve test etmelerini sağlar. Bu arayüz, API'nin nasıl çalıştığını görselleştirmek ve belgeler oluşturmak için özellikle faydalıdır.
Swagger'ı Keşfetme
Swagger, API'deki mevcut uç noktaları sergiler. Varsayılan kurulumda, önceden yapılandırılmış uç noktalardan biri 'hava tahmini' uç noktasıdır. Bu uç noktasına tıklayarak ve 'Deneyin' özelliğini kullanarak, kullanıcılar API çağrısını gerçekleştirebilir ve yanıtı görebilir. Bu yanıt, JSON formatında bir hava tahmini içerir ve verilerin API'den nasıl döndüğünü gösterir.
Tim, 8:32'de, ham JSON verileri tarayıcıdan doğrudan okumak biraz zor olabilirken, Swagger'ın dokümantasyon katmanının bunu çok daha sindirilebilir hale getirdiğini vurgular. Dokümantasyon, uç nokta hakkında, istek yöntemi (GET, POST, vb.), döndürülen verilerin yapısı ve gerekli parametreler dahil olmak üzere ayrıntılı bilgiler sağlar.
JSON Belgeleri ve API Versiyonlama
Swagger ayrıca 9:10'da Tim'in işaret ettiği gibi, API'yi makine tarafından okunabilir bir formatta belgeleyen bir JSON dosyası oluşturur. Bu belge, API ile etkileşimde bulunması gereken diğer uygulamalar için kritik öneme sahiptir, çünkü mevcut uç noktaları, veri şemalarını ve beklenen yanıtları açıklar.
Tim, 9:29'da API'lerde versiyonlamanın önemini vurgular. Varsayılan kurulum, birden fazla API versiyonunun olasılığına işaret eden bir versiyon göstergesi içerir. Versiyonlama, geriye dönük uyumluluğu sürdürmek için hayati öneme sahiptir. API'deki değişiklikler mevcut istemcileri kırabileceğinde, birden fazla sürüm olması, geliştiricilerin mevcut kullanıcıları bozmadan yeni özellikler veya değişiklikler sunmasına olanak tanır.
API Nedir?
Tim Corey, 11:22'de API'lerin (Uygulama Programlama Arayüzleri) modern web geliştirmedeki temel rolünü açıklar. Farklı yazılım bileşenleri arasında veri alışverişini yönetmenin ve güvenliğini sağlamanın önemini vurgular.
API'lerin Amacı
Tim, çoğu uygulamanın veri - elde etme, manipülasyon ve gösterim - etrafında döndüğünü vurgular. API'ler, kullanıcı arayüzü ile alttaki veriler arasında ara bulucu olarak hizmet eder, güvenli ve verimli bir veri erişim yolu sağlar. Bu merkezileşme, birkaç nedenden dolayı önemlidir:
Güvenlik: API'ler veri erişimini yönetmek için güvenli bir yol sunar. Mobil ve istemci tarafındaki uygulamalar, müşteri kodu içinde veritabanı kimlik bilgilerini gömmenin ortaya çıkan ciddi güvenlik risklerini önlemek için doğrudan veritabanlarına bağlanmamalıdır.
- Soyutlama: API'ler veri katmanını kullanıcı arayüzünden soyutlar, böylece farklı istemci uygulamaları (mobil uygulamalar, web uygulamaları, masaüstü uygulamaları) veritabanını veya kimlik bilgilerini açığa çıkarmadan aynı veri kaynağı ile etkileşime geçebilir.
Farklı Çerçevelerde Esneklik
Tim, API'lerin belirli çerçeveler veya dillere sınırlı olmadığını belirtir. Örneğin, bir C# API, Angular, React veya Vue gibi JavaScript çerçeveleri tarafından erişilebilir, API'lerin platformlar arası yeteneklerini sergiler.
API Web Uygulama Kod İncelemesi
Tim Corey, 15:21'de, bir ASP.NET Core API projesinin yapısını ve işlevselliğini ayrıntılı bir incelemeye başlar. Aşağıda, HTTP sunucusu ve sunucu tarafı teknolojilerle çalışırken bir API web uygulaması oluştururken anlamanız gereken önemli noktalar bulunmaktadır:
1. Program.cs'ye Genel Bakış
Tim Program.cs'yi gözden geçirir, web uygulamasını oluşturduğunu ve denetleyiciler ve Swagger (OpenAPI) için bağımlılık enjeksiyonu gibi hizmetleri ayarladığını belirtir. Kod, uygulamayı oluşturmadan ve çalıştırmadan önce temel hizmetleri ayarlar.
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
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();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
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();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();2. Ortam Yapılandırması
Tim launchSettings.json içindeki ortam ayarlarının nasıl yapılandırıldığını açıklar. Varsayılan ortam, yerel test için 'Geliştirme' olarak ayarlanır ve Swagger'ı etkinleştirir. Üretimde, güvenlik için Swagger genellikle devre dışı bırakılır, ancak geliştirme kontrolünü kaldırarak etkinleştirilebilir.
{
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"WebApplication": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}3. HTTPS Yönlendirmesi ve Denetleyiciler
Tim, HTTPS yönlendirmesi ve denetleyicilerin eşlenmesini belirtir. Bu yapılandırma, API yollarının düzgün bir şekilde yapılandırılmasını sağlar. HTTP istek ve yanıt yollarında açıklık için bir 'api' ön eki kullanmayı tercih eder, bu da API yollarının farklı olmasını sağlamak için değiştirilebilir.
4. Hava Tahmini Denetleyicisi
Tim WeatherForecastController.cs içine girerek, rota yapılandırmasının altını çizer. Varsayılan rota /weatherforecast olup, 'api' öneki eklenerek değiştirilebilir. Denetleyici belirtilen rota aracılığıyla erişilebilen HTTP GET kullanarak veri alır.
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public string? Summary { get; set; }
}using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public string? Summary { get; set; }
}5. HTTP Fiilleri ve Yönlendirme
Tim, HTTP fiillerinin (GET, POST, PUT, DELETE) API uç noktalarını nasıl tanımladığını açıklar. GET isteği için tarayıcı, denetleyicide belirtilen yöntemi çağırır. Diğer fiiller için test etmek için Postman gibi araçlara ihtiyaç vardır.
Bir API Denetleyicisi Oluşturma
Tim, bir API denetleyicisi oluşturma sürecini göstermektedir:
Bir Denetleyici Ekleme: 'Controllers' klasörüne sağ tıklayın ve 'Add > Controller'ı seçin.
- API Denetleyicisi Seçme: 'API Controller - Empty'yi seçin ve denetleyici için bir ad sağlayın.

- Eylemleri Tanımlama: Farklı HTTP isteklerini işlemek için denetleyicide eylemleri uygulayın. Tim, GET, POST, PUT ve DELETE yöntemlerinin nasıl tanımlanacağına dair kod örnekleri verir. Detaylı kod için lütfen 26:25'ten itibaren videoya bakınız.
Bu uygulamalı gösterim, geliştiricilerin çeşitli istek türlerini işlemek için API denetleyicilerini nasıl oluşturacaklarını ve yapılandıracaklarını anlamalarına yardımcı olur.
REST API
Tim Corey, REST'i (Temsili Durum Transferi) ve ilkelerini tanıtır:
REST Nedir: REST, ağ uygulamalarını tasarlamak için bir mimari tarzdır. Durumsuz iletişime dayanır ve işlemleri gerçekleştirmek için standart HTTP yöntemlerini (GET, POST, PUT, DELETE) kullanır.
RESTful İlkeler: RESTful API'ler kaynakları temsil etmek için URL desenlerini kullanır. Örneğin,
/userstüm kullanıcıları alırken,/users/5ID'si 5 olan belirli bir kullanıcıyı alır.- REST Uyumu: Tim, tam REST uyumuna ulaşmanın zor olabileceğini, çünkü REST'in aslında teorik bir model olduğunu not eder. Ancak, REST ilkelerine bağlı kalmak daha sezgisel ve tutarlı API'lere yol açabilir.
Tim, REST uyumuna ulaşmaya çalışırken, API tasarımını kullanılabilirlik ve işlevselliği sağlamak için pratik düşüncelerin yönlendirmesi gerektiğini vurgular.
Minimal API Uygulaması
Corey, ASP.NET Core'da API geliştirmeye yönelik basit bir yaklaşım olan Minimal API'leri tanıtır:
Minimal API'lerin Kurulumu: Tim, projeyi kurarken denetleyici kullanım seçeneğini işaretlemeden bir Minimal API projesi nasıl oluşturulacağını gösterir.
Basitleştirilmiş Kod: Minimal API'ler, kontrolcüler ve rotalama özelliklerine duyulan ihtiyacı ortadan kaldırır, geliştiricilerin
Program.csiçinde doğrudanapp.MapGet(),app.MapPost()gibi yöntemler kullanarak uç noktaları tanımlamasına olanak tanır.- Kod Örneği: Tim, tek bir kod satırının bir uç noktayı nasıl tanımladığına dair bir kod örneği verir. Bir GET isteğini minimal yapılandırma ile bir uç noktaya nasıl eşleştireceğini gösterir.
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();Minimal API'ler, özellikle daha küçük uygulamalar veya mikro hizmetler için geliştirmeyi basitleştirmek için tasarlanmıştır.
Neden Minimal API
Tim, Minimal API'lerin faydalarını tartışır:
- Yeni Proje Oluştur: Bu sefer Tim yeni bir Web API projesi oluşturur, ancak ek bilgi kısmında denetleyiciler kullanım seçeneğini işaretlemez. Bu, projenin minimal API'leri kullanmasına izin verir.

Azaltılmış Kalıp Kod: Minimal API'ler denetleyicilere ve ek yönlendirme yapılandırmalarına olan ihtiyacı ortadan kaldırarak kalıp kod miktarını azaltır.
Sadeliği: Basit API'ler için daha anlaşılır bir yaklaşım sunar, kodun anlaşılmasını ve bakımını kolaylaştırır.
- Mikro Hizmetler: Minimal API'ler, API'nin sınırlı bir dizi eylemi gerçekleştirmesi gereken ve geleneksel denetleyicilerin tam özellik kümesine ihtiyaç duymayan mikro hizmetler için özellikle yararlıdır.
Tim, Minimal API'lerin belirli senaryolar için faydalı olduğunu kabul ederken, daha büyük veya daha karmaşık uygulamalar için geleneksel denetleyicilerin daha uygun olabileceğini belirtiyor.
En İyi Uygulamalar, Özet ve Son Yorumlar
Tim Corey, API geliştirme için en iyi uygulamalarla eğitimini sona erdiriyor:
Kapsamların Ayrılması: İş mantığını doğrudan
Program.csveya kontrolcü eylemlerine yerleştirmekten kaçının. Aksine, kod temizliğini korumak ve SOLID ilkelerine uymak için mantığı ayrı sınıf kütüphanelerine ya da hizmetlere taşıyın.API'nin Bir Kullanıcı Arayüzü Olarak Görülmesi: API'leri bir kullanıcı arayüzü olarak ele alın, onları sezgisel ve iyi belgelenmiş yapmaya odaklanın. Tim, sağlam belgelerin ve etkili API tasarımının önemini vurguluyor.
Swagger ve Belgeler: API belgeleri ve sürümleme için Swagger'ı kullanın. Tim, XML yorumlarının kodda nasıl kullanılarak ayrıntılı API belgelerinin üretilebileceğini açıklar.
- Ek Hususlar: API performansını ve güvenliğini artırmak için önbellekleme, hız sınırlama gibi faktörleri değerlendirin.
Tim, geliştiricilerin farklı proje türlerini ve araçlarını keşfetmelerini teşvik eder, API'leri anlamanın ve modern yazılım geliştirmedeki rollerini vurgular.
Sonuç
Tim Corey'nin videosu, ASP.NET Core'da API'ler oluşturma ve yönetme üzerine kapsamlı bir kılavuz sunar, hem RESTful hem de Minimal API yaklaşımlarını ele alır. Onun içgörüleri, geliştiricilerin API tasarımının özünü kavramalarına yardımcı olmanın yanı sıra, etkili çözümler uygulama konusunda pratik tavsiyeler sunar.
C# ve diğer proje türleri hakkında daha derinlemesine bilgiler ve öğreticiler için, Tim Corey'nin YouTube kanalını ziyaret ettiğinizden emin olun, IAmTimCorey.


