Alamofire — Swift-da yozilgan va URLSession asosida qurilgan iOS va macOS uchun mashhur HTTP kutubxonasi. U tarmoq so'rovlari, JSON-ni qayta ishlash, fayllarni yuklash va autentifikatsiyani boshqarish uchun deklarativ sintaksisni taqdim etadi. Alamofire GitHub repozitoriyasi (2025) ma'lumotlariga ko'ra, Alamofire 42 mingdan ortiq yulduzga ega va butun dunyo bo'ylab minglab iOS loyihalarida qo'llaniladi.
Asosiy ma'lumotlar
Alamofire — Alamofire Software Foundation tomonidan yaratilgan (dastlab Mattt Thompson 2014-yilda) Swift uchun HTTP klientidir. Kutubxona URLSession-ning past darajadagi tafsilotlarini abstraktsiyalab, tarmoq aloqasi uchun toza va ifodali API taqdim etadi.
Alamofire-ning asosiy falsafasi — so'rov parametrlari (URL, metod, sarlavhalar, parametrlar, kodlovchi) ketma-ket chaqiriqlar orqali uzatiladigan zanjir sintaksisidir. Bu kodni o'qishni osonlashtiradi va URLRequest-noto'g'ri konfiguratsiyasi bilan bog'liq xatolar ehtimolini kamaytiradi. Deklarativ yondashuv nima qilish kerakligiga e'tibor qaratish imkonini beradi, ulanishni qanday sozlash tafsilotlariga emas. Dasturchi kerakli natijani tavsiflaydi, kutubxona esa tarmoq bilan past darajadagi ishni o'z zimmasiga oladi.
Kutubxona 2014-yildan beri faol qo'llab-quvvatlanmoqda va ettita asosiy versiyadan o'tgan. Alamofire 5, 2025–2026-yillar uchun dolzarb, Combine, async/await, javob konvertorlari, disk raskadrovka uchun EventMonitor va so'rov interceptorlari uchun RequestInterceptor qo'llab-quvvatlashini o'z ichiga oladi. Har bir asosiy versiya muhim yaxshilanishlarni olib keldi: Alamofire 4 Codable qo'llab-quvvatlashini, Alamofire 5 esa Combine Publishers va takomillashtirilgan so'rov interceptor tizimini qo'shdi.
Alamofire ekotizimiga qo'shimcha kutubxonalar kiradi: rasmlarni yuklash va keshlash uchun AlamofireImage, iOS holat satrida tarmoq ko'rsatkichi uchun AlamofireNetworkActivityIndicator va ObjectMapper bilan integratsiya uchun AlamofireObjectMapper. Ushbu komponentlar Alamofire-ni oddiy HTTP klientidan to'liq tarmoq stekiga aylantiradi.
Alamofire Swift Package Manager (tavsiya etiladi), CocoaPods yoki Carthage orqali o'rnatiladi. Xcode-da File → Add Packages menyusini ochish, repozitoriy URL-ni joylashtirish va versiyani ko'rsatish kifoya.
// Swift Package Manager — Package.swift-ga qo'shing
dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire.git",
from: "5.9.0")
]
// Faylda import
import Alamofire
O'rnatishdan so'ng Alamofire AF nom fazosi (Alamofire qisqartmasi) orqali qo'shimcha sozlamasiz global miqyosda mavjud. Ko'pgina loyihalar o'z konfiguratsiyasi bilan Session-ni sozlashdan boshlanadi — bu asosiy URL, standart sarlavhalar, kutish vaqtlari va TLS sertifikat ishlovchilarini o'rnatish imkonini beradi.
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 30
let session = Session(configuration: configuration)
Session(configuration:) orqali o'z sessiyangizni yaratish, dasturning turli qismlari uchun noyob konfiguratsiya kerak bo'lganda zarur — masalan, agressiv keshlash bilan rasmlarni yuklash uchun alohida sessiya va autentifikatsiya bilan API so'rovlari uchun alohida sessiya. Alamofire sessiyasi nafaqat konfiguratsiyani, balki interceptor, serverTrustManager, cachedResponseHandler va redirectHandler-ni ham qabul qiladi, bu so'rovning barcha bosqichlarida tarmoq xatti-harakatini to'liq nazorat qilish imkonini beradi.
Alamofire iOS-ilovalarida tarmoq aloqasining aksariyat stsenariylarini qamrab oluvchi keng funksiyalar to'plamini taqdim etadi. Keling, asosiylarini ko'rib chiqaylik.
So'rovning asosiy sintaksisi metod, URL, parametrlar va encoding-ni o'z ichiga oladi. Barcha standart HTTP metodlari HTTPMethod enum orqali qo'llab-quvvatlanadi: get, post, put, patch, delete. Parametrlar URL parametrlari (URLEncoding), JSON tanasi (JSONEncoding) yoki multipart format (MultipartFormData) sifatida kodlanishi mumkin.
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("Foydalanuvchi yaratildi: \(user)")
case .failure(let error):
print("Xato: \(error)")
}
}
validate() metodi avtomatik ravishda status kodini (200–299) va kontent turini tekshiradi, nostandart javobda xato qaytaradi, bu statusCode-ni qo'lda tekshirishni yo'q qiladi. responseDecodable JSON-ni Swift strukturasiga avtomatik deserializatsiya qilish uchun Decodable protokolidan foydalanadi — bu qo'lda JSONSerialization-ni yo'q qiladi va REST API bilan ishlashda boilerplate kod hajmini kamaytiradi.
Alamofire bir necha turdagi javob ishlovchilarini qo'llab-quvvatlaydi: response (xom ma'lumotlar), responseJSON (lug'at/massiv), responseString (matn), responseData (Data) va responseDecodable (Decodable model). Javob konvertorlari protobuf, grafik formatlar yoki o'z protokollaringiz uchun maxsus yaratilishi mumkin.
Ma'lumotlarni serverga yuklash uchun Data, File va MultipartFormData-ni qo'llab-quvvatlaydigan upload ishlatiladi. Katta fayllarni tushirish, ulanish uzilganidan so'ng resumeData orqali tiklash imkoniyati bilan download orqali amalga oshiriladi. Ikkala operatsiya foydalanuvchi interfeysida ko'rsatish uchun 0 dan 1 gacha kasr qiymatlari bilan uploadProgress va downloadProgress orqali taraqqiyotni kuzatishni qo'llab-quvvatlaydi.
Alamofire bilan multipart yuklash ayniqsa qulay: upload(multipartFormData:) metodi append orqali forma qismlari qo'shiladigan closure-ni qabul qiladi. Har bir qism ma'lumot, fayl yoki oqim, shuningdek o'z nomi va mime turini o'z ichiga olishi mumkin. Alamofire avtomatik ravishda multipart chegaralarini hisoblab chiqadi va to'g'ri Content-Type sarlavhasini o'rnatadi, bu dasturchini so'rov tanasini qo'lda shakllantirishdan ozod qiladi. Katta fayllar uchun butun faylni xotiraga yuklash o'rniga oqim uzatishdan (stream provider) foydalanish tavsiya etiladi — bu cheklangan resurslarga ega mobil qurilmalarda xotira chegarasidan oshib ketishning oldini oladi. Odatdagi stsenariy — foydalanuvchi avatarini profil ma'lumotlari bilan birga bitta multipart so'rovida yuborish, bu HTTP chaqiriqlar sonini kamaytiradi va server tomonida qayta ishlashni soddalashtiradi.
Alamofire va mahalliy URLSession-ni solishtirish arxitektura qarorini qabul qilishga yordam beradi. Alamofire URLSession-ni almashtirmaydi — u uning ustiga qurilgan va bir xil konfiguratsiya, keshlash va fon vazifalari mexanizmlaridan foydalanadi. URLSession-ning barcha imkoniyatlari Alamofire orqali, ammo qulayroq deklarativ sintaksis bilan mavjud.
| Mezon | Alamofire | URLSession |
|---|---|---|
| Sintaksis | Deklarativ, zanjirli | Imperativ, closure-lar |
| JSON dekodlash | Avtomatik (responseDecodable) | Qo'lda (JSONSerialization/JSONDecoder) |
| Validatsiya | validate() — o'rnatilgan | statusCode-ni qo'lda tekshirish |
| Taraqqiyot | uploadProgress, downloadProgress | URLSessionTaskDelegate delegatlari orqali |
| Interceptorlar | RequestInterceptor, EventMonitor | Delegatlar, pastki sinflar |
| Bog'liqliklar | O'rnatish talab qiladi (SPM, CocoaPods) | Yo'q, Foundation-ga kiritilgan |
Katta loyihalarda Alamofire tarmoq so'rovlari uchun kod hajmini 30–50% ga kamaytiradi va xatolarni boshqarishni soddalashtiradi. Kichik loyihalarda yoki binar hajmiga qattiq talablar mavjud bo'lganda, tashqi bog'liqliklarning yo'qligi sababli mahalliy URLSession afzalroqdir.
Zamonaviy Alamofire 5 Publisher qaytaradigan publishDecodable xususiyati orqali Combine bilan integratsiyalanadi, bu xatolarni boshqarish va ma'lumotlarni transformatsiya qilish bilan reaktiv so'rov zanjirlarini qurish imkonini beradi. Async/await uchun value qo'shimchasi bilan metodlar mavjud — masalan, AF.request(url).serializingDecodable(User.self).value, bu sintaksisni maksimal darajada ixcham qiladi va mahalliy URLSession bilan ishlashni eslatadi. Async/await-dan foydalanganda closure-larga ehtiyoj qolmaydi va xatolarni boshqarish Swift-ning standart do-catch bloklari orqali amalga oshiriladi, bu kodni saqlash va uni uzoq muddatli o'qishni soddalashtiradi.
Murakkabroq misolni ko'rib chiqaylik — avtomatik ravishda avtorizatsiya tokenini qo'shadigan va 401 xatosida qayta urinadigan interceptor bilan so'rov. Bu JWT autentifikatsiyasi bilan ilovalar uchun odatiy stsenariydir.
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 ikkita protokolni amalga oshiradi: adapt (har bir so'rovga token qo'shadi) va retry (401 xatosida tokenni yangilashga harakat qiladi). retry metodi javobning status kodini tekshiradi va 401 olinganda TokenManager orqali yangi token so'raydi. Muvaffaqiyatli yangilashdan so'ng so'rov avtomatik ravishda takrorlanadi.
Interceptor-ni sessiya bilan ishlatish:
let session = Session(interceptor: AuthInterceptor())
session.request("https://api.example.com/profile")
.responseDecodable(of: Profile.self) { response in
print(response.result)
}
Ushbu sessiya orqali barcha so'rovlar avtomatik ravishda AuthInterceptor-dan o'tadi — token sarlavhalarga qo'shiladi va 401 da yangilash va takrorlash amalga oshiriladi. Bu har bir so'rovda autentifikatsiya kodining takrorlanishini yo'q qiladi va tokenlar bilan ishlash mantiqini markazlashtiradi.
Tez-tez so'raladigan savollar
Alamofire deklarativ sintaksis, o'rnatilgan validatsiya, avtomatik JSON dekodlash va interceptorlar bilan URLSession ustidagi qo'shimcha qatlamdir. URLSession bog'liqliklari bo'lmagan mahalliy Apple API-sidir, ammo bir xil vazifalar uchun ko'proq kod talab qiladi. Alamofire tarmoq kodining hajmini 30–50% ga kamaytiradi.
Tavsiya etilgan usul — Swift Package Manager: Xcode-da File → Add Packages ni tanlang, URL https://github.com/Alamofire/Alamofire.git ni kiriting va 5.9.0 dan versiyani ko'rsating. Muqobil ravishda CocoaPods: pod 'Alamofire', '~> 5.9'.
Ha, Alamofire 5.5 dan boshlab async/await qo'llab-quvvatlashi qo'shilgan. request, upload va download metodlari await sintaksisi bilan ishlatilishi mumkin. Shu bilan bir qatorda, Alamofire Publisher-da qiymatlarni nashr etish orqali Combine bilan integratsiyalanadi.
Alamofire Progress obyekti bilan closure qabul qiladigan uploadProgress va downloadProgress metodlarini taqdim etadi. Taraqqiyot fractionCompleted, completedUnitCount va totalUnitCount qaytaradi, bu UI-da taraqqiyot paneli orqali ko'rsatish uchun qulay.
Ha, Alamofire standart URLSessionConfiguration.background orqali fon sessiyalarini qo'llab-quvvatlaydi. Tegishli konfiguratsiya bilan Session yaratish va AppDelegate-da yakunlash ishlovchisini ro'yxatdan o'tkazish kerak. DownloadRequest dastur minimallashtirilgandan keyin ham ishlashni davom ettiradi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.