0Pricing
C# Academy · Ders

İlk Minimal API'nizi Oluşturma

Bir Minimal API projesi başlatın, yol işleyicilerini tanımlayın ve en az miktarda ek kodla türü belirlenmiş sonuçlar döndürün.

İlk Minimal API'nizi Oluşturma, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

Minimal API'ler Nedir?

.NET 6 ile tanıtılan Minimal API'ler, minimum ek kodla HTTP uç noktaları oluşturmanızı sağlar — denetleyiciler yok, eylem öznitelikleri yok; yalnızca Program.cs içinde doğrudan tanımlanan yol işleyicileri vardır. Mikro hizmetler ve hafif API'ler için idealdir.

En Basit Minimal API

Yalnızca birkaç satırda eksiksiz bir HTTP API. MapGet, MapPost, MapPut ve MapDelete yöntemleri her HTTP fiili için yol işleyicilerini tanımlar.

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello, Minimal API!");
app.MapGet("/ping", () => Results.Ok(new { status = "pong" }));

app.Run();
// That's it — no Startup.cs, no controllers

Doğru HTTP Yanıtları için Türlendirilmiş Sonuçlar

Doğru HTTP durum kodları ve içerik türleri için Results veya TypedResults kullanın. OpenAPI şeması çıkarımı için TypedResults tercih edilir.

app.MapGet("/products/{id}", async (int id, AppDbContext db) =>
{
    var product = await db.Products.FindAsync(id);
    return product is null
        ? Results.NotFound()
        : Results.Ok(product);
});

app.MapPost("/products", async (Product product, AppDbContext db) =>
{
    db.Products.Add(product);
    await db.SaveChangesAsync();
    return Results.Created($"/products/{product.Id}", product);
});

Yol Parametreleri ve Sorgu Dizeleri

Yol parametreleri URL yolundan alınır, sorgu dizesi parametreleri sorgudan otomatik olarak bağlanır ve istek gövdesi JSON'dan serileştirilir.

// Route param {id} + query param ?includeDeleted
app.MapGet("/orders/{id}", async (
    int id,
    bool includeDeleted = false,
    AppDbContext db) =>
{
    var query = db.Orders.AsQueryable();
    if (!includeDeleted) query = query.Where(o => !o.IsDeleted);
    var order = await query.FirstOrDefaultAsync(o => o.Id == id);
    return order is null ? Results.NotFound() : Results.Ok(order);
});

Yol İşleyicilerinde Bağımlılık Ekleme

DI kapsayıcısına kaydedilen hizmetler, yol işleyicisi parametreleri olarak doğrudan eklenebilir. Çerçeve bunları otomatik olarak çözümler.

builder.Services.AddScoped<ProductService>();

app.MapGet("/products", async (ProductService svc) =>
{
    var products = await svc.GetAllAsync();
    return Results.Ok(products);
});

app.MapDelete("/products/{id}", async (int id, ProductService svc) =>
{
    var deleted = await svc.DeleteAsync(id);
    return deleted ? Results.NoContent() : Results.NotFound();
});

İstek Gövdesi Bağlama

Kayıtlı hizmetlerle eşleşen parametreler otomatik olarak sağlanır; diğer her şey istek gövdesinden bağlanır (varsayılan olarak JSON). Gerekirse açıkça [FromBody] kullanın.

record CreateProductRequest(string Name, decimal Price, int Stock);

app.MapPost("/products", async (
    CreateProductRequest req,
    ProductService svc) =>
{
    var product = await svc.CreateAsync(req.Name, req.Price, req.Stock);
    return TypedResults.Created($"/products/{product.Id}", product);
});

Farklı Durum Kodları Döndürme

Results, yaygın tüm HTTP yanıtları için fabrika yöntemleri sağlar. Bunları anlamsal açıdan doğru REST API'leri oluşturmak için kullanın.

app.MapPut("/products/{id}", async (int id, Product update, AppDbContext db) =>
{
    var existing = await db.Products.FindAsync(id);
    if (existing is null) return Results.NotFound();

    existing.Name  = update.Name;
    existing.Price = update.Price;
    await db.SaveChangesAsync();
    return Results.Ok(existing);
});

// Other useful Results:
// Results.BadRequest("message")
// Results.Conflict()
// Results.UnprocessableEntity(errors)
// Results.Accepted()

WithName ve WithTags ile Üst Veri Ekleme

Belgelemeyi ve yönlendirmeyi geliştirmek için uç noktalara üst veri ekleyin. Düzenli OpenAPI çıktısı için WithName, WithTags ve WithSummary kullanın.

app.MapGet("/products/{id}", GetProduct)
   .WithName("GetProductById")
   .WithTags("Products")
   .WithSummary("Retrieves a product by its ID")
   .Produces<Product>()
   .Produces(404);

static async Task<IResult> GetProduct(int id, AppDbContext db)
{
    var p = await db.Products.FindAsync(id);
    return p is null ? Results.NotFound() : Results.Ok(p);
}

Minimal API'lerde Yetkilendirme

Uç noktaları korumak için RequireAuthorization() uygulayın veya bu korumadan çıkmak için AllowAnonymous() kullanın. İlkeler, denetleyicilerdekiyle aynı şekilde çalışır.

builder.Services.AddAuthentication().AddJwtBearer();
builder.Services.AddAuthorization();

app.UseAuthentication();
app.UseAuthorization();

app.MapGet("/profile", (ClaimsPrincipal user) =>
    Results.Ok(user.Identity!.Name))
   .RequireAuthorization();

app.MapGet("/public", () => "No auth needed")
   .AllowAnonymous();

Statik Metotlarla Düzenleme

Daha büyük API'lerde, Program.cs dosyasını temiz ve kolay gezilebilir tutmak için rota işleyicilerini statik metotlara veya genişletme metotlarına taşıyın.

// Extension method groups endpoints by feature
public static class ProductEndpoints
{
    public static void MapProductEndpoints(this WebApplication app)
    {
        app.MapGet("/products",    GetAll);
        app.MapGet("/products/{id}", GetById);
        app.MapPost("/products",   Create);
    }

    private static async Task<IResult> GetAll(AppDbContext db)
        => Results.Ok(await db.Products.AsNoTracking().ToListAsync());

    // ... other handlers
}

// In Program.cs:
app.MapProductEndpoints();

Gerçek Dünya: Tam CRUD Minimal API

Todo kaynağı için eksiksiz bir CRUD Minimal API'si — kısa, sınanabilir ve üretime hazır.

app.MapGet("/todos", async (AppDbContext db) =>
    Results.Ok(await db.Todos.AsNoTracking().ToListAsync()));

app.MapGet("/todos/{id}", async (int id, AppDbContext db) =>
{
    var todo = await db.Todos.FindAsync(id);
    return todo is null ? Results.NotFound() : Results.Ok(todo);
});

app.MapPost("/todos", async (Todo todo, AppDbContext db) =>
{
    db.Todos.Add(todo);
    await db.SaveChangesAsync();
    return Results.Created($"/todos/{todo.Id}", todo);
});

app.MapDelete("/todos/{id}", async (int id, AppDbContext db) =>
{
    int n = await db.Todos.Where(t => t.Id == id).ExecuteDeleteAsync();
    return n > 0 ? Results.NoContent() : Results.NotFound();
});

Hızlı Kontrol

Bir Minimal API rota işleyicisi, kaydedilmiş bir DI hizmetini nasıl alır?

Özet: İlk Minimal API'nizi Oluşturma

Önemli çıkarımlar:

  • MapGet/Post/Put/Delete, rota işleyicilerini doğrudan Program.cs içinde tanımlar
  • Doğru HTTP durum kodları için Results / TypedResults kullanın
  • Rota, sorgu, gövde ve DI parametrelerinin tümü otomatik olarak bağlanır
  • Kimlik doğrulama için RequireAuthorization() ve AllowAnonymous() kullanın
  • Büyük API'leri genişletme metotları veya rota gruplarıyla düzenleyin

Sıkça Sorulan Sorular

“İlk Minimal API'nizi Oluşturma” dersi ücretsiz mi?

Evet — “İlk Minimal API'nizi Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“İlk Minimal API'nizi Oluşturma” dersinde ne öğreneceğim?

Bir Minimal API projesi başlatın, yol işleyicilerini tanımlayın ve en az miktarda ek kodla türü belirlenmiş sonuçlar döndürün. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“İlk Minimal API'nizi Oluşturma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İlk Minimal API'nizi Oluşturma
  2. Yol Grupları, Parametreler ve Doğrulama
  3. Minimal API'lerde Ara Yazılım ve Filtreler
  4. OpenAPI, Sürümleme ve Dağıtım
← C# Academy Sayfasına Dön