Bu yazımda .Net Core alt yapısında HttpClient nesnesinin pratik olarak kullanımına değineceğim. Özellikle third party API'lere istekte bulunurken kullanışlıdır. .NET Core platformunda IHttpClientFactory interface'i register edilerek kullanılır.
Uygulamalarımızda IHttpClientFactory'i farklı yöntemlerle kullanarak HttpClient nesnesini oluşturup kullanabiliriz. Yazıda, en pratik bulduğum iki yönteme değineceğim.
- Named Clients
Bu kullanımda HttpClient nesnesine farklı isimlendirmelerle (client name) oluşturup uygulamalarımızda çağırabiliriz. Uygulamaların farklı HttpClient nesnesine sahip olması gerektiğinde ve farklı yapılandırma ayarları varsa iyi seçim olabilir.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public void ConfigureServices(IServiceCollection services) | |
{ | |
services.AddHttpClient("v3", estClient => | |
{ | |
estClient.BaseAddress = new Uri("https://date.nager.at/api/v3/"); | |
estClient.DefaultRequestHeaders.Accept | |
.Add(new MediaTypeWithQualityHeaderValue("application/json")); | |
}); | |
services.AddHttpClient("v2", estClient => | |
{ | |
estClient.BaseAddress = new Uri("https://date.nager.at/api/v2/"); | |
estClient.DefaultRequestHeaders.Accept | |
.Add(new MediaTypeWithQualityHeaderValue("application/json")); | |
}); | |
} |
Yukarıdaki tanımlamada örnek bir API linkinde farklı versiyonlar için farklı isimlendirmelere sahip client oluşturuldu. ConfigureService metodunda AddHttpClient metodunun ilk parametresine (name) uygun isim verilir. CreateClient metodu kullanılarak oluşturulan isimlerden istediğimizi çağırabiliriz.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var httpClient = httpClientFactory.CreateClient("v3"); |
- Typed Clients
Bu kullanımda, Named Client ile oluşturduğumuz HttpClient nesneleri için ayrı sınıflar oluşturarak ayrım yapabiliriz. Dependency Injection prensibi ile kullanacağımız yerlerde enjekte edebiliriz. Ayrıca hard coded isimler kullanmak yerine tip şeklinde kullanmak kodumuzu temiz hale getirir. HttpClient yapılandırma ayarlarını tek bir yerden kontrol edebiliriz. Bu şekilde Startup.cs dosyasında kod kalabalığından kurtarabiliriz.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class DateHttpClient | |
{ | |
private HttpClient _httpClient { get; } | |
private IConfiguration _configuration { get; } | |
public DateHttpClient(HttpClient httpClient, IConfiguration configuration) | |
{ | |
_httpClient = httpClient; | |
_configuration = configuration; | |
httpClient.BaseAddress = new Uri(_configuration.GetSection("DateApiInfo").GetSection("BaseUrl").Value); | |
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); | |
} | |
} |
Yukarıdaki tanımlamalarda DateHttpClient diye isimlendirdiğimiz bir client tipi oluşturduk. Constructorda BaseAdress ve DefaultRequestHeaders eklemesini yaptık. Bu tipi kullanmak için Startup.cs dosyasında tanımlama işlemini yapıyoruz. Transient olarak tanımlandı ve HttpClient verdiğimizde bize DateHttpClient tipinde bir nesne verecektir. (Depenency Injection Prensibi)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
services.AddHttpClient<DateHttpClient>(); |
Kullanacağımız yerdeki constructorda aşağıdaki gibi enjekte ediyoruz.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class HolidayManager : IHolidayService | |
{ | |
private DateHttpClient _dateHttpClient; | |
public HolidayManager(DateHttpClient dateHttpClient ) | |
{ | |
_dateHttpClient = dateHttpClient; | |
} | |
} |
Yukarıda bahsettiğim iki yöntemde HttpClient nesnelerinin daha anlaşılır ve yönetiminin kolay olması için anlatıldı.
Github'da bulunan örneğimizde ülke seçimi yapılır ve seçilen ülkeye ait resmi tatiller getirilir. Aşağıdaki API linki, resmi tatilleri ülke ve yıla göre getirmektedir. Konuyu anlatırken bu linkten faydalandım. Dokümantasyondan kullanımlarını inceleyebilirsiniz.
API Linki: Worldwide Public Holidays - Nager.Date
Dokümantasyon: Swagger UI (nager.at)
Örneğimin Github Proje Linki için tıklayınız
Demo
Microsoft Blog Linki
API linki konusunda yararlandığım okuma
Eline sağlık güzel bir içerik olmuş
YanıtlaSilRica ederim. Faydalı olduysa ne mutlu :)
Sil