Alamofire হল iOS এবং macOS-এর জন্য একটি জনপ্রিয় HTTP লাইব্রেরি, যা Swift-এ লেখা এবং URLSession-এর উপর নির্মিত। এটি নেটওয়ার্ক অনুরোধ, JSON প্রক্রিয়াকরণ, ফাইল আপলোড এবং প্রমাণীকরণ ব্যবস্থাপনার জন্য ঘোষণামূলক সিনট্যাক্স প্রদান করে। Alamofire GitHub রিপোজিটরি (2025) অনুসারে, Alamofire-এর 42,000-এর বেশি স্টার রয়েছে এবং সারা বিশ্বে হাজার হাজার iOS প্রকল্পে এটি ব্যবহৃত হয়।
মূল বিষয়
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 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 সার্টিফিকেট হ্যান্ডলার সেট করতে দেয়।
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 30
let session = Session(configuration: configuration)
Session(configuration:)-এর মাধ্যমে একটি কাস্টম সেশন তৈরি করা প্রয়োজন যখন অ্যাপ্লিকেশনের বিভিন্ন অংশের জন্য অনন্য কনফিগারেশন প্রয়োজন — উদাহরণস্বরূপ, আক্রমণাত্মক ক্যাশিং সহ ইমেজ ডাউনলোডের জন্য একটি আলাদা সেশন এবং প্রমাণীকরণ সহ API অনুরোধের জন্য আরেকটি। Alamofire Session শুধু কনফিগারেশনই নয়, একটি ইন্টারসেপ্টর, serverTrustManager, cachedResponseHandler এবং redirectHandler-ও গ্রহণ করে, যা অনুরোধের সকল পর্যায়ে নেটওয়ার্ক আচরণের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়।
Alamofire iOS অ্যাপ্লিকেশনে বেশিরভাগ নেটওয়ার্ক মিথস্ক্রিয়া পরিস্থিতি কভার করে বিস্তৃত ফাংশন সরবরাহ করে। চলুন মূল বৈশিষ্ট্যগুলি দেখি।
মৌলিক অনুরোধ সিনট্যাক্সে পদ্ধতি, URL, প্যারামিটার এবং এনকোডিং অন্তর্ভুক্ত। HTTPMethod enum-এর মাধ্যমে সমস্ত মানক HTTP পদ্ধতি সমর্থিত: get, post, put, patch, delete। প্যারামিটারগুলি URL প্যারামিটার (URLEncoding), JSON বডি (JSONEncoding) বা মাল্টিপার্ট ফর্ম ডেটা (MultipartFormData) হিসাবে এনকোড করা যেতে পারে।
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 ডিসিরিয়ালাইজেশনের জন্য Decodable প্রোটোকল ব্যবহার করে Swift স্ট্রাকচারে — এটি ম্যানুয়াল JSONSerialization দূর করে এবং REST API-এর সাথে কাজ করার সময় বয়লারপ্লেট কোড হ্রাস করে।
Alamofire বিভিন্ন ধরনের প্রতিক্রিয়া হ্যান্ডলার সমর্থন করে: response (কাঁচা ডেটা), responseJSON (অভিধান/অ্যারে), responseString (টেক্সট), responseData (Data), এবং responseDecodable (Decodable মডেল)। প্রতিক্রিয়া কনভার্টার কাস্টম হতে পারে — protobuf, গ্রাফিক ফর্ম্যাট বা কাস্টম প্রোটোকলের জন্য।
সার্ভারে ডেটা আপলোডের জন্য upload ব্যবহার করা হয়, যা Data, File এবং MultipartFormData সমর্থন করে। বড় ফাইল ডাউনলোড করা হয় download-এর মাধ্যমে সংযোগ বিচ্ছিন্ন হওয়ার পর resumeData-এর মাধ্যমে পুনরায় শুরু করার ক্ষমতা সহ। উভয় অপারেশন ইউজার ইন্টারফেসে প্রদর্শনের জন্য 0 থেকে 1 পর্যন্ত ভগ্নাংশ মান সহ uploadProgress এবং downloadProgress-এর মাধ্যমে অগ্রগতি ট্র্যাকিং সমর্থন করে।
Alamofire-এর সাথে মাল্টিপার্ট আপলোড বিশেষভাবে সুবিধাজনক: upload(multipartFormData:) পদ্ধতি একটি ক্লোজার গ্রহণ করে যেখানে append-এর মাধ্যমে ফর্মের অংশ যোগ করা হয়। প্রতিটি অংশে ডেটা, ফাইল বা স্ট্রিমের পাশাপাশি নিজস্ব নাম এবং mime টাইপ থাকতে পারে। Alamofire স্বয়ংক্রিয়ভাবে মাল্টিপার্ট সীমানা গণনা করে এবং সঠিক Content-Type হেডার সেট করে, ডেভেলপারকে ম্যানুয়ালি অনুরোধ বডি তৈরি করা থেকে বাঁচায়। বড় ফাইলের জন্য, পুরো ফাইল মেমরিতে লোড করার পরিবর্তে স্ট্রিম প্রদানকারী ব্যবহার করার পরামর্শ দেওয়া হয় — এটি সম্পদ-সীমিত মোবাইল ডিভাইসে মেমরি সীমা অতিক্রম করা রোধ করে। একটি সাধারণ পরিস্থিতি হল একটি একক মাল্টিপার্ট অনুরোধে প্রোফাইল ডেটার সাথে ব্যবহারকারীর অবতার পাঠানো, যা HTTP কলের সংখ্যা হ্রাস করে এবং সার্ভার-সাইড প্রক্রিয়াকরণ সহজ করে।
Alamofire-কে নেটিভ URLSession-এর সাথে তুলনা করা আর্কিটেকচারাল সিদ্ধান্ত নিতে সাহায্য করে। Alamofire URLSession-কে প্রতিস্থাপন করে না — এটি তার উপর নির্মিত এবং একই কনফিগারেশন, ক্যাশিং এবং ব্যাকগ্রাউন্ড টাস্ক প্রক্রিয়া ব্যবহার করে। URLSession-এর সমস্ত বৈশিষ্ট্য Alamofire-এর মাধ্যমে অ্যাক্সেসযোগ্য, তবে আরও সুবিধাজনক ঘোষণামূলক সিনট্যাক্স সহ।
| মাপকাঠি | Alamofire | URLSession |
|---|---|---|
| সিনট্যাক্স | ঘোষণামূলক, চেইনিং | বাধ্যতামূলক, ক্লোজার |
| JSON ডিকোডিং | স্বয়ংক্রিয় (responseDecodable) | ম্যানুয়াল (JSONSerialization/JSONDecoder) |
| যাচাইকরণ | validate() — অন্তর্নির্মিত | ম্যানুয়াল statusCode পরীক্ষা |
| অগ্রগতি | uploadProgress, downloadProgress | URLSessionTaskDelegate-এর মাধ্যমে |
| ইন্টারসেপ্টর | 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 ব্যবহার করার সময়, ক্লোজারের প্রয়োজন নেই এবং ত্রুটি পরিচালনা স্ট্যান্ডার্ড Swift do-catch ব্লকের মাধ্যমে করা হয়, দীর্ঘমেয়াদে কোড রক্ষণাবেক্ষণ এবং পঠনযোগ্যতা সহজ করে।
আসুন আরও জটিল উদাহরণ দেখি — একটি ইন্টারসেপ্টর সহ অনুরোধ যা স্বয়ংক্রিয়ভাবে অনুমোদন টোকেন যোগ করে এবং 401 ত্রুটিতে পুনরায় চেষ্টা করে। এটি JWT প্রমাণীকরণ সহ অ্যাপ্লিকেশনের জন্য একটি সাধারণ পরিস্থিতি।
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-এর মাধ্যমে নতুন টোকেন অনুরোধ করে। সফল রিফ্রেশের পর, অনুরোধ স্বয়ংক্রিয়ভাবে পুনরায় চেষ্টা করা হয়।
একটি সেশনের সাথে ইন্টারসেপ্টর ব্যবহার:
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-এর উপর একটি আবরণ যা ঘোষণামূলক সিনট্যাক্স, অন্তর্নির্মিত যাচাইকরণ, স্বয়ংক্রিয় JSON ডিকোডিং এবং ইন্টারসেপ্টর সহ। URLSession হল নির্ভরতা ছাড়াই Apple-এর নেটিভ API কিন্তু একই কাজের জন্য আরও কোড প্রয়োজন। Alamofire নেটওয়ার্ক কোডের পরিমাণ 30–50% হ্রাস করে।
প্রস্তাবিত পদ্ধতি হল Swift Package Manager: Xcode-এ, File → Add Packages নির্বাচন করুন, URL https://github.com/Alamofire/Alamofire.git লিখুন এবং সংস্করণ 5.9.0 বা তার পরে নির্দিষ্ট করুন। বিকল্পভাবে CocoaPods-এর মাধ্যমে: pod 'Alamofire', '~> 5.9'.
হ্যাঁ, Alamofire 5.5 থেকে async/await সমর্থন যোগ করা হয়েছে। request, upload এবং download পদ্ধতিগুলি await সিনট্যাক্সের সাথে ব্যবহার করা যেতে পারে। বিকল্পভাবে, Alamofire Publisher-এর মাধ্যমে মান প্রকাশ করে Combine-এর সাথে একীভূত হয়।
Alamofire uploadProgress এবং downloadProgress পদ্ধতি প্রদান করে, যা একটি Progress অবজেক্ট সহ ক্লোজার গ্রহণ করে। অগ্রগতি fractionCompleted, completedUnitCount এবং totalUnitCount ফেরত দেয়, যা প্রগতি বারের মাধ্যমে UI-তে প্রদর্শনের জন্য সুবিধাজনক।
হ্যাঁ, Alamofire স্ট্যান্ডার্ড URLSessionConfiguration.background-এর মাধ্যমে ব্যাকগ্রাউন্ড সেশন সমর্থন করে। আপনাকে উপযুক্ত কনফিগারেশন সহ একটি Session তৈরি করতে হবে এবং AppDelegate-এ একটি সমাপ্তি হ্যান্ডলার নিবন্ধন করতে হবে। DownloadRequest অ্যাপ্লিকেশন ছোট হয়ে গেলেও কাজ চালিয়ে যাবে।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন