URLSession iOS और macOS में नेटवर्क अनुरोधों के लिए एक API है, जो Foundation फ्रेमवर्क का हिस्सा है और HTTP, HTTPS, बैकग्राउंड डाउनलोड और WebSocket के साथ काम करने के लिए एक एकीकृत इंटरफ़ेस प्रदान करता है। इसने पुराने NSURLConnection को बदल दिया और Apple डेवलपर्स के लिए मुख्य नेटवर्किंग टूल बन गया। Apple Developer Documentation (2025) के अनुसार, URLSession iPhone और iPad ऐप्लिकेशन में 90% से अधिक नेटवर्क ट्रैफ़िक को संभालता है।
मुख्य बातें
URLSession Apple द्वारा iOS 7 और macOS 10.9 में प्रस्तुत नेटवर्क संचालन के लिए एक API है। इसने NSURLConnection को बदल दिया और नेटवर्क के साथ काम करने के लिए एक अधिक लचीला और शक्तिशाली मॉडल प्रदान किया। लाइब्रेरी HTTP/1.1, HTTP/2, HTTP/3 और WebSocket के साथ-साथ डेटा लोड करने के लिए बैकग्राउंड सत्र का समर्थन करती है।
पुराने NSURLConnection पर URLSession का मुख्य लाभ एकल सत्र के माध्यम से कई समवर्ती कनेक्शनों का समर्थन, अनुकूलन योग्य कॉन्फ़िगरेशन और डाउनलोड को रोकने और फिर से शुरू करने की क्षमता है। एक सत्र साझा सेटिंग्स के साथ नेटवर्क कार्यों के समूह को जोड़ता है: कैशिंग, कुकी नीति, टाइमआउट, TLS प्रमाणपत्र।
iOS में, URLSession सिस्टम DNS कैश, पावर प्रबंधन और बैकग्राउंड प्रक्रियाओं के साथ काम करता है। जब ऐप छोटा हो जाता है, तो सिस्टम बैकग्राउंड सत्र के माध्यम से डेटा लोड करना जारी रख सकता है, और पूरा होने पर, पूर्णता हैंडलर के माध्यम से ऐप को सूचित कर सकता है। बैकग्राउंड सत्र विशेष रूप से बड़ी फ़ाइलों को डाउनलोड करने, सामग्री को अपडेट करने और दस्तावेज़ और मीडिया ऐप्लिकेशन में डेटा सिंक्रोनाइज़ करने के लिए उपयोगी होते हैं। बैकग्राउंड सत्र के साथ काम करने के लिए, आपको URLSessionDelegate को लागू करना होगा और सत्र बनाते समय कॉन्फ़िगरेशन पहचानकर्ता पास करना होगा — सिस्टम ऐप पुनरारंभ के बाद सत्र को पुनर्स्थापित करने के लिए इस पहचानकर्ता का उपयोग करता है।
URLSession का एक महत्वपूर्ण लाभ HTTP/2 और HTTP/3 का समर्थन है। HTTP/2 मल्टीप्लेक्सिंग एक ही TCP कनेक्शन पर कई अनुरोध भेजने की अनुमति देता है, जिससे विलंबता और सर्वर लोड कम होता है। HTTP/3, UDP पर QUIC प्रोटोकॉल पर आधारित, TCP हैंडशेक को समाप्त करके और भी तेज़ कनेक्शन स्थापना प्रदान करता है।
URLSession आर्किटेक्चर में तीन प्रमुख घटक होते हैं: सत्र कॉन्फ़िगरेशन, सत्र स्वयं और कार्य। प्रत्येक घटक नेटवर्क इंटरैक्शन के अपने पहलू के लिए जिम्मेदार है, और उनका संयोजन नेटवर्क के साथ काम करते समय ऐप्लिकेशन के व्यवहार को निर्धारित करता है।
कॉन्फ़िगरेशन सत्र पैरामीटर सेट करता है — टाइमआउट से लेकर कैशिंग नीतियों तक। तीन प्रकार हैं: .default (डिस्क कैश के साथ मानक), .ephemeral (कैश और कुकी सहेजे बिना) और .background (बैकग्राउंड डाउनलोड के लिए)। कॉन्फ़िगरेशन में, आप प्रति होस्ट अधिकतम कनेक्शन की संख्या, अनुरोध और संसाधन टाइमआउट, TLS नीति और प्रॉक्सी सेटिंग्स निर्दिष्ट कर सकते हैं।
URLSessionTask सभी नेटवर्क संचालन के लिए आधार वर्ग है। मुख्य उपवर्ग हैं: URLSessionDataTask मेमोरी में डेटा लौटाने वाले GET और POST अनुरोधों के लिए, URLSessionDownloadTask डिस्क पर फ़ाइलें डाउनलोड करने के लिए, URLSessionUploadTask सर्वर पर फ़ाइलें अपलोड करने के लिए और URLSessionWebSocketTask iOS 13 से WebSocket के साथ काम करने के लिए।
सत्र डेलिगेट कार्यों की प्रगति के बारे में घटनाएँ प्राप्त करता है: डेटा प्राप्ति, डाउनलोड पूर्णता, प्रमाणीकरण त्रुटियाँ, रीडायरेक्ट। URLSessionDelegate और इसके उप-प्रोटोकॉल प्रमाणीकरण के दौरान TLS प्रमाणपत्रों को इंटरसेप्ट करने, URLCache के माध्यम से प्रतिक्रिया कैशिंग प्रबंधित करने और बड़ी फ़ाइलों के डाउनलोड प्रगति की निगरानी करने की अनुमति देते हैं। वैकल्पिक रूप से, सरल मामलों के लिए closures (पूर्णता हैंडलर) का उपयोग किया जा सकता है जहाँ मध्यवर्ती घटना प्रबंधन की आवश्यकता नहीं है।
URLSession के साथ मूल कार्यप्रवाह इस प्रकार है: एक कॉन्फ़िगरेशन बनाएँ, उसके आधार पर एक सत्र बनाएँ, फिर सत्र के माध्यम से URL अनुरोध के साथ एक कार्य बनाएँ, और कार्य प्रारंभ करें। आइए closure के साथ GET अनुरोध का उदाहरण देखें। यह पैटर्न अधिकांश iOS ऐप्लिकेशन में REST APIs से डेटा प्राप्त करने, इमेज लोड करने और क्लाउड सेवाओं के साथ इंटरैक्ट करने के लिए उपयोग किया जाता है।
let url = URL(string: "https://api.example.com/users")!
let session = URLSession.shared
let task = session.dataTask(with: url) { data, response, error in
guard let data = data, error == nil else {
print("Error: \(error!.localizedDescription)")
return
}
if let json = try? JSONSerialization.jsonObject(with: data) {
print("JSON: \(json)")
}
}
task.resume()
उदाहरण URLSession.shared का उपयोग करता है — सरल अनुरोधों के लिए .default कॉन्फ़िगरेशन वाला सिंगलटन। dataTask एक अतुल्यकालिक संचालन बनाता है लेकिन इसे प्रारंभ नहीं करता — आपको resume() कॉल करना होगा। अनुरोध पूरा होने के बाद closure निष्पादित होता है और data, response या error लौटाता है। अपने स्वयं के कॉन्फ़िगरेशन के साथ कस्टम सत्र के लिए, URLSession(configuration:) इनिशियलाइज़र का उपयोग करें, जो सभी सत्र कार्यों के लिए कैशिंग नीतियाँ, टाइमआउट, अधिकतम कनेक्शन, डिफ़ॉल्ट HTTP हेडर और प्रॉक्सी सेटिंग्स सेट करने की अनुमति देता है। यह दृष्टिकोण आपको अपने ऐप्लिकेशन में नेटवर्क व्यवहार पर पूर्ण नियंत्रण देता है।
URLSession फ़ाइल डाउनलोड को रोकने और फिर से शुरू करने की क्षमता के साथ-साथ बैकग्राउंड डाउनलोड का समर्थन करता है। DownloadTask फ़ाइल को अस्थायी निर्देशिका में सहेजता है, और पूर्णता closure में आपको इसे स्थायी स्थान पर ले जाना होगा।
let url = URL(string: "https://example.com/file.zip")!
let session = URLSession(configuration: .default)
let task = session.downloadTask(with: url) { location, _, _ in
guard let location = location else { return }
let destination = FileManager.default.temporaryDirectory
.appendingPathComponent("file.zip")
try? FileManager.default.moveItem(at: location, to: destination)
}
task.resume()
closure में location पैरामीटर एक अस्थायी फ़ाइल को इंगित करता है जिसे स्थानांतरित करने की आवश्यकता है, अन्यथा सिस्टम closure से बाहर निकलने के बाद इसे हटा देगा। प्रगति को ट्रैक करने के लिए, URLSessionDownloadDelegate का उपयोग didWriteData विधि के साथ करें, जो लिखे गए बाइट्स की संख्या और कुल फ़ाइल आकार पास करता है — इस डेटा का उपयोग उपयोगकर्ता इंटरफ़ेस में प्रगति पट्टी प्रदर्शित करने के लिए किया जा सकता है। downloadTask के साथ बैकग्राउंड सत्र ऐप के छोटा होने के बाद भी डाउनलोड जारी रखने की अनुमति देते हैं, और पूरा होने पर, सिस्टम AppDelegate में हैंडलर को कॉल करता है।
Alamofire एक Swift लाइब्रेरी है जो URLSession के ऊपर बनी है और अधिक घोषणात्मक इंटरफ़ेस प्रदान करती है। मूल API और Alamofire के बीच चुनाव परियोजना की जटिलता और टीम की प्राथमिकताओं पर निर्भर करता है।
| मापदंड | URLSession | Alamofire |
|---|---|---|
| निर्भरताएँ | कोई नहीं, Foundation में निर्मित | SPM या CocoaPods आवश्यक |
| सिंटैक्स | clauses के साथ अनिवार्य | श्रृंखलन के साथ घोषणात्मक |
| JSON हैंडलिंग | मैन्युअल JSONSerialization | Codable के साथ responseDecodable |
| इंटरसेप्टर | डेलिगेट के माध्यम से | RequestInterceptor, EventMonitor |
| प्रगति | डेलिगेट के माध्यम से | downloadProgress, uploadProgress |
सरल परियोजनाओं के लिए, URLSession पर्याप्त है और कोई निर्भरता नहीं जोड़ता। Alamofire कई नेटवर्क अनुरोधों, जटिल त्रुटि प्रबंधन और संक्षिप्त सिंटैक्स की आवश्यकता वाली परियोजनाओं में उचित है। दोनों प्रौद्योगिकियाँ सामान्य URLSessionConfiguration आधार साझा करती हैं और एक दूसरे के साथ संगत हैं। चुनते समय, विचार करें कि URLSession पूरी तरह से Apple द्वारा नियंत्रित है और iOS के साथ अपडेट होता है, जबकि Alamofire को लाइब्रेरी डेवलपर्स को नए OS संस्करणों के साथ संगतता बनाए रखने की आवश्यकता होती है।
आधुनिक Swift async/await का समर्थन करता है, जो closures की तुलना में नेटवर्क अनुरोधों को अधिक पठनीय बनाता है। आइए अतुल्यकालिक सिंटैक्स का उपयोग करके उसी GET अनुरोध को देखें।
func fetchUsers() async throws -> [User] {
let url = URL(string: "https://api.example.com/users")!
let (data, _) = try await URLSession.shared.data(from: url)
let users = try JSONDecoder().decode([User].self, from: data)
return users
}
data(from:) विधि iOS 15 और macOS 12 से उपलब्ध है। यह एक टपल (Data, URLResponse) लौटाती है और नेटवर्क समस्याओं पर त्रुटि फेंकती है। Codable मॉडल के साथ JSONDecoder स्वचालित रूप से प्रतिक्रिया को डीसेरियलाइज़ करता है — यह पिछले उदाहरण के बोझिल JSONSerialization को बदल देता है।
JSON बॉडी के साथ POST अनुरोधों के लिए, URLRequest का उपयोग किया जाता है, जहाँ आप विधि, Content-Type हेडर और Data के रूप में अनुरोध बॉडी कॉन्फ़िगर करते हैं। Async/await इस प्रक्रिया को संक्षिप्त और स्पष्ट बनाता है, और do-catch ब्लॉक के माध्यम से त्रुटि प्रबंधन सरल है।
func createUser(name: String) async throws -> User {
var request = URLRequest(url: URL(string: "https://api.example.com/users")!)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let body = try JSONEncoder().encode(["name": name])
request.httpBody = body
let (data, _) = try await URLSession.shared.data(for: request)
return try JSONDecoder().decode(User.self, from: data)
}
अक्सर पूछे जाने वाले प्रश्न
URLSession NSURLConnection का आधुनिक प्रतिस्थापन है, जो iOS 7 में प्रस्तुत किया गया था। मुख्य अंतरों में सत्रों के माध्यम से कई कनेक्शनों का समर्थन, कार्य निलंबन और पुनरारंभ, बैकग्राउंड डाउनलोड और WebSocket शामिल हैं। NSURLConnection पदावनत है और नई परियोजनाओं में उपयोग के लिए अनुशंसित नहीं है।
प्रगति को ट्रैक करने के लिए, URLSessionDownloadDelegate का उपयोग urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite) विधि के साथ करें। वैकल्पिक रूप से, dataTask के लिए आप URLSessionTaskDelegate की सदस्यता ले सकते हैं और didSendBodyData के माध्यम से अपडेट प्राप्त कर सकते हैं।
बैकग्राउंड डाउनलोड .background(withIdentifier:) कॉन्फ़िगरेशन के माध्यम से कॉन्फ़िगर किए जाते हैं। ऐप AppDelegate में एक पूर्णता हैंडलर पंजीकृत करता है और छोटा या बंद होने के बाद भी परिणाम प्राप्त करता है। सिस्टम डाउनलोड का प्रबंधन करता है और sessionDidFinishEvents डेलिगेट के माध्यम से ऐप को सूचित करता है।
हाँ, iOS 13 से URLSession URLSessionWebSocketTask वर्ग के माध्यम से WebSocket का समर्थन करता है। यह webSocketTask(with:) विधि से बनाया जाता है और टेक्स्ट और बाइनरी संदेशों के समर्थन के साथ send, receive विधियाँ प्रदान करता है, साथ ही कनेक्शन बनाए रखने के लिए ping/pong भी प्रदान करता है।
URLSessionConfiguration के माध्यम से टाइमआउट कॉन्फ़िगर किए जाते हैं: timeoutIntervalForRequest गुण (अनुरोध के उत्तर की प्रतीक्षा) और timeoutIntervalForResource (पूरे डाउनलोड का अधिकतम समय)। डिफ़ॉल्ट: अनुरोध के लिए 60 सेकंड और संसाधन के लिए 7 दिन।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें