Alamofire ایک HTTP کلائنٹ ہے جو iOS، macOS، tvOS اور watchOS کے لیے Swift زبان میں لکھا گیا ہے۔ یہ لائبریری پیرامیٹر انکوڈنگ، جوابات کی تصدیق اور ڈیٹا سیریلائزیشن کے کاموں کو خودکار کرتی ہے۔ Alamofire GitHub ذخیرے کے مطابق، یہ پروجیکٹ دنیا بھر میں 40,000 سے زیادہ ایپلیکیشنز میں استعمال ہوتا ہے۔ Alamofire کو ایپل ایکو سسٹم میں نیٹ ورکنگ کا ڈی فیکٹو معیار سمجھا جاتا ہے۔
اہم نکات
Alamofire ایپل پلیٹ فارمز پر HTTP درخواستوں کے ساتھ کام کرنے کے لیے ایک لائبریری ہے، جو مکمل طور پر Swift میں لکھی گئی ہے۔ ترقی کا آغاز 2014 میں Objective-C لائبریری AFNetworking کے متبادل کے طور پر ہوا اور یہ جلد ہی iOS کمیونٹی میں نیٹ ورکنگ کا معیار بن گیا۔
یہ لائبریری سسٹم فریم ورک URLSession کے اوپر بنائی گئی ہے، جو اس کے نچلے درجے کے API کو مختصر طریقہ کار کی زنجیروں میں تبدیل کرتی ہے۔ Alamofire URLSession کی تمام خصوصیات کو سپورٹ کرتا ہے: پس منظر کے سیشن، درخواست انٹرسیپٹرز، SSL سرٹیفکیٹس اور جوابات کی سیریلائزیشن کے متعدد طریقے۔
Swift Package Index کے مطابق، Alamofire GitHub پر 45,000 سے زیادہ ستاروں کے ساتھ سب سے مشہور Swift پیکیجز میں سے ایک ہے۔ یہ لائبریری iOS 10+، macOS 10.12+، tvOS 10+ اور watchOS 3+ کے ساتھ مطابقت رکھتی ہے۔
براہ راست URLSession استعمال کرنے کے مقابلے میں Alamofire کا بنیادی فائدہ بوائلر پلیٹ کوڈ کی کمی ہے۔ ایک AF.request کال 15–20 لائنوں کے دستی URLSession ترتیب، جواب کی پروسیسنگ اور ڈیٹا ڈی کوڈنگ کی جگہ لے لیتی ہے۔ ایک ہی وقت میں، لائبریری حسب ضرورت سیشنز اور ایکسٹینشنز کے ذریعے حسب ضرورت منظرناموں کے لیے مکمل لچک برقرار رکھتی ہے۔
Alamofire نیٹ ورکنگ کے افعال کی ایک وسیع رینج فراہم کرتا ہے جو زیادہ تر موبائل ڈویلپمنٹ کے منظرناموں کا احاطہ کرتی ہے۔ اپنی ماڈیولر آرکیٹیکچر کی بدولت، ڈویلپرز کو صرف ضروری اجزاء شامل کرنے کی ضرورت ہوتی ہے۔
HTTP طریقے GET، POST، PUT، PATCH، DELETE، HEAD، OPTIONS اور TRACE ایک یکساں API کے ذریعے نافذ کیے گئے ہیں۔ ہر طریقہ درخواست کے پیرامیٹرز، ہیڈر قبول کرتا ہے اور Result قسم کے طور پر جواب واپس کرتا ہے۔ ڈویلپر کو URLSession کو دستی طور پر ترتیب دینے کی ضرورت نہیں ہے — لائبریری فراہم کردہ دلائل کی بنیاد پر خود بخود ایسا کرتی ہے۔
Alamofire میں جوابات کی تصدیق ایپلیکیشن کو ڈیٹا منتقل کرنے سے پہلے اسٹیٹس کوڈز اور جواب کے مواد کو چیک کرنے کی اجازت دیتی ہے۔ لائبریری بندشوں کے ذریعے حسب ضرورت تصدیق کی شرائط کو سپورٹ کرتی ہے، جو خرابی کے انتظام پر مکمل کنٹرول دیتی ہے۔ ڈیفالٹ طور پر، صرف 200–299 اسٹیٹس کوڈز چیک کیے جاتے ہیں۔
پیرامیٹرز منتخب کردہ قسم کے مطابق خود بخود انکوڈ ہوتے ہیں: GET درخواستوں کے لیے URL انکوڈنگ اور POST کے لیے JSON انکوڈنگ۔ Alamofire پراپرٹی لسٹ انکوڈنگ اور ParameterEncoder پروٹوکول کے ذریعے حسب ضرورت انکوڈرز کو بھی سپورٹ کرتا ہے، جس سے فارمیٹ کو کسی بھی سرور کے مطابق ڈھالنے کی اجازت ملتی ہے۔
Alamofire میں سیشن ٹائم آؤٹ، SSL سرٹیفکیٹس، ڈیفالٹ HTTP ہیڈرز اور پراکسیز کو ترتیب دینے کی اجازت دیتا ہے۔ EventMonitor انٹرسیپٹرز درخواست کی زندگی کے چکر کے واقعات کو ٹریک کرنے کے قابل بناتے ہیں: تخلیق، بھیجنا، جواب وصول کرنا اور مکمل ہونا۔ یہ لاگنگ، تجزیہ اور پروڈکشن میں نیٹ ورک کے مسائل کو ڈیبگ کرنے کے لیے مفید ہے۔
Alamofire ایک سیشن پر مبنی آرکیٹیکچر استعمال کرتا ہے جو URLSession انسٹنس اور نیٹ ورک کنفیگریشن کو سمیٹتا ہے۔ ہر درخواست ہینڈلرز کی ایک زنجیر سے گزرتی ہے: اڈیپٹرز، دوبارہ کوشش کی پالیسیاں، تصدیق کرنے والے اور سیریلائزر، جو لچک اور توسیع پذیری کو یقینی بناتے ہیں۔
سیشن آبجیکٹ ایپلیکیشن میں تمام نیٹ ورک درخواستوں کا انتظام کرتا ہے۔ یہ ٹائم آؤٹ، ڈیفالٹ ہیڈرز اور سرٹیفکیٹس پر مشتمل کنفیگریشن کے ساتھ بنایا جاتا ہے۔ ہر AF.request کال ایک DataRequest واپس کرتی ہے جسے بھیجنے سے پہلے تبدیل کیا جا سکتا ہے۔ Alamofire سیشن کے کمزور حوالوں کے ذریعے خود بخود برقرار رکھنے کے چکروں کو ہینڈل کرتا ہے، میموری لیک کو روکتا ہے۔
import Alamofire
let session = Session(configuration: config)
session.request("https://api.example.com/users")
.validate()
.responseDecodable(of: [User].self) { response in
switch response.result {
case .success(let users):
print("موصول \(users.count) صارفین")
case .failure(let error):
print("خرابی: \(error.localizedDescription)")
}
}
Alamofire کی تنصیب Swift Package Manager، CocoaPods یا Carthage کے ذریعے کی جاتی ہے۔ نئے پروجیکٹس کے لیے تجویز کردہ طریقہ SPM ہے، جو Xcode میں شامل ہے، کیونکہ اس کے لیے اضافی ٹولز کی ضرورت نہیں ہے اور انضمام چند کلکس میں ہو جاتا ہے۔
Xcode میں پیکیج شامل کرنا مینو File → Add Packages کے ذریعے کیا جاتا ہے۔ ذخیرے کا URL: https://github.com/Alamofire/Alamofire۔ ورژن کو تازہ ترین مستحکم ریلیز پر مقرر کرنے کی سفارش کی جاتی ہے۔ Alamofire معنوی ورژننگ کی پیروی کرتا ہے اور تمام اہم تبدیلیاں CHANGELOG میں دستاویز کی جاتی ہیں۔
CocoaPods موجودہ انفراسٹرکچر والے پروجیکٹس کے لیے ایک مقبول آپشن ہے۔ اپنے Podfile میں pod 'Alamofire' لائن شامل کریں اور pod install چلائیں۔ Alamofire کی کوئی بیرونی انحصار نہیں ہے، جو انضمام کو آسان بناتا ہے اور موجودہ پروجیکٹس میں ورژن کے تنازعات کو ختم کرتا ہے۔
نیچے دی گئی مثالیں iOS ایپلیکیشنز میں Alamofire کے عام استعمال کے منظرناموں کو ظاہر کرتی ہیں: سادہ GET درخواستوں سے لے کر پیش رفت سے باخبر رہنے کے ساتھ فائل اپ لوڈ تک۔
پیرامیٹرز اور جواب کو Codable ماڈل میں ڈی کوڈ کرنے والی ایک سادہ GET درخواست موبائل ایپلیکیشنز میں Alamofire کا سب سے عام استعمال ہے۔ پیرامیٹرز خود بخود انکوڈ ہوتے ہیں اور جواب JSONDecoder کے ذریعے ڈی کوڈ ہوتا ہے۔ کوڈ جامع اور پڑھنے کے قابل ہے۔
struct User: Codable {
let id: Int
let name: String
let email: String
}
AF.request("https://jsonplaceholder.typicode.com/users",
method: .get)
.validate()
.responseDecodable(of: [User].self) { response in
switch response.result {
case .success(let users):
print("صارفین: \(users.count)")
case .failure(let error):
print("خرابی: \(error)")
}
}
JSON باڈی کے ساتھ POST درخواست سرور پر وسائل بنانے کے لیے استعمال ہوتی ہے۔ Alamofire JSONParameterEncoder کے ذریعے منتقل کردہ آبجیکٹ کو خود بخود انکوڈ کرتا ہے، ڈویلپر کو دستی سیریلائزیشن سے بچاتا ہے۔ جواب اسی JSONDecoder کا استعمال کرتے ہوئے ڈیٹا ماڈل میں ڈی کوڈ ہوتا ہے۔
let newUser = User(id: 1,
name: "علی خان",
email: "ivan@example.com")
AF.request("https://jsonplaceholder.typicode.com/users",
method: .post,
parameters: newUser,
encoder: JSONParameterEncoder.default)
.validate()
.responseDecodable(of: User.self) { response in
if let created = response.value {
print("صارف بنایا گیا: \(created)")
}
}
Alamofire میں upload طریقہ فائلوں، ڈیٹا اور ملٹی پارٹ فارم اپ لوڈ کو سپورٹ کرتا ہے۔ لائبریری خود بخود پیش رفت کا انتظام کرتی ہے اور uploadProgress بندشوں کے ذریعے اپ لوڈ کی حالت کو ٹریک کرنے کی اجازت دیتی ہے، جو پیش رفت کے اشارے کو ظاہر کرنے کے لیے آسان ہے۔
let imageData = UIImage(named: "photo")?.jpegData(compressionQuality: 0.8)
AF.upload(imageData,
to: "https://api.example.com/upload")
.uploadProgress { progress in
print("پیش رفت: \(progress.fractionCompleted * 100)%")
}
.responseDecodable(of: UploadResponse.self) { response in
print("اپ لوڈ مکمل")
}
Alamofire میں خرابی کا انتظام جواب کی تصدیق اور Result اقسام کے امتزاج پر مبنی ہے۔ خرابی کے ماڈل میں AFError شامل ہے، جو تمام عام نیٹ ورک کی ناکامی کے منظرناموں کا احاطہ کرتا ہے: ٹائم آؤٹ، کنکشن کا نقصان، سرور کی خرابیاں اور ناکام سیریلائزیشن۔ ہر کیس کو الگ سے ہینڈل کیا جاتا ہے۔
خرابی کے بعد دوبارہ کوشش کے لیے، Alamofire RequestRetrier میکانزم فراہم کرتا ہے۔ یہ پروٹوکول دوبارہ کوشش کی پالیسی کی وضاحت کرتا ہے: کوششوں کی تعداد، ان کے درمیان تاخیر اور وہ شرط جس پر دوبارہ کوشش کی جاتی ہے۔ مثال کے طور پر، 503 سرور کی خرابی پر، درخواست کو 2 سیکنڈ کے بعد دوبارہ آزمایا جا سکتا ہے، جبکہ 401 کی خرابی پر، ایک نیا تصدیقی ٹوکن درخواست کیا جا سکتا ہے۔
شماریات کے ساتھ AFError کا طریقہ اس بات کی ضمانت دیتا ہے کہ ڈویلپر کسی بھی قسم کی خرابی سے محروم نہ ہو — کمپائلر ہینڈلنگ کی مکملیت کی جانچ کرتا ہے۔ یہ کوڈ کو خام URLSession میں NSError کے ذریعے خرابی کے انتظام کے مقابلے میں زیادہ قابل اعتماد اور پیش قیاسی بناتا ہے۔
RequestRetrier پروٹوکول ایک دوبارہ کوشش کا طریقہ متعین کرتا ہے جو درخواست، سیشن، خرابی اور مکمل ہونے کی بندش وصول کرتا ہے۔ اس طریقہ میں، ڈویلپر فیصلہ کرتا ہے کہ آیا درخواست کو دوبارہ آزمایا جائے اور کس تاخیر کے بعد۔ Alamofire عام منظرناموں کے لیے ایک بلٹ ان RetryPolicy نفاذ فراہم کرتا ہے، لیکن پروڈکشن کوڈ کے لیے کاروباری منطق کی بنیاد پر حسب ضرورت پالیسیاں بنانے کی سفارش کی جاتی ہے۔
AFError مختلف خرابی کے زمروں کے لیے نیسٹڈ کیسز کے ساتھ ایک شماریات ہے۔ ڈویلپر ہر قسم کو الگ سے ہینڈل کر سکتا ہے: ٹائم آؤٹ کے لیے — درخواست دوبارہ آزمائیں، سرور کی خرابیوں کے لیے — صارف کو قابل فہم پیغام دکھائیں۔ Alamofire RequestRetrier پروٹوکول کے ذریعے حسب ضرورت دوبارہ کوشش کی پالیسیوں کو سپورٹ کرتا ہے۔
بلٹ ان تصدیق 200–299 کی حد میں اسٹیٹس کوڈز اور جواب کے مواد کی قسم کو چیک کرتی ہے۔ توسیعی تصدیق کے لیے، validate بندش کے ذریعے حسب ضرورت شرائط شامل کی جا سکتی ہیں، جو UI پرت کو ڈیٹا منتقل کرنے سے پہلے کاروباری منطق کی تصدیق کی اجازت دیتی ہیں۔
اکثر پوچھے گئے سوالات
Alamofire URLSession کے مقابلے میں ایک اعلیٰ سطحی API فراہم کرتا ہے۔ لائبریری پیرامیٹر انکوڈنگ، جواب کی تصدیق اور ڈیٹا سیریلائزیشن کو خودکار کرتی ہے، جبکہ URLSession کو نیٹ ورک کی درخواست کے ہر جزو کی دستی ترتیب کی ضرورت ہوتی ہے۔
ہاں، Alamofire SwiftUI کے ساتھ مکمل طور پر مطابقت رکھتا ہے۔ درخواستیں عام طور پر ObservableObject کے اندر یا Task کا استعمال کرتے ہوئے async/await کے ذریعے انجام دی جاتی ہیں۔ Alamofire UIKit پر منحصر نہیں ہے، لہذا یہ جدید SwiftUI ایپلیکیشنز میں بہترین کام کرتا ہے۔
Alamofire کے اہم متبادل ہیں: بلٹ ان URLSession، Moya (API تجرید کے ساتھ Alamofire کے اوپر ایک پرت)، FreshOS کا Networking اور GraphQL سرورز کے ساتھ کام کرنے کے لیے Apollo GraphQL۔ انتخاب پروجیکٹ کے آرکیٹیکچر پر منحصر ہے۔
Alamofire کے پاس Publishers ایکسٹینشنز کے ذریعے Combine کے ساتھ بلٹ ان انضمام ہے اور async/await کے ذریعے Swift Concurrency کو سپورٹ کرتا ہے۔ یہ جدید غیر مطابقت پذیر پروسیسنگ کے کسی بھی طریقے کو منتخب کرنے کی اجازت دیتا ہے۔
ٹائم آؤٹ سیشن کنفیگریشن کے ذریعے سیٹ کیا جاتا ہے۔ URLSessionConfiguration بناتے وقت timeoutIntervalForRequest اور timeoutIntervalForResource پراپرٹیز سیٹ کریں، پھر انہیں سیشن انیشیالائزر کو پاس کریں۔ ڈیفالٹ ویلیو 60 سیکنڈ ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں