Alamofire — nedir, Swift'te HTTP istemcisi ve nasıl çalışır

Yazar: IT Sectr Yayınlanma: 2026-03-07 Okuma süresi: 8 dk

Alamofire, iOS ve macOS için Swift ile yazılmış ve URLSession üzerine inşa edilmiş popüler bir HTTP kütüphanesidir. Ağ istekleri, JSON işleme, dosya yükleme ve kimlik doğrulama yönetimi için bildirimsel bir sözdizimi sağlar. Alamofire GitHub deposuna (2025) göre, Alamofire 42.000'den fazla yıldıza sahiptir ve dünya çapında binlerce iOS projesi tarafından kullanılmaktadır.

Önemli Noktalar

  • Alamofire, bildirimsel sözdizimi ile URLSession üzerine inşa edilmiş HTTP istekleri için bir Swift kütüphanesidir
  • Metot zincirleme, istekleri, parametreleri, başlıkları ve yanıt işlemeyi kısa ve öz bir şekilde tanımlamaya olanak tanır
  • Codable entegrasyonu ile responseDecodable, JSON'u otomatik olarak Swift modellerine dönüştürür
  • Yakalayıcılar RequestInterceptor, token eklemeyi, yeniden denemeleri ve günlük kaydını basitleştirir
  • Dosya yükleme, download ve upload yöntemleri aracılığıyla ilerleme, duraklatma ve devam ettirmeyi destekler

Alamofire nedir?

Alamofire, Alamofire Software Foundation (başlangıçta 2014'te Mattt Thompson) tarafından oluşturulan Swift için bir HTTP istemcisidir. Kütüphane, düşük seviyeli URLSession ayrıntılarını soyutlayarak ağ iletişimi için temiz ve anlamlı bir API sağlar.

Alamofire'ın temel felsefesi, istek parametrelerinin (URL, yöntem, başlıklar, parametreler, kodlayıcı) sıralı çağrılar aracılığıyla iletildiği zincirleme sözdizimidir. Bu, kodu daha okunabilir hale getirir ve yanlış URLRequest yapılandırmasıyla ilgili hata olasılığını azaltır. Bildirimsel yaklaşım, bağlantı kurulumunun ayrıntıları yerine ne yapılması gerektiğine odaklanmayı sağlar. Geliştirici istenen sonucu tanımlar ve kütüphane düşük seviyeli ağ işini halleder.

Kütüphane 2014'ten beri aktif olarak bakımı yapılmakta ve yedi ana sürümden geçmiştir. 2025–2026 itibarıyla güncel olan Alamofire 5, Combine, async/await, yanıt dönüştürücüler, hata ayıklama için EventMonitor ve istekleri yakalamak için RequestInterceptor desteğini içerir. Her ana sürüm önemli iyileştirmeler getirmiştir: Alamofire 4, Codable desteği ekledi, Alamofire 5, Combine Publishers ve geliştirilmiş bir istek yakalama sistemi ekledi.

Alamofire ekosistemi ek kütüphaneler içerir: AlamofireImage görüntü yükleme ve önbellekleme için, AlamofireNetworkActivityIndicator iOS durum çubuğundaki ağ göstergesi için ve AlamofireObjectMapper ObjectMapper ile entegrasyon için. Bu bileşenler, Alamofire'ı sadece bir HTTP istemcisi değil, tam teşekküllü bir ağ yığını haline getirir.

Kurulum ve yapılandırma

Alamofire, Swift Package Manager (önerilen), CocoaPods veya Carthage aracılığıyla kurulur. Xcode'da, File → Add Packages menüsünü açmanız, depo URL'sini yapıştırmanız ve sürümü belirtmeniz yeterlidir.

swift
// Swift Package Manager — Package.swift'e ekle
dependencies: [
    .package(url: "https://github.com/Alamofire/Alamofire.git",
             from: "5.9.0")
]

// Dosyaya aktar
import Alamofire

Kurulumdan sonra Alamofire, ek yapılandırma gerektirmeden AF ad alanı (Alamofire'ın kısaltması) aracılığıyla genel olarak kullanılabilir. Çoğu proje, kendi yapılandırmalarıyla bir Session ayarlayarak başlar — bu, temel URL, varsayılan başlıklar, zaman aşımları ve TLS sertifika işleyicileri ayarlamaya olanak tanır.

swift
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 30
let session = Session(configuration: configuration)

Session(configuration:) aracılığıyla özel bir oturum oluşturmak, uygulamanın farklı bölümleri için benzersiz bir yapılandırma gerektiğinde gereklidir — örneğin, agresif önbellekleme ile görüntü indirmeleri için ayrı bir oturum ve kimlik doğrulama ile API istekleri için başka bir oturum. Alamofire Session yalnızca yapılandırmayı değil, aynı zamanda bir interceptor, serverTrustManager, cachedResponseHandler ve redirectHandler'ı da kabul ederek isteğin tüm aşamalarında ağ davranışı üzerinde tam kontrol sağlar.

Temel özellikler

Alamofire, iOS uygulamalarındaki çoğu ağ etkileşimi senaryosunu kapsayan geniş bir işlev yelpazesi sunar. Temel özelliklere bakalım.

HTTP İstekleri

Temel istek sözdizimi, yöntem, URL, parametreler ve kodlamayı içerir. HTTPMethod enum'u aracılığıyla tüm standart HTTP yöntemleri desteklenir: get, post, put, patch, delete. Parametreler, URL parametreleri (URLEncoding), JSON gövdesi (JSONEncoding) veya çok parçalı form verileri (MultipartFormData) olarak kodlanabilir.

swift
AF.request("https://api.example.com/users", method: .post,
           parameters: ["name": "Alex", "role": "developer"])
    .validate()
    .responseDecodable(of: User.self) { response in
        switch response.result {
        case .success(let user):
            print("Kullanıcı tarafından oluşturuldu: \(user)")
        case .failure(let error):
            print("Hata: \(error)")
        }
    }

validate() yöntemi, durum kodunu (200–299) ve içerik türünü otomatik olarak kontrol eder, beklenmeyen yanıtlarda hata döndürerek manuel statusCode kontrolünü ortadan kaldırır. responseDecodable, JSON'u Swift yapılarına otomatik olarak dönüştürmek için Decodable protokolünü kullanır — bu, manuel JSONSerialization'ı ortadan kaldırır ve REST API'leri ile çalışırken kalıp kodu azaltır.

Yanıt İşleme

Alamofire, çeşitli yanıt işleyici türlerini destekler: response (ham veri), responseJSON (sözlük/dizi), responseString (metin), responseData (Data) ve responseDecodable (Decodable model). Yanıt dönüştürücüler özelleştirilebilir — protobuf, grafik formatları veya özel protokoller için.

Dosya Yükleme ve İndirme

Sunucuya veri yüklemek için upload kullanılır ve Data, File ile MultipartFormData'yı destekler. Büyük dosyaların indirilmesi, bağlantı kesintisinden sonra resumeData aracılığıyla devam ettirme özelliği ile download üzerinden yapılır. Her iki işlem de kullanıcı arayüzünde görüntülemek için 0'dan 1'e kesirli değerlerle uploadProgress ve downloadProgress aracılığıyla ilerleme takibini destekler.

Alamofire ile çok parçalı yükleme özellikle kullanışlıdır: upload(multipartFormData:) yöntemi, append aracılığıyla form parçalarının eklendiği bir closure alır. Her parça, veri, dosya veya akışın yanı sıra kendi adı ve mime türünü içerebilir. Alamofire, çok parçalı sınırları otomatik olarak hesaplar ve doğru Content-Type başlığını ayarlayarak geliştiricinin istek gövdesini manuel olarak oluşturmasını engeller. Büyük dosyalar için, dosyanın tamamını belleğe yüklemek yerine akış sağlayıcıları kullanılması önerilir — bu, kaynakları sınırlı mobil cihazlarda bellek sınırının aşılmasını önler. Tipik bir senaryo, tek bir çok parçalı istekte profil verileriyle birlikte kullanıcı avatarı göndermektir; bu, HTTP çağrılarının sayısını azaltır ve sunucu tarafı işlemeyi basitleştirir.

Alamofire vs URLSession

Alamofire'ı yerel URLSession ile karşılaştırmak, mimari kararlar almaya yardımcı olur. Alamofire, URLSession'ın yerini almaz — onun üzerine inşa edilir ve aynı yapılandırma, önbellekleme ve arka plan görev mekanizmalarını kullanır. URLSession'ın tüm özelliklerine Alamofire aracılığıyla erişilebilir, ancak daha kullanışlı bir bildirimsel sözdizimi ile.

KriterAlamofireURLSession
SözdizimiBildirimsel, zincirlemeEmir kipi, closure
JSON Kod ÇözmeOtomatik (responseDecodable)Manuel (JSONSerialization/JSONDecoder)
Doğrulamavalidate() — yerleşikManuel statusCode kontrolü
İlerlemeuploadProgress, downloadProgressURLSessionTaskDelegate aracılığıyla
YakalayıcılarRequestInterceptor, EventMonitorTemsilciler, alt sınıflar
BağımlılıklarKurulum gerektirir (SPM, CocoaPods)Hiçbiri, Foundation'da yerleşik

Büyük projelerde, Alamofire ağ isteği kodunu %30–50 oranında azaltır ve hata yönetimini basitleştirir. Küçük projelerde veya ikili dosya boyutunun katı bir kısıtlama olduğu durumlarda, harici bağımlılıkların olmaması nedeniyle yerel URLSession tercih edilir.

Modern Alamofire 5, bir Publisher döndüren publishDecodable özelliği aracılığıyla Combine ile entegre olur ve hata yönetimi ve veri dönüşümü ile reaktif istek zincirleri oluşturmayı sağlar. async/await için, value sonekine sahip yöntemler mevcuttur — örneğin, AF.request(url).serializingDecodable(User.self).value, sözdizimini son derece özlü hale getirir ve yerel URLSession ile çalışmayı anımsatır. async/await kullanıldığında, closure'lara artık gerek kalmaz ve hata yönetimi standart Swift do-catch blokları aracılığıyla yapılır, uzun vadede kod bakımını ve okunabilirliği basitleştirir.

Kod örnekleri

Daha karmaşık bir örneğe bakalım — otomatik olarak bir yetkilendirme tokenı ekleyen ve 401 hatasında yeniden deneme yapan bir yakalayıcı ile istek. Bu, JWT kimlik doğrulaması kullanan uygulamalar için tipik bir senaryodur.

swift
class AuthInterceptor: RequestInterceptor {
    func adapt(_ urlRequest: URLRequest,
               for session: Session,
               completion: @escaping (Result<URLRequest, Error>) -> Void) {
        var request = urlRequest
        request.setValue("Bearer \(TokenManager.shared.token)",
                         forHTTPHeaderField: "Authorization")
        completion(.success(request))
    }

    func retry(_ request: Request,
              for session: Session,
              dueTo error: Error,
              completion: @escaping (RetryResult) -> Void) {
        guard let response = request.response,
              response.statusCode == 401
        else { return completion(.doNotRetry) }
        TokenManager.shared.refreshToken { success in
            completion(success ? .retry : .doNotRetry)
        }
    }
}

AuthInterceptor iki protokol uygular: adapt (her isteğe token ekler) ve retry (401 hatasında token'ı yenilemeyi dener). retry yöntemi, yanıt durum kodunu kontrol eder ve 401 alınırsa TokenManager aracılığıyla yeni bir token ister. Başarılı yenilemeden sonra istek otomatik olarak yeniden dener.

Bir oturumla yakalayıcı kullanma:

swift
let session = Session(interceptor: AuthInterceptor())
session.request("https://api.example.com/profile")
    .responseDecodable(of: Profile.self) { response in
        print(response.result)
    }

Bu oturum aracılığıyla yapılan tüm istekler otomatik olarak AuthInterceptor'dan geçer — başlıklara token eklenir ve 401'de yenileme ve yeniden deneme yapılır. Bu, her istekte kimlik doğrulama kodu tekrarını ortadan kaldırır ve token yönetimi mantığını merkezileştirir.

Sık sorulan sorular

Alamofire, URLSession'dan nasıl farklıdır?

Alamofire, bildirimsel sözdizimi, yerleşik doğrulama, otomatik JSON kod çözme ve yakalayıcılarla URLSession üzerinde bir sarmalayıcıdır. URLSession, bağımlılığı olmayan Apple'ın yerel API'sidir ancak aynı görevler için daha fazla kod gerektirir. Alamofire ağ kodu hacmini %30–50 azaltır.

Bir projeye Alamofire nasıl kurulur?

Önerilen yöntem Swift Package Manager'dır: Xcode'da File → Add Packages'ı seçin, https://github.com/Alamofire/Alamofire.git URL'sini girin ve sürüm 5.9.0 veya üzerini belirtin. Alternatif olarak CocoaPods aracılığıyla: pod 'Alamofire', '~> 5.9'.

Alamofire async/await'i destekliyor mu?

Evet, Alamofire 5.5'ten itibaren async/await desteği eklendi. request, upload ve download yöntemleri await sözdizimi ile kullanılabilir. Alternatif olarak Alamofire, bir Publisher aracılığıyla değerler yayınlayarak Combine ile entegre olur.

Alamofire'da indirme ilerlemesi nasıl izlenir?

Alamofire, bir Progress nesnesi ile closure kabul eden uploadProgress ve downloadProgress yöntemlerini sağlar. İlerleme, fractionCompleted, completedUnitCount ve totalUnitCount döndürür ve bu, bir ilerleme çubuğu aracılığıyla arayüzde görüntülemek için kullanışlıdır.

Alamofire arka plan indirmeleri için kullanılabilir mi?

Evet, Alamofire standart URLSessionConfiguration.background aracılığıyla arka plan oturumlarını destekler. Uygun yapılandırmayla bir Session oluşturmanız ve AppDelegate'te bir tamamlama işleyicisi kaydetmeniz gerekir. DownloadRequest, uygulama simge durumuna küçültüldükten sonra bile çalışmaya devam edecektir.

Özet

  • Alamofire, URLSession üzerinde bildirimsel zincirleme sözdizimi ile HTTP istekleri için bir Swift kütüphanesidir
  • Kurulum SPM, CocoaPods veya Carthage aracılığıyla — minimum sürüm 5.9.0
  • Yerleşik doğrulama validate() ve responseDecodable aracılığıyla otomatik JSONDecoder, yanıt işlemeyi basitleştirir
  • RequestInterceptor kimlik doğrulama, yeniden deneme ve günlük kaydı mantığını merkezileştirir
  • İndirme ilerlemesi uploadProgress ve downloadProgress aracılığıyla 0–1 kesirli değerlerle kullanılabilir
  • Alamofire seçimi çok sayıda ağ isteği ve karmaşık hata yönetimi olan projelerde haklı çıkar

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun