Alamofire — bu nədir, Swift-də HTTP-klient və necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-03-07 Oxuma vaxtı: 8 dəq

Alamofire — Swift ilə yazılmış və URLSession üzərində qurulmuş iOS və macOS üçün məşhur HTTP kitabxanasıdır. O, şəbəkə sorğuları, JSON emalı, fayl yükləmə və autentifikasiya idarəetməsi üçün deklarativ sintaksis təmin edir. Alamofire GitHub repozitoriyasının (2025) məlumatlarına görə, Alamofire 42 mindən çox ulduza malikdir və dünyada minlərlə iOS layihəsində istifadə olunur.

Əsas məqamlar

  • Alamofire — URLSession üzərində deklarativ sintaksis ilə qurulmuş HTTP sorğuları üçün Swift kitabxanası
  • Metod zəncirləri sorğuları, parametrləri, başlıqları və cavab emalını qısa şəkildə təsvir etməyə imkan verir
  • Codable inteqrasiyası responseDecodable ilə JSON-u Swift modellərinə avtomatik deserializasiya edir
  • Interceptor-lar RequestInterceptor tokenlərin əlavə edilməsini, təkrar cəhdləri və loglamanı asanlaşdırır
  • Fayl yükləmə download və upload metodları vasitəsilə irəliləyiş, dayandırma və davam etdirməni dəstəkləyir

Alamofire nədir?

Alamofire — Alamofire Software Foundation tərəfindən yaradılmış (əvvəlcə Mattt Thompson 2014-cü ildə) Swift üçün HTTP kliyentidir. Kitabxana URLSession-ın aşağı səviyyəli detallarını abstraksiya edərək şəbəkə əlaqəsi üçün təmiz və ifadəli API təmin edir.

Alamofire-in əsas fəlsəfəsi — sorğu parametrlərinin (URL, metod, başlıqlar, parametrlər, kodlayıcı) ardıcıl çağırışlarla ötürüldüyü zəncir sintaksisidir. Bu, kodu daha oxunaqlı edir və URLRequest-in səhv konfiqurasiyası ilə bağlı xəta ehtimalını azaldır. Deklarativ yanaşma nə etmək lazım olduğuna diqqət yetirməyə imkan verir, əlaqənin necə qurulacağının detallarına deyil. Tərtibatçı istənilən nəticəni təsvir edir, kitabxana isə şəbəkə ilə aşağı səviyyəli işi öz üzərinə götürür.

Kitabxana 2014-cü ildən aktiv şəkildə dəstəklənir və yeddi əsas versiyadan keçmişdir. 2025–2026-cı illər üçün aktual olan Alamofire 5, Combine, async/await, cavab konvertorları, debug üçün EventMonitor və sorğu interceptorları üçün RequestInterceptor dəstəyini əhatə edir. Hər bir əsas versiya əhəmiyyətli təkmilləşdirmələr gətirdi: Alamofire 4 Codable dəstəyini, Alamofire 5 isə Combine Publishers və təkmilləşdirilmiş sorğu interceptor sistemini əlavə etdi.

Alamofire ekosisteminə əlavə kitabxanalar daxildir: şəkillərin yüklənməsi və keşlənməsi üçün AlamofireImage, iOS status barında şəbəkə göstəricisi üçün AlamofireNetworkActivityIndicator və ObjectMapper ilə inteqrasiya üçün AlamofireObjectMapper. Bu komponentlər Alamofire-i sadəcə HTTP kliyenti deyil, tam hüquqlu şəbəkə steki halına gətirir.

Quraşdırma və konfiqurasiya

Alamofire Swift Package Manager (tövsiyə olunur), CocoaPods və ya Carthage vasitəsilə quraşdırılır. Xcode-da File → Add Packages menyusunu açmaq, repozitoriyanın URL-ni yapışdırmaq və versiyanı göstərmək kifayətdir.

swift
// Swift Package Manager — Package.swift-ə əlavə et
dependencies: [
    .package(url: "https://github.com/Alamofire/Alamofire.git",
             from: "5.9.0")
]

// Faylda import
import Alamofire

Quraşdırmadan sonra Alamofire AF ad sahəsi (Alamofire-in qısaltması) vasitəsilə qlobal olaraq əlavə konfiqurasiya olmadan əlçatandır. Əksər layihələr öz konfiqurasiyası ilə Session-ı qurmağa başlayır — bu, əsas URL, standart başlıqlar, vaxt aşımları və TLS sertifikat işləyicilərini təyin etməyə imkan verir.

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

Session(configuration:) vasitəsilə öz sessiyanızı yaratmaq, tətbiqin müxtəlif hissələri üçün unikal konfiqurasiya tələb olunduqda zəruridir — məsələn, aqressiv keşləmə ilə şəkillərin yüklənməsi üçün ayrıca sessiya və autentifikasiya ilə API sorğuları üçün ayrıca sessiya. Alamofire sessiyası təkcə konfiqurasiyanı deyil, həm də interceptor, serverTrustManager, cachedResponseHandler və redirectHandler qəbul edir ki, bu da sorğunun bütün mərhələlərində şəbəkə davranışını tam idarə etməyə imkan verir.

Əsas xüsusiyyətlər

Alamofire iOS tətbiqlərində şəbəkə əlaqəsinin əksər ssenarilərini əhatə edən geniş funksiyalar dəsti təqdim edir. Əsas olanları nəzərdən keçirək.

HTTP sorğuları

Sorğunun əsas sintaksisi metod, URL, parametrlər və encoding-i əhatə edir. Bütün standart HTTP metodları HTTPMethod enum vasitəsilə dəstəklənir: get, post, put, patch, delete. Parametrlər URL parametrləri (URLEncoding), JSON gövdəsi (JSONEncoding) və ya multipart formatı (MultipartFormData) kimi kodlaşdırıla bilər.

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("İstifadəçi yaradıldı: \(user)")
        case .failure(let error):
            print("Xəta: \(error)")
        }
    }

validate() metodu avtomatik olaraq status kodunu (200–299) və məzmun tipini yoxlayır, qeyri-standart cavabda xəta qaytarır ki, bu da statusCode-un əl ilə yoxlanılmasını aradan qaldırır. responseDecodable JSON-un Swift strukturuna avtomatik deserializasiyası üçün Decodable protokolundan istifadə edir — bu, əl ilə JSONSerialization-ı aradan qaldırır və REST API ilə işləyərkən boilerplate kodunun həcmini azaldır.

Cavabların emalı

Alamofire bir neçə növ cavab işləyicisini dəstəkləyir: response (xam məlumat), responseJSON (lüğət/massiv), responseString (mətn), responseData (Data) və responseDecodable (Decodable model). Cavab konvertorları protobuf, qrafik formatlar və ya öz protokollarınız üçün fərdi yaradıla bilər.

Faylların yüklənməsi və endirilməsi

Məlumatları serverə yükləmək üçün Data, File və MultipartFormData-nı dəstəkləyən upload istifadə olunur. Böyük faylların endirilməsi, əlaqə kəsildikdən sonra resumeData vasitəsilə bərpa imkanı olan download vasitəsilə həyata keçirilir. Hər iki əməliyyat istifadəçi interfeysində göstərmək üçün 0-dan 1-ə qədər kəsr dəyərləri olan uploadProgress və downloadProgress vasitəsilə irəliləyişin izlənilməsini dəstəkləyir.

Alamofire ilə Multipart yükləmə xüsusilə rahatdır: upload(multipartFormData:) metodu append vasitəsilə forma hissələrinin əlavə olunduğu bir closure qəbul edir. Hər bir hissə məlumat, fayl və ya axın, həmçinin öz adı və mime tipini ehtiva edə bilər. Alamofire avtomatik olaraq multipart sərhədlərini hesablayır və düzgün Content-Type başlığını təyin edir ki, bu da tərtibatçını sorğu gövdəsini əl ilə formalaşdırmaqdan xilas edir. Böyük fayllar üçün bütün faylı yaddaşa yükləmək əvəzinə axın ötürülməsindən (stream provider) istifadə etmək tövsiyə olunur — bu, məhdud resurslu mobil cihazlarda yaddaş limitinin aşılmasının qarşısını alır. Tipik ssenari — istifadəçinin avatarını profil məlumatları ilə birlikdə bir multipart sorğusunda göndərmək, bu da HTTP çağırışlarının sayını azaldır və server tərəfində emalı sadələşdirir.

Alamofire vs URLSession

Alamofire və yerli URLSession-ın müqayisəsi memarlıq qərarı qəbul etməyə kömək edir. Alamofire URLSession-ı əvəz etmir — o, onun üzərində qurulur və eyni konfiqurasiya, keşləmə və fon tapşırıqları mexanizmlərindən istifadə edir. URLSession-ın bütün funksiyaları Alamofire vasitəsilə, lakin daha rahat deklarativ sintaksislə əlçatandır.

MeyarAlamofireURLSession
SintaksisDeklarativ, zəncirvariİmperativ, closure-lar
JSON dekodlaşdırmaAvtomatik (responseDecodable)Əl ilə (JSONSerialization/JSONDecoder)
Validasiyavalidate() — daxilistatusCode-un əl ilə yoxlanılması
İrəliləyişuploadProgress, downloadProgressURLSessionTaskDelegate delegatları vasitəsilə
Interceptor-larRequestInterceptor, EventMonitorDelegatlar, alt siniflər
AsılılıqlarQuraşdırma tələb edir (SPM, CocoaPods)Yoxdur, Foundation-a daxildir

Böyük layihələrdə Alamofire şəbəkə sorğuları üçün kodun həcmini 30–50% azaldır və xəta idarəetməsini sadələşdirir. Kiçik layihələrdə və ya binar ölçüsünə ciddi tələblər olduqda, xarici asılılıqların olmaması səbəbindən yerli URLSession daha üstündür.

Müasir Alamofire 5, Publisher qaytaran publishDecodable xüsusiyyəti vasitəsilə Combine ilə inteqrasiya edir ki, bu da xəta idarəetməsi və məlumat transformasiyası ilə reaktiv sorğu zəncirləri qurmağa imkan verir. Async/await üçün value şəkilçisi olan metodlar mövcuddur — məsələn, AF.request(url).serializingDecodable(User.self).value, bu da sintaksisi maksimum dərəcədə yığcam edir və yerli URLSession ilə işi xatırladır. Async/await istifadə edərkən closure-lara ehtiyac qalmır və xəta idarəetməsi Swift-in standart do-catch blokları vasitəsilə həyata keçirilir ki, bu da kodun saxlanmasını və uzunmüddətli perspektivdə oxunaqlılığını asanlaşdırır.

Kod nümunələri

Daha mürəkkəb bir nümunəyə baxaq — avtomatik olaraq autentifikasiya tokeni əlavə edən və 401 xətası zamanı təkrar cəhd edən interceptor ilə sorğu. Bu, JWT autentifikasiyası olan tətbiqlər üçün tipik ssenaridir.

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)
        }
    }
}

Interceptor AuthInterceptor iki protokolu tətbiq edir: adapt (hər sorğuya token əlavə edir) və retry (401 xətası zamanı tokeni yeniləməyə çalışır). retry metodu cavabın status kodunu yoxlayır və 401 alındıqda TokenManager vasitəsilə yeni token tələb edir. Uğurlu yeniləmədən sonra sorğu avtomatik olaraq təkrarlanır.

Interceptor-un sessiya ilə istifadəsi:

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

Bu sessiya vasitəsilə bütün sorğular avtomatik olaraq AuthInterceptor-dan keçir — token başlıqlara əlavə olunur, 401 zamanı isə yeniləmə və təkrar həyata keçirilir. Bu, hər sorğuda autentifikasiya kodunun təkrarlanmasını aradan qaldırır və tokenlərlə iş məntiqini mərkəzləşdirir.

Tez-tez verilən suallar

Alamofire URLSession-dan nə ilə fərqlənir?

Alamofire deklarativ sintaksis, daxili validasiya, avtomatik JSON dekodlaşdırma və interceptor-lar ilə URLSession üzərində qurulmuş bir əlavədir. URLSession asılılıqları olmayan yerli Apple API-sidir, lakin eyni tapşırıqlar üçün daha çox kod tələb edir. Alamofire şəbəkə kodunun həcmini 30–50% azaldır.

Alamofire-i layihəyə necə quraşdırmaq olar?

Tövsiyə olunan üsul — Swift Package Manager: Xcode-da File → Add Packages seçin, URL https://github.com/Alamofire/Alamofire.git daxil edin və 5.9.0-dan versiyanı göstərin. Alternativ olaraq CocoaPods: pod 'Alamofire', '~> 5.9'.

Alamofire async/await-i dəstəkləyirmi?

Bəli, Alamofire 5.5-dən etibarən async/await dəstəyi əlavə edilmişdir. request, upload və download metodları await sintaksisi ilə istifadə oluna bilər. Alternativ olaraq Alamofire Publisher-də dəyərlərin nəşri vasitəsilə Combine ilə inteqrasiya olunur.

Alamofire-də yükləmə irəliləyişini necə izləmək olar?

Alamofire Progress obyekti ilə closure qəbul edən uploadProgressdownloadProgress metodlarını təqdim edir. İrəliləyiş fractionCompleted, completedUnitCount və totalUnitCount qaytarır ki, bu da UI-da irəliləyiş çubuğu vasitəsilə göstərmək üçün əlverişlidir.

Alamofire-i fon yükləmələri üçün istifadə etmək olar?

Bəli, Alamofire standart URLSessionConfiguration.background vasitəsilə fon sessiyalarını dəstəkləyir. Müvafiq konfiqurasiya ilə Session yaratmaq və AppDelegate-də tamamlama işləyicisini qeydiyyatdan keçirmək lazımdır. DownloadRequest tətbiq minimuma endirildikdən sonra da işini davam etdirəcək.

Nəticə

  • Alamofire — URLSession üzərində deklarativ zəncirvari sintaksis ilə HTTP sorğuları üçün Swift kitabxanası
  • Quraşdırma SPM, CocoaPods və ya Carthage vasitəsilə — minimum versiya 5.9.0
  • Daxili validasiya validate() və responseDecodable vasitəsilə avtomatik JSONDecoder cavabların emalını asanlaşdırır
  • RequestInterceptor autentifikasiya, təkrar cəhd və loglama məntiqini mərkəzləşdirir
  • Yükləmə irəliləyişi 0–1 aralığında kəsr dəyəri ilə uploadProgress və downloadProgress vasitəsilə əlçatandır
  • Alamofire seçimi çox sayda şəbəkə sorğusu və mürəkkəb xəta idarəetməsi olan layihələrdə əsaslandırılmışdır

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun