Altbilgi içeriğine atla
Iron Academy Logo
C# öğrenin
C# öğrenin

Diğer Kategoriler

Linux'ta .NET Aspire'da PUT Güncelleme Endpointi Ekleme

[[academy-video-youtube({"vid": "hSRI_JKiH5M", "start_time": "0", "title": ".NET Aspire'de Linux Üzerinde PUT Güncelleme Endpoint'i Ekleme", "creator": "Tim Corey", "length": "8m 43s"})]]

Bir API, kayıtları okuyabildiğinde ve oluşturabildiğinde, bir sonraki işlem mevcut olanları güncellemektir. Bir PUT uç noktası, istediği tarafından sağlanan verilerle tüm kaynağı değiştirir, bu da istek gövdesinin yalnızca değişen alanları değil, her alanı içermesi gerektiği anlamına gelir. PUT (tam değişim) ile PATCH (kısmi değişiklik) arasındaki bu ayrım, girdi türünü nasıl tasarladığınız ve çağıranların uç noktayla nasıl etkileşime girdiği konusunda önemlidir.

Tim Corey, "Adding a PUT Update Endpoint in .NET Aspire on Linux" adlı videosunda, Tiny Ticket API'ye güncelleme uç noktasını ekler, kayıt ekleme işleminde bulunmayan (ID ve tamamlanma tarihi gibi) alanları içeren özel bir güncelleme kayıt türü oluşturur, doğrulama niteliklerini uygular ve Swagger üzerinden tam bir test turu yapar. Bölüm, önceki bölümlerde oluşturulmuş aynı deseni takip eder ancak bir nullable DateTime alanı ve PUT ile PATCH semantics arasındaki farkı tanıtır. Minimal bir API'de CRUD uç noktaları oluşturuyorsanız, bu makale güncelleme tarafını ele alır.

Güncelleme Kayıt Tipini Oluşturma

[1:54 - 4:04] Önceki bölümden olan kayıt ekleme, Başlık, Açıklama ve Öncelik kabul etti. Güncelleme kaydının iki ek alana ihtiyacı var: değiştirilen biletin ID'si ve DateCompleted zaman damgası. Tim, insert kaydını kopyalar ve ayarlar.

public record TicketUpdateRecord(
    [Required, Range(1, int.MaxValue)] int Id,
    [Required, MinLength(1)] string Title,
    [Required] string Description,
    DateTime? DateCompleted,
    [Range(1, 5)] int Priority
);
public record TicketUpdateRecord(
    [Required, Range(1, int.MaxValue)] int Id,
    [Required, MinLength(1)] string Title,
    [Required] string Description,
    DateTime? DateCompleted,
    [Range(1, 5)] int Priority
);

Id'i [Required] olarak işaretlemek ve [Range(1, int.MaxValue)] kısıtlamasını uygulamak, negatif değerlerin veya sıfırın veritabanına ulaşmasını engeller. DateCompleted bir nullable DateTime?'dir çünkü henüz çözülmemiş bir biletin tamamlanma tarihi gerektirmemesi gerekir. Boşluk geçerli bir durum olduğundan, üzerinde bir doğrulama niteliğine gerek yoktur.

Kayıt özelliklerinin tam olarak eşleşmesini sağlamak için, Tim spTickets_Update saklı prosedürden alan listesini çeker. Bu hizalama, Dapper'ın kaydı doğrudan, elle mülk-iletişimlere gerek kalmadan eşleştirmesine olanak tanır.

PUT Uç Noktasının Haritalandırılması

Endpoint kaydı, belirlenmiş deseni takip eder. MapPut, /api/tickets rotasına bağlanır ve işlemci güncelleme kaydı ile saklı prosedürü çağırır:

app.MapPut("/api/tickets", async Task<Results<NoContent, ValidationProblem>>
    (TicketUpdateRecord ticket, ISqlDataAccess sql) =>
{
    await sql.SaveDataAsync("dbo.spTickets_Update", ticket, "TicketDB");
    return TypedResults.NoContent();
});
app.MapPut("/api/tickets", async Task<Results<NoContent, ValidationProblem>>
    (TicketUpdateRecord ticket, ISqlDataAccess sql) =>
{
    await sql.SaveDataAsync("dbo.spTickets_Update", ticket, "TicketDB");
    return TypedResults.NoContent();
});

Results<NoContent, ValidationProblem>'ı dönüş türü olarak ilan etmek, çerçeveye, son noktanın başarılı olduğunda 204 veya doğrulama başarısız olduğunda 400 ürettiğini bildirir. ValidationProblem varyantı, önceki bölümde kayıtlı pipeline tarafından otomatik olarak işlenir; işleyici sadece başarı durumunu döndürmelidir.

Önemli olan, Dapper sarmalayıcısının veri erişimini nasıl öz tutmasıdır: saklı prosedür adı, model, bağlantı dizesi adı. Üç parametre, tüm veritabanı çağrısını kapsar. Daha önce seride yazılan kaplama, her yeni uç nokta onu değişiklik yapmadan yeniden kullandığı için fayda sağlamaya devam ediyor.

PUT ve PATCH: Tam Değişim Ne Zaman Önemlidir

Test etmeden önce, Tim PUT ve PATCH arasındaki farkı açıklığa kavuşturmak için durur. Bir PUT isteği, tüm kaynağı değiştirir: İstek gövdesindeki her alan, arayanın değiştirmek istememiş olsa bile, karşılık gelen veritabanı sütununu yeniden yazar. PATCH isteği, yalnızca gövdede bulunan alanları günceller.

Tiny Ticket projesi için PUT doğru bir seçimdir çünkü ön uç, tüm bileti yükleyecek, kullanıcının alanları düzenlemesine izin verecek ve tamamlanmış nesneyi geri gönderecektir. Tim, bir üretim uygulamasında, bir bileti tamamlandı olarak işaretlemek gibi yaygın tek alanlı işlemler için özellikle bir PATCH uç noktasını ekleyeceğini belirtiyor; sadece bir tarihi değiştirmek için tüm nesneyi göndermek israf gibi görünüyor.

Güncellemeyi Swagger ile Test Etme

[6:46 - 8:26] Tim launches the API and opens Swagger. PUT işlemini test etmeden önce, verilerin mevcut durumunu kontrol etmek için tümünü GET uç noktası çalıştırır. Test kayıtlarından biri (ID 109), önceki testten kalan başlık, açıklama ve öncelik için boş değerlere sahiptir. Bu, güncelleme için hedef haline gelir.

PUT isteği gövdesine ID 109, "Örnek Kayıt" başlığı, bir açıklama ve 5 öncelik değeri ile doldurur. Çalıştırdıktan sonra, yanıt 204 olarak geri döner. Tüm GET isteğini yeniden çalıştırmak, kaydın şimdi güncellenmiş değerlere sahip olduğunu doğrular.

Doğrulamayı kontrol etmek için, başlık alanını temizler ve tekrar çalıştırır. Cevap, "Bilet başlık alanı gereklidir." şeklinde yapılandırılmış bir hata mesajıyla 400 döndürür. insert endpoint üzerindeki aynı doğrulama nitelikleri, aynı anotasyon desenini kullandıkları için kayıt güncellemeye taşınır.

Özet: CRUD İlerlemesi

[8:26 - 8:43] PUT uç noktası tamamlandığında, Tiny Ticket API artık dört CRUD işleminden üçünü kapsamaktadır: okuma (GET tümü ve ID ile GET), oluşturma (POST) ve güncelleme (PUT). Her uç nokta, kod tabanını öngörülebilir hale getiren aynı yapısal deseni takip eder. Kalan işlem DELETE olup, Tim bunu bir sonraki bölüm olarak önizliyor.

Sonuç

[8:38 - 8:43] Minimal bir API'ye PUT endpoint eklemek, doğrulama niteliklerine sahip özel bir güncelleme kaydı, koleksiyon URL'si ile bir MapPut kaydı ve veri erişim sarmalayıcı aracılığıyla bir saklı prosedür çağrısı gerektirir. Results<NoContent, ValidationProblem> dönüş türü, çerçevenin hem başarı hem de doğrulama hatası yanıtlarını ele almasına olanak tanır. DateTime? gibi nullable alanlar, eksik veri için null geçerli bir değer olduğundan doğrulama niteliği gerektirmeden geçer.

Dizi gezintisi: Bu makale, Tiny Ticket uygulamasını oluşturma sürecindeki Linux üzerinde C# dizisinin bir parçasıdır. Önceki: POST Insert Bağlantı Noktası Ekleme. Sonraki: DELETE Uç Noktası Eklemek.

Örnek İpucu: Güncelleme saklı yordamınız değiştirilmiş satır sayısını döndürüyorsa, 204 döndürmeden önce bunu kontrol edin. Sayının sıfır olması, ID'nin herhangi bir kayıtla eşleşmediği anlamına gelir ve sessizce başarılı olmak yerine 404 döndürmelisiniz.

Linux serisinde C# kullanarak CRUD uç noktaları oluşturma hakkında daha fazla bilgi edinmek için YouTube Kanala gidin ve tam videoyu izleyin.

Hero Worlddot related to Linux'ta .NET Aspire'da PUT Güncelleme Endpointi Ekleme
Hero Affiliate related to Linux'ta .NET Aspire'da PUT Güncelleme Endpointi Ekleme

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara