Flutter uygulamalarında REST API ile iletişim kurmak için en sık tercih edilen iki kütüphane vardır: resmi http paketi ve üçüncü taraf Dio. Her ikisi de temel HTTP isteklerini (GET, POST, PUT, DELETE) gerçekleştirir, ancak farklı proje ihtiyaçlarına göre belirgin avantajlar sunar. Bu yazıda, her iki kütüphaneyi yan yana koyarak hangi durumda hangisinin daha uygun olduğunu detaylı şekilde inceleyeceğiz.
Dio mu, http mi? Temel Farklar
İlk bakışta her iki paket de aynı işi yapıyor gibi görünse de, özellikle karmaşık projelerde Dio'nun sunduğu ek özellikler öne çıkar. Aşağıdaki tablo, iki kütüphane arasındaki temel farklılıkları özetlemektedir.
| Özellik | http Paketi | Dio |
|---|---|---|
| Geliştirici | Flutter ekibi (resmi) | Flutter Community (üçüncü taraf) |
| Temel HTTP istekleri | Evet | Evet |
| Interceptors (ara yazılım) | Yok (elle yazılmalı) | Hazır interceptor desteği |
| Otomatik yeniden deneme (retry) | Yok | Eklenti ile mümkün |
| İstek iptali (cancel) | Token ile manuel | CancelToken ile kolay |
| Dosya yükleme/indirme | Evet (basit) | Evet (gelişmiş, ilerleme takibi) |
| Form-data desteği | Evet | Evet (daha esnek) |
| Zaman aşımı ayarları | Sadece connectTimeout | connectTimeout, sendTimeout, receiveTimeout |
| Popülerlik (pub.dev) | ~10k+ like | ~12k+ like |
Hangi Durumda Hangi Kütüphane Seçilmeli?
Basit Projeler ve Hızlı Prototipler İçin http Paketi
Eğer uygulamanız yalnızca birkaç GET/POST isteği yapacaksa ve karmaşık hata yönetimine ihtiyaç duymuyorsanız, http paketi en doğru başlangıçtır. Resmi Flutter ekibi tarafından geliştirildiği için güncelleme ve uyumluluk sorunları yaşama olasılığınız düşüktür. Örneğin, bir blog uygulaması veya basit bir hava durumu uygulaması için http yeterlidir. Kod da oldukça sadedir:
import 'package:http/http.dart' as http;
Future fetchPosts() async {
final response = await http.get(Uri.parse('https://api.example.com/posts'));
if (response.statusCode == 200) {
// JSON parse
}
}
Karmaşık, Büyük Ölçekli Projeler İçin Dio
Dio, özellikle aşağıdaki durumlarda tercih edilmelidir:
- Interceptor ihtiyacı: Tüm isteklere otomatik olarak token eklemek, hata loglamak veya yanıtları dönüştürmek istiyorsanız Dio’nun interceptor yapısı hayat kurtarır.
- Otomatik yeniden deneme: Ağ hatalarında istekleri belirli aralıklarla tekrar denemek için Dio’nun dio_smart_retry gibi eklentileri mevcuttur.
- İstek iptali: Kullanıcı sayfadan ayrıldığında beklemede olan istekleri iptal etmek Dio ile çok kolaydır.
- Gelişmiş zaman aşımı kontrolü: Özellikle dosya yükleme gibi uzun süren işlemlerde ayrı ayrı zaman aşımı süreleri belirleyebilirsiniz.
Dio ile bir API servisi oluşturmak tipik olarak şöyle görünür:
import 'package:dio/dio.dart';
class ApiService {
late Dio _dio;
ApiService() {
_dio = Dio(BaseOptions(
baseUrl: 'https://api.example.com',
connectTimeout: Duration(seconds: 10),
receiveTimeout: Duration(seconds: 15),
));
_dio.interceptors.add(AuthInterceptor());
}
Future getPosts() async {
return await _dio.get('/posts');
}
}
Performans ve Boyut Karşılaştırması
Her iki kütüphane de benzer performans sunar; çünkü temelde aynı platform kanallarını kullanırlar. Ancak Dio daha fazla özellik içerdiğinden paket boyutu biraz daha büyüktür (http ~380 KB, Dio ~1.2 MB). Bu fark, modern cihazlarda genellikle sorun yaratmaz ancak minik uygulamalar için http daha hafif bir alternatiftir.
Mobil Platformlarda Diğer Kütüphanelerle İlişkisi
Flutter dışında, Android'de Retrofit ve iOS'da URLSession gibi native kütüphaneler bulunur. Flutter projelerinde ise Dio ve http arasında seçim yaparken, projenizin ihtiyaçlarını ve gelecekteki büyüme potansiyelini göz önünde bulundurmalısınız. Ayrıca, API önbellekleme stratejileri gibi konular da HTTP istemci seçiminizi etkileyebilir.
Sık Yapılan Hatalar ve Dikkat Edilmesi Gerekenler
- Dio’yu küçük projede kullanmak: Basit bir uygulama için Dio eklemek bağımlılık sayısını gereksiz yere artırır. Önce http ile başlayın, ihtiyaç duydukça Dio’ya geçin.
- Interceptor’ları ihmal etmek: http ile çalışırken her istekte token eklemeyi unutmak güvenlik açığı oluşturabilir. Dio interceptor’ları bu hatayı otomatik olarak önler.
- Hata yönetimini atlamak: Her iki kütüphane de try-catch blokları gerektirir. Dio ile interceptor’larda merkezi hata yönetimi yapmak daha kolaydır.
Sonuç: İhtiyacınıza Göre Doğru Seçim
Sonuç olarak, http paketi basit, resmi ve hafif bir çözüm sunarken; Dio ölçeklenebilir, özellik zengini ve esnektir. Projenizin büyüklüğü, ekip deneyimi ve uzun vadeli bakım planınız hangisini seçeceğinizi belirleyecektir. Çoğu durumda, Dio’nun interceptor ve istek iptali gibi özellikleri onu daha güçlü kılar, ancak http de işini fazlasıyla görür. Her iki kütüphaneyi de deneyerek kendi projenize en uygun olanı bulmanızı tavsiye ederiz.
Sık Sorulan Sorular
Flutter'da Dio ve http arasındaki en büyük fark nedir?
En büyük fark, Dio'nun interceptor (ara yazılım) desteği sunmasıdır. Dio ile tüm isteklere otomatik olarak token ekleme, hata loglama veya yanıt dönüştürme gibi işlemler yapabilirsiniz. http paketinde bu özellik yoktur, her istekte manuel olarak eklemeniz gerekir.
Hangi projelerde http paketi kullanılmalı?
Basit, az sayıda API isteği yapan ve karmaşık hata yönetimi gerektirmeyen projelerde http paketi idealdir. Ayrıca resmi Flutter paketi olduğu için güncelleme uyumluluğu yüksektir ve küçük uygulamalar için hafif bir çözümdür.
Dio'nun dosya yükleme/indirme özellikleri http'den daha mı iyi?
Evet, Dio dosya yükleme ve indirme işlemlerinde ilerleme takibi (progress) sunar, ayrıca daha esnek form-data desteği vardır. http paketi de dosya gönderebilir ancak ilerleme bilgisi alamazsınız.
Dio ve http'i aynı projede kullanabilir miyim?
Teknik olarak mümkündür, ancak önerilmez. İki farklı HTTP istemcisi kullanmak kod tutarlılığını bozar ve bakımı zorlaştırır. Projenizde birini seçip tüm API isteklerinde onu kullanmanız en iyisidir.
Dio öğrenmesi zor mu?
Dio'nun temel kullanımı http kadar kolaydır. Interceptor ve eklentiler gibi ileri seviye özellikleri öğrenmek biraz daha zaman alabilir, ancak iyi dokümantasyon sayesinde kısa sürede adapte olabilirsiniz.






