Bir Postman Klonu Oluşturun: API Çağrıları için Sınıf Kütüphanesi Tasarımı
[[academy-video-youtube({"vid": "I-txkRVEJrA", "start_time": "0", "title": "Sınıf Kütüphanesi Tasarımı: Postman Klonu Kursunu İnşa Etme", "creator": "Tim Corey", "length": "47m 58s"})]]
API'ler, modern uygulama geliştirmesinin kalbinde yer alır ve onları test etmek ve etkileşimde bulunmak için doğru araçlara sahip olmak çok önemlidir. Tim Corey'nin videosu "Class Library Design: Building a Postman Clone" bizi masaüstü tabanlı bir Postman klon oluşturma sürecinde adım adım, nazikçe yürütüyor.
Bu makalede, Tim Corey'nin videosunda gösterdiği detaylı yaklaşımı inceleyerek bir Postman klonu nasıl oluşturulacağını keşfedeceğiz. Tim, uygulamamızdaki API çağrılarını güçlendiren sınıf kütüphanesi oluşturarak bizi adım adım yönlendirir. Sonunda, Postman klonumuzun çalışır durumda bir MVP (minimum viable product) versiyonuna sahip olacağız.
Bu süreç başlangıç dostudur ama aynı zamanda kendi Postman veya benzeri uygulamalarını oluşturmak isteyen geliştiriciler için değerli olan ana programlama ilkelerini gösterir. Sürece daha derinlemesine bakalım.
Giriş ve Kurulum
Tim, bu dersin amacını açıklayarak başlar: uygulamada API çağrılarını çalıştırmak için iş mantığını ve veri erişim katmanını yaratmak. Bu, daha sonra genişletilebilecek işlevsel bir sürüm olan bir MVP olduğunu vurgular.
Koda dalmadan önce, Tim dersin portföy dostu tasarlandığını ancak projeyi doğrudan kopyalamaktan kaçınmanın önemini belirtir. Bunun yerine, geliştiricileri C#, API etkileşimi ve UI tasarım becerilerini sergileyen benzersiz projeler yaratmak için ilham kaynağı olarak kullanmalarını teşvik eder.
API Erişim Sınıfını Oluşturma
Tim, sınıf kütüphanesini açarak temiz bir sayfa ile başlamamızı sağlıyor. Varsayılan Class1'i siler ve APIAccess adında yeni bir sınıf oluşturur. Bu, tüm API etkileşimlerini yönetecek.
Metot tasarımına yaklaşımını açıklar: public void metotları ile başlayarak, string url gibi parametreler ekleyerek ve ardından gerçek dünya API isteklerini karşılayabilecek asenkron görevler haline getirmeye özen göstererek.
public class APIErişimi
{
private readonly HttpClient client = new();
public async Task<string> CallApiAsync(string url)
{
var yanıt = await istemcisi.GetAsync(url);
if (yanıt.IsSuccessStatusCode)
{
return await response.Content.ReadAsStringAsync();
}
return $"hata: {yanıt.StatusCode}";
}
}Tim, her çağrıda HTTP istemcisini yeniden başlatmaktan kaçınmak için tek bir HTTP istemci örneği gerçekleştirme önemini vurgular, performansı artırır.
API Yanıtlarını İşleme
HTTP istemcisi kurulduktan sonra, Tim API çağrısından yanıtı nasıl alacağımızı gösteriyor. O, Task<string> yerine async void döndürmenin önemini vurgular, etkinlik işleyicileri dışında.
Göstermek için, Tim JSON Placeholder'dan, gönderiler, yorumlar ve yapılacaklar gibi sahte veriler sağlayan bir örnek API kullanır. API URL'sini UI form HTML'sine yapıştırır ve response HTML veya JSON'u görüntülemek için sonuclar.Text alanını kullanır.
sonuçlar.Text = await api.ApiÇağırAsync(apiText.Text);Tim, ham JSON çıktısının bilgisayar okuyabileceğini ancak kullanıcı dostu olmadığını belirtir, bu da sonraki adım: JSON'u biçimlendirme.
JSON Çıktısını Biçimlendirme
Tim, JsonSerializer kullanarak yanıt JSON'unu daha okunabilir hale nasıl getireceğimizi gösteriyor:
var jsonElement = JsonSerializer.Deserialize<JsonElement>(responseJson);
var prettyJson = JsonSerializer.Serialize(jsonElement, new JsonSerializerOptions { WriteIndented = true });Bu sayede geliştiriciler, JSON metin düzenleyicilerinde veya uç noktalar test edilirken okumayı kolaylaştıran güzel JSON'u UI'de görüntüleyebilir. Tim ayrıca, UI'de çıkarma veya programatik olarak işleme tabi tutulmaya göre verilerin ham ve biçimlendirilmiş çıktı arasında geçiş yapma seçeneği ekler.
Gelecekteki Geliştirmeler için Planı
MVP yalnızca GET isteklerini desteklese de, Tim POST, PATCH, PUT ve DELETE gibi diğer HTTP eylemlerini planlamanın nasıl yapıldığını gösterir. GET varsayılan değeri ile bir HTTPAction enumu oluşturur ve kodun ölçeklenebilmesi için mevcut yöntemleri yeniden yazmaya gerek olmadığını hazırlar.
public enum HTTPEylem
{
GET
}Bu öngörülü tasarım, sürdürülebilir ve genişletilebilir bir Postman klonu oluşturmak isteyen geliştiriciler için harika bir uygulamadır.
URL Doğrulama
Tim, kullanıcıların yalnızca geçerli HTTPS uç noktaları sağlamasını sağlamak için bir URL doğrulama yöntemi tanıtır:
public bool GeçerliURLMi(string url)
{
if (string.IsNullOrWhiteSpace(url)) return false;
return Uri.TryCreate(url, UriKind.Absolute, out Uri uriResult) && uriResult.Scheme == Uri.UriSchemeHttps;
}Girişleri asla kesinlikle güvenmemek ve gerekirse birden çok kez doğrulamak gerektiğini açıklar. Bu, uygulamanın geçersiz URL'ler nedeniyle düzelmemesini sağlar ve hata mesajlarının iş akışını kesintiye uğratmasını önler.
API Erişimini UI ile Entegre Etme
Doğrulama gerçekleştikten sonra, Tim API erişimini gösterge paneli UI ile nasıl entegre edeceğimizi gösterir:
APIAccess sınıfını başlatın.
URL'yi doğrulama.
Yanıt JSON'unu sonuçlar metin editöründe görüntüleyin.
- Geçersiz veya başarısız istekler için anlamlı hata mesajları gösterin.
if (!api.GeçerliURLMi(apiText.Text))
{
sistemDurumu.Text = "Geçersiz URL";
sonuçlar.Text = string.Empty;
return;
}
sonuçlar.Text = await api.ApiÇağırAsync(apiText.Text);Tim, her isteğe boş bir sonuç alanı ile başlamanın ve başarı ya da başarısızlık durumuna bağlı olarak sistem durumunu güncellemenin, temiz UI tasarımının önemini vurgular.
Bağımlılık Enjeksiyonu ve Birim Testi için Arabirimler Kullanma
Tim, APIAccess için bir arabirim olan IAPIAccess'i tanıtır. Bu, birim testi ve kodu bağımlılık enjeksiyonuna hazırlama için en iyi uygulamadır:
public interface IAPIErişimi
{
Task<string> CallApiAsync(string url);
bool GeçerliURLMi(string url);
}Beton sınıf yerine bir arabirim karşı kodlayarak, geliştiriciler test etmek için uygulamaları değiştirebilir veya UI ya da diğer bağımlı kodları değiştirmeden API mantığını yükseltebilirler. Tim, bu MVP için biraz fazla olduğunu vurgular, ancak gelecekteki uygulama geliştirmeleri için değerlidir.
Uygulamayı Test Etme ve Çalıştırma
Tüm parçalar yerine oturduğunda, Tim uygulamayı Windows'ta çalıştırır, JSON Placeholder URL'sini yapıştırır ve başarıyla biçimlendirilmiş JSON yanıtını görüntüler. Geçersiz URL'lerin düzgün bir şekilde reddedildiğini göstererek, uygulamanın kullanıcı giriş hatalarıyla bile sağlıklı kaldığından emin olur.
Bu, bir GET isteği yapabilen, girişi doğrulayan ve yanıtları kullanıcı dostu bir formatta görüntüleyen işlevsel bir Postman klonu oluşturur.
Sonraki Adımlar: Portföy ve GitHub Entegrasyonu
Dersi kapatırken, Tim bu projeyi portföy hazır bir öğeye dönüştürmenin önemini vurgular. Önerileri:
Proje için bir GitHub deposu oluşturma.
Uygulamayı açıklayan net bir README ekleme.
Diğerlerinin test etmesi için indirilebilir bir çalıştırılabilir dosya ekleme.
UI ve özellikleri ekran görüntüleri veya GIF'lerde vurgulayan.
- Süreci, kurulumu ve kod yapısını belgeleme.
Kodunu doğrudan kopyalayarak kendi kodunuzmuş gibi yüklemekten kaçınmanın önemini vurgular. Bunun yerine, geliştiriciler bu dersleri kendi Postman klonlarını veya kişisel tarz ve yetenek yansıtan benzer bir uygulama yaratmak için kullanmalıdır.
Bu yaklaşımı takip ederek, geliştiriciler sadece kodlama yeterliliği göstermemiş, aynı zamanda potansiyel işverenler için değerli olan bir yazılım projesini keşfederek, güncelleyerek ve sürdürerek becerilerini kanıtlamış olurlar.
Sonuç
Tim Corey'nin videosu, sıfırdan bir Postman klonu oluşturmayı kapsamlı bir şekilde kılavuzlar. Bir sınıf kütüphanesi kurulumundan itibaren, API çağrılarını yönetme, JSON yanıtlarını biçimlendirme, girdiyi doğrulama ve işleri hazırlık için arayüzler ve bağımlılık enjeksiyonu ile hazırlamaya kadar, bu ders tam bir uygulama geliştirme sürecini kapsar.
Bu yaklaşımı takip ederek, geliştiriciler plan C# kullanarak bir MVP Postman klonu oluşturabilir, yanıt HTML veya JSON'u görüntülemek için UI öğelerini entegre edebilir ve portföyde vitrinlenmeye hazır bir GitHub projesi hazırlayabilirler. Bu adım adım metodoloji sadece kodu öğretmekle kalmaz, aynı zamanda profesyonel yazılım geliştiricileri için kritik olan planlama, süreç ve tasarım düşüncesine de vurgu yapar.

