HTTP İşlemleri için Fluent HTTP (Flurl)
Servis yönelimli uygulamalarda artık yazdığımız servisler de, çağırdığımız servisler de REST tabanlı olmaya başladı. Bu değişimle birlikte yazdığımız kodlarda bir takım farklı yöntemler izlemeye ve farklı kütüphaneler kullanmaya başladık. Proxy nesneleri üzerinden çağrılan metotlar yerine artık bir URL üzerinden yapılan isteklere(request) ve alınan yanıtlara(response) göre uygulama akışını şekillendiriyoruz.
REST URL bazında yapılan istekler için uygulamamızda dinamik yapılar kullanmamız oldukça önemli. Basit bir REST adresine GET talebi yapabileceğimiz gibi, bir REST talebinde header içerisine bazı değerler ekleyip göndermek gibi birçok farklı ihtiyaçlar ortaya çıkıyor. Bu yazımda .NET ortamında bu tip HTTP çağrılarını yönetebileceğiniz Fluent HTTP (Flurl) kütüphanesini tanıtacağım.
Fluent HTTP, .NET platformu için geliştirilmiş bir HTTP istemci kütüphanesi. Fluent Interface prensibiyle geliştirilmiş olan bu kütüphane, birçok HTTP görevini kolayca kullanmamızı sağlar. Arkaplanda HttpClient vb. sınıfları kullanmaktadır. Bu kütüphanenin kısa ismi Flurl diye geçiyor.
Fluent HTTP(Flurl)’nin başlıca göze çarpan özelliklerini,
- Kolay kullanımı
- Fluent desteği (Fluent Interface konusunu okumak için bu yazıya göz atılabilir)
- Asenkron çağrı imkanı
olarak listeleyebiliriz.
Kütüphane iki kısımdan oluşuyor.
- Flurl: URL bilgisini oluşturan kısım
- Flurl.Http: HTTP çağrısını yapan kısım
Şimdi basit bir örnekle kütüphaneyi nasıl kullanabileceğimize bakalım. Öncelikle, NuGet üzerinden Flurl ve Flurl.Http paketlerini projemize ekleyerek başlıyoruz.
Install-Package Flurl
Install-Package Flurl.Http
Şimdi aşağıdaki örnek adrese HTTP GET çağrısı yapalım. İsterseniz bir tarayıcıdan da adresi çağırarak nasıl bir JSON verisi geleceğini kontrol edebilirsiniz.
https://jsonplaceholder.typicode.com/posts?userId=1
var result = await "http://jsonplaceholder.typicode.com"
.AppendPathSegment("posts")
.SetQueryParams(new { userId = 1 })
.GetJsonAsync<IEnumerable<Post>>();
public class Post
{
public int Id { get; set; }
public int UserId { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}
Çağrımızı belirlediğimiz parametrelerle yapıp dönüş JSON bilgisini oluşturduğumuz obje listemize kolayca dönüştürdük.
Burada kütüphanenin yeni bir obje oluşturmadan dynamic tip döndürme desteği de bulunuyor.
Flurl ile HTTP POST çağrısını nasıl yapabileceğimize de aşağıdaki URL aracılığıyla bir bakalım:
https://jsonplaceholder.typicode.com/posts
var post = await "http://jsonplaceholder.typicode.com" .AppendPathSegment("posts") .PostJsonAsync(new { userId = 123, title = "test", body = "test" }) .ReceiveJson<Post>();
Yeni bir kayıt eklemek için gerekli bilgileri servise gönderip yeni kayda ait bilgileri servisten obje olarak alıyoruz. Görüldüğü gibi Fluent interface mantığıyla yazılmış bir kütüphaneyi kullanmanın avantajıyla akıcı ve okunaklı Http çağrıları oluşturabiliyoruz. AppendPathSegment, SetQueryParams, GetJsonAsync, ReceiveJson gibi onlarca yardımcı Flurl metoduyla bu çağrıları farklı şekillerde oluşturup sonuçları uygulama ortamına aktarmamız mümkün oluyor.
Ek olarak, Flurl’nin popüler güvenlik uyarlamaları olan kimlik doğrulama(authentication) yöntemleri için de metotları bulunuyor.
Basic authentication
.WithBasicAuth("username", "password")
oAuth bearer token
.WithOAuthBearerToken("token")
Yazıda Fluent Http(Flurl) kütüphanesini tanıtmaya çalıştım. Detaylı kullanım örnekleri için http://tmenier.github.io/Flurl/fluent-http adresini inceleyebilirsiniz. Bu yazıdaki kod örneklerini de https://github.com/pirimoglu/FlurlHttpSample/blob/master/FlurlSample/Program.cs adresinde inceleyebilirsiniz.
1 Comment
Umit
20 Aralık 2016 at 08:09Faydalı bir yazı olmuş.
Teşekkürler.