Alamofire — یہ کیا ہے، Swift میں HTTP کلائنٹ اور کیسے کام کرتا ہے

مصنف: IT Sectr اشاعت: 2026-03-07 مطالعے کا وقت: 8 منٹ

Alamofire iOS اور macOS کے لیے ایک مشہور HTTP لائبریری ہے، جو Swift میں لکھی گئی ہے اور URLSession کے اوپر بنائی گئی ہے۔ یہ نیٹ ورک کی درخواستوں، JSON پروسیسنگ، فائل اپ لوڈ اور تصدیقی انتظام کے لیے اعلانیہ نحو فراہم کرتی ہے۔ Alamofire GitHub ذخیرہ (2025) کے مطابق، Alamofire کے 42,000 سے زیادہ ستارے ہیں اور دنیا بھر میں ہزاروں iOS پروجیکٹس میں استعمال ہوتا ہے۔

اہم نکات

  • Alamofire اعلانیہ نحو کے ساتھ URLSession پر بنائی گئی HTTP درخواستوں کے لیے ایک Swift لائبریری ہے
  • طریقوں کا سلسلہ درخواستوں، پیرامیٹرز، ہیڈرز اور جوابی کارروائی کو مختصر طور پر بیان کرنے کی اجازت دیتا ہے
  • Codable انضمام responseDecodable کے ساتھ خود بخود JSON کو Swift ماڈلز میں تبدیل کرتا ہے
  • انٹرسیپٹرز RequestInterceptor ٹوکن شامل کرنے، دوبارہ کوشش اور لاگنگ کو آسان بناتا ہے
  • فائل لوڈنگ download اور upload طریقوں کے ذریعے پیشرفت، توقف اور دوبارہ شروع کرنے کی حمایت کرتی ہے

Alamofire کیا ہے؟

Alamofire Swift کے لیے ایک HTTP کلائنٹ ہے جسے Alamofire Software Foundation (اصل میں 2014 میں Mattt Thompson) نے بنایا ہے۔ لائبریری نچلی سطح کی URLSession تفصیلات کو تجریدی شکل دیتی ہے، نیٹ ورک مواصلات کے لیے ایک صاف اور واضح API فراہم کرتی ہے۔

Alamofire کا بنیادی فلسفہ سلسلہ وار نحو ہے، جہاں درخواست کے پیرامیٹرز (URL، طریقہ، ہیڈرز، پیرامیٹرز، انکوڈر) ترتیب وار کالوں کے ذریعے منتقل ہوتے ہیں۔ یہ کوڈ کو زیادہ پڑھنے کے قابل بناتا ہے اور غلط URLRequest ترتیب سے متعلق غلطیوں کے امکان کو کم کرتا ہے۔ اعلانیہ طریقہ کار کنکشن سیٹ اپ کی تفصیلات کے بجائے اس بات پر توجہ مرکوز کرنے کی اجازت دیتا ہے کہ کیا کرنے کی ضرورت ہے۔ ڈویلپر مطلوبہ نتیجہ بیان کرتا ہے اور لائبریری نچلی سطح کے نیٹ ورک کے کام کو سنبھالتی ہے۔

لائبریری 2014 سے فعال طور پر برقرار ہے اور سات بڑے ورژنز سے گزری ہے۔ Alamofire 5، 2025–2026 تک موجودہ، Combine، async/await، جوابی کنورٹرز، ڈیبگنگ کے لیے EventMonitor اور درخواستوں کو روکنے کے لیے RequestInterceptor کی حمایت شامل کرتا ہے۔ ہر بڑا ورژن اہم بہتری لایا: Alamofire 4 نے Codable سپورٹ شامل کیا، Alamofire 5 نے Combine Publishers اور ایک بہتر درخواست روکنے کا نظام شامل کیا۔

Alamofire ماحولیاتی نظام میں اضافی لائبریریاں شامل ہیں: AlamofireImage تصویر لوڈنگ اور کیشنگ کے لیے، AlamofireNetworkActivityIndicator iOS اسٹیٹس بار میں نیٹ ورک انڈیکیٹر کے لیے، اور AlamofireObjectMapper ObjectMapper کے ساتھ انضمام کے لیے۔ یہ اجزاء Alamofire کو صرف HTTP کلائنٹ نہیں بلکہ ایک مکمل نیٹ ورک اسٹیک بناتے ہیں۔

انسٹالیشن اور سیٹ اپ

Alamofire Swift Package Manager (تجویز کردہ)، CocoaPods یا Carthage کے ذریعے انسٹال کیا جاتا ہے۔ Xcode میں، صرف File → Add Packages مینو کھولیں، ذخیرہ کا URL چسپاں کریں اور ورژن بتائیں۔

swift
// Swift Package Manager — Package.swift میں شامل کریں
dependencies: [
    .package(url: "https://github.com/Alamofire/Alamofire.git",
             from: "5.9.0")
]

// فائل میں درآمد کریں
import Alamofire

انسٹالیشن کے بعد، Alamofire اضافی ترتیب کے بغیر AF نام کی جگہ (Alamofire کا مخفف) کے ذریعے عالمی طور پر دستیاب ہے۔ زیادہ تر پروجیکٹ اپنی ترتیب کے ساتھ Session سیٹ کرکے شروع ہوتے ہیں — یہ بیس URL، ڈیفالٹ ہیڈرز، ٹائم آؤٹ اور TLS سرٹیفکیٹ ہینڈلرز سیٹ کرنے کی اجازت دیتا ہے۔

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

Session(configuration:) کے ذریعے حسب ضرورت سیشن بنانا ضروری ہے جب ایپلیکیشن کے مختلف حصوں کے لیے منفرد ترتیب درکار ہو — مثال کے طور پر، جارحانہ کیشنگ کے ساتھ تصویر ڈاؤن لوڈ کے لیے علیحدہ سیشن اور تصدیق کے ساتھ API درخواستوں کے لیے دوسرا سیشن۔ Alamofire Session نہ صرف ترتیب بلکہ interceptor، serverTrustManager، cachedResponseHandler اور redirectHandler کو بھی قبول کرتا ہے، درخواست کے تمام مراحل میں نیٹ ورک کے رویے پر مکمل کنٹرول فراہم کرتا ہے۔

اہم خصوصیات

Alamofire iOS ایپلیکیشنز میں زیادہ تر نیٹ ورک تعامل کے منظرناموں کا احاطہ کرنے والے افعال کی ایک وسیع رینج فراہم کرتا ہے۔ آئیے اہم خصوصیات پر نظر ڈالتے ہیں۔

HTTP درخواستیں

بنیادی درخواست کے نحو میں طریقہ، URL، پیرامیٹرز اور انکوڈنگ شامل ہے۔ HTTPMethod enum کے ذریعے تمام معیاری HTTP طریقے تعاون یافتہ ہیں: get، post، put، patch، delete۔ پیرامیٹرز کو URL پیرامیٹرز (URLEncoding)، JSON باڈی (JSONEncoding) یا ملٹی پارٹ فارم ڈیٹا (MultipartFormData) کے طور پر انکوڈ کیا جا سکتا ہے۔

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("صارف کے ذریعہ تخلیق کردہ: \(user)")
        case .failure(let error):
            print("غلطی: \(error)")
        }
    }

validate() طریقہ خود بخود اسٹیٹس کوڈ (200–299) اور مواد کی قسم چیک کرتا ہے، غیر متوقع جواب پر غلطی لوٹاتا ہے، دستی statusCode چیک کو ختم کرتا ہے۔ responseDecodable JSON کو Swift ڈھانچے میں خودکار طور پر تبدیل کرنے کے لیے Decodable پروٹوکول استعمال کرتا ہے — یہ دستی JSONSerialization کو ختم کرتا ہے اور REST APIs کے ساتھ کام کرتے وقت بوائلرپلیٹ کوڈ کو کم کرتا ہے۔

جوابی کارروائی

Alamofire کئی قسم کے جوابی ہینڈلرز کو سپورٹ کرتا ہے: response (خام ڈیٹا)، responseJSON (لغت/صف)، responseString (متن)، responseData (Data)، اور responseDecodable (Decodable ماڈل)۔ جوابی کنورٹرز حسب ضرورت ہو سکتے ہیں — protobuf، گرافک فارمیٹس یا حسب ضرورت پروٹوکول کے لیے۔

فائل اپ لوڈ اور ڈاؤن لوڈ

سرور پر ڈیٹا اپ لوڈ کرنے کے لیے upload استعمال ہوتا ہے، جو Data، File اور MultipartFormData کو سپورٹ کرتا ہے۔ بڑی فائلوں کا ڈاؤن لوڈ کنکشن میں تعطل کے بعد resumeData کے ذریعے دوبارہ شروع کرنے کی صلاحیت کے ساتھ download کے ذریعے کیا جاتا ہے۔ دونوں آپریشنز صارف انٹرفیس میں ڈسپلے کرنے کے لیے 0 سے 1 کے کسری اقدار کے ساتھ uploadProgress اور downloadProgress کے ذریعے پیشرفت سے باخبر رہنے کی حمایت کرتے ہیں۔

Alamofire کے ساتھ ملٹی پارٹ اپ لوڈ خاص طور پر آسان ہے: upload(multipartFormData:) طریقہ ایک closure قبول کرتا ہے جہاں append کے ذریعے فارم کے حصے شامل کیے جاتے ہیں۔ ہر حصہ ڈیٹا، فائل یا سٹریم کے ساتھ ساتھ اپنا نام اور mime قسم رکھ سکتا ہے۔ Alamofire خود بخود ملٹی پارٹ حدود کا حساب لگاتا ہے اور درست Content-Type ہیڈر سیٹ کرتا ہے، ڈویلپر کو دستی طور پر درخواست کا باڈی بنانے سے بچاتا ہے۔ بڑی فائلوں کے لیے، پوری فائل کو میموری میں لوڈ کرنے کے بجائے سٹریم فراہم کنندگان استعمال کرنے کی سفارش کی جاتی ہے — یہ محدود وسائل والے موبائل آلات پر میموری کی حد سے تجاوز کو روکتا ہے۔ ایک عام منظر نامہ صارف کے اوتار کو پروفائل ڈیٹا کے ساتھ ایک ہی ملٹی پارٹ درخواست میں بھیجنا ہے، جو HTTP کالز کی تعداد کو کم کرتا ہے اور سرور سائڈ پروسیسنگ کو آسان بناتا ہے۔

Alamofire بمقابلہ URLSession

Alamofire کا مقامی URLSession سے موازنہ آرکیٹیکچرل فیصلے لینے میں مدد کرتا ہے۔ Alamofire URLSession کو تبدیل نہیں کرتا — یہ اس کے اوپر بنتا ہے اور اسی ترتیب، کیشنگ اور بیک گراؤنڈ ٹاسک میکانزم کو استعمال کرتا ہے۔ URLSession کی تمام خصوصیات Alamofire کے ذریعے قابل رسائی ہیں، لیکن زیادہ آسان اعلانیہ نحو کے ساتھ۔

معیارAlamofireURLSession
نحواعلانیہ، سلسلہ وارحکمی، closures
JSON ڈی کوڈنگخودکار (responseDecodable)دستی (JSONSerialization/JSONDecoder)
توثیقvalidate() — بلٹ اندستی statusCode چیک
پیشرفتuploadProgress، downloadProgressURLSessionTaskDelegate کے ذریعے
انٹرسیپٹرزRequestInterceptor، EventMonitorمنتظم، ذیلی کلاسیں
انحصارانسٹالیشن درکار (SPM، CocoaPods)کوئی نہیں، Foundation میں بلٹ ان

بڑے پروجیکٹس میں، Alamofire نیٹ ورک درخواست کوڈ کو 30–50% کم کرتا ہے اور غلطی کے انتظام کو آسان بناتا ہے۔ چھوٹے پروجیکٹس میں یا جب بائنری سائز سخت پابندی ہو، بیرونی انحصار کی عدم موجودگی کی وجہ سے مقامی URLSession ترجیح دی جاتی ہے۔

جدید Alamofire 5 publishDecodable خصوصیت کے ذریعے Combine کے ساتھ ضم ہوتا ہے، جو ایک Publisher لوٹاتا ہے، غلطی کے انتظام اور ڈیٹا کی تبدیلی کے ساتھ رد عمل والی درخواستوں کی زنجیریں بنانے کی اجازت دیتا ہے۔ async/await کے لیے، value لاحقہ والے طریقے دستیاب ہیں — مثال کے طور پر، AF.request(url).serializingDecodable(User.self).value، نحو کو انتہائی مختصر بناتا ہے اور مقامی URLSession کے ساتھ کام کرنے کی یاد دلاتا ہے۔ async/await استعمال کرتے وقت، closures کی ضرورت نہیں رہتی اور غلطی کا انتظام معیاری Swift do-catch بلاکس کے ذریعے کیا جاتا ہے، طویل مدت میں کوڈ کی دیکھ بھال اور پڑھنے کی اہلیت کو آسان بناتا ہے۔

کوڈ کی مثالیں

آئیے ایک زیادہ پیچیدہ مثال دیکھتے ہیں — ایک انٹرسیپٹر کے ساتھ درخواست جو خود بخود اجازت نامہ ٹوکن شامل کرتی ہے اور 401 غلطی پر دوبارہ کوشش کرتی ہے۔ یہ JWT تصدیق استعمال کرنے والی ایپلیکیشنز کے لیے ایک عام منظر نامہ ہے۔

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 دو پروٹوکول نافذ کرتا ہے: adapt (ہر درخواست میں ٹوکن شامل کرتا ہے) اور retry (401 غلطی پر ٹوکن کی تجدید کی کوشش کرتا ہے)۔ retry طریقہ جوابی اسٹیٹس کوڈ چیک کرتا ہے اور اگر 401 موصول ہوتا ہے، TokenManager کے ذریعے نیا ٹوکن درخواست کرتا ہے۔ کامیاب تجدید کے بعد، درخواست خود بخود دوبارہ کوشش کرتی ہے۔

سیشن کے ساتھ انٹرسیپٹر کا استعمال:

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

اس سیشن کے ذریعے تمام درخواستیں خود بخود AuthInterceptor سے گزرتی ہیں — ہیڈرز میں ٹوکن شامل کیا جاتا ہے اور 401 پر تجدید اور دوبارہ کوشش کی جاتی ہے۔ یہ ہر درخواست میں تصدیقی کوڈ کی نقل کو ختم کرتا ہے اور ٹوکن مینجمنٹ منطق کو مرکزی بناتا ہے۔

اکثر پوچھے گئے سوالات

Alamofire URLSession سے کیسے مختلف ہے؟

Alamofire اعلانیہ نحو، بلٹ ان توثیق، خودکار JSON ڈی کوڈنگ اور انٹرسیپٹرز کے ساتھ URLSession پر ایک ریپر ہے۔ URLSession بغیر انحصار کے Apple کا مقامی API ہے لیکن اسی کاموں کے لیے زیادہ کوڈ درکار ہے۔ Alamofire نیٹ ورک کوڈ کے حجم کو 30–50% کم کرتا ہے۔

پروجیکٹ میں Alamofire کیسے انسٹال کریں؟

تجویز کردہ طریقہ Swift Package Manager ہے: Xcode میں، File → Add Packages منتخب کریں، URL https://github.com/Alamofire/Alamofire.git درج کریں اور ورژن 5.9.0 یا اس سے اوپر بتائیں۔ متبادل طور پر CocoaPods کے ذریعے: pod 'Alamofire', '~> 5.9'۔

کیا Alamofire async/await کو سپورٹ کرتا ہے؟

ہاں، Alamofire 5.5 سے async/await کی حمایت شامل کی گئی۔ request، upload اور download طریقے await نحو کے ساتھ استعمال کیے جا سکتے ہیں۔ متبادل طور پر، Alamofire Publisher کے ذریعے اقدار شائع کرکے Combine کے ساتھ ضم ہوتا ہے۔

Alamofire میں ڈاؤن لوڈ کی پیشرفت کیسے ٹریک کریں؟

Alamofire uploadProgress اور downloadProgress طریقے فراہم کرتا ہے، جو Progress آبجیکٹ کے ساتھ closure قبول کرتے ہیں۔ پیشرفت fractionCompleted، completedUnitCount اور totalUnitCount لوٹاتی ہے، جو پیشرفت بار کے ذریعے UI میں ڈسپلے کرنے کے لیے آسان ہے۔

کیا Alamofire بیک گراؤنڈ ڈاؤن لوڈ کے لیے استعمال کیا جا سکتا ہے؟

ہاں، Alamofire معیاری URLSessionConfiguration.background کے ذریعے بیک گراؤنڈ سیشنز کو سپورٹ کرتا ہے۔ آپ کو مناسب ترتیب کے ساتھ Session بنانا ہوگا اور AppDelegate میں ایک تکمیلی ہینڈلر رجسٹر کرنا ہوگا۔ DownloadRequest ایپلیکیشن کے چھوٹے ہونے کے بعد بھی کام جاری رکھے گا۔

خلاصہ

  • Alamofire URLSession پر اعلانیہ سلسلہ وار نحو کے ساتھ HTTP درخواستوں کے لیے ایک Swift لائبریری ہے
  • انسٹالیشن SPM، CocoaPods یا Carthage کے ذریعے — کم از کم ورژن 5.9.0
  • بلٹ ان توثیق validate() اور responseDecodable کے ذریعے خودکار JSONDecoder جوابی کارروائی کو آسان بناتے ہیں
  • RequestInterceptor تصدیق، دوبارہ کوشش اور لاگنگ منطق کو مرکزی بناتا ہے
  • ڈاؤن لوڈ پیشرفت uploadProgress اور downloadProgress کے ذریعے 0–1 کی کسری اقدار کے ساتھ دستیاب ہے
  • Alamofire کا انتخاب بڑی تعداد میں نیٹ ورک درخواستوں اور پیچیدہ غلطی کے انتظام والے پروجیکٹس میں جائز ہے

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں