परिचय
आधुनिक iOS और macOS एप्लिकेशन शायद ही कभी दूरस्थ सर्वरों के साथ बातचीत के बिना काम करते हैं। चाहे वह समाचार फ़ीड से डेटा लोड करना हो, रजिस्ट्रेशन फॉर्म भेजना हो, या फ़ाइलों को सिंक करना हो - इन सभी कार्यों के लिए HTTP क्लाइंट के उचित कार्यान्वयन की आवश्यकता होती है। Swift इकोसिस्टम में, डेवलपर्स के पास शक्तिशाली अंतर्निहित फ्रेमवर्क URLSession उपलब्ध है, जो async/await के कार्यान्वयन के साथ हर साल और अधिक सुविधाजनक होता जा रहा है।
इस लेख में, हम बुनियादी संरचनाओं से शुरू करके त्रुटि प्रबंधन और डेटा सीरियलाइज़ेशन की उन्नत तकनीकों तक, Swift में HTTP अनुरोधों को सही तरीके से बनाने का तरीका जानेंगे। आप सीखेंगे कि अपने एप्लिकेशन के लिए स्वच्छ, सुरक्षित और कुशल नेटवर्क कोड कैसे लिखें।
URLSession की मूल बातें: पहला HTTP अनुरोध
URLSession क्लास Swift में किसी भी नेटवर्क कार्य की नींव है। यह कॉन्फ़िगरेशन, कैशिंग, सत्र और अनुरोधों के प्रत्यक्ष निष्पादन का प्रबंधन करता है। आइए सर्वर से डेटा प्राप्त करने के लिए सबसे सरल GET अनुरोध पर विचार करें।
एक सरल GET अनुरोध बनाना
import Foundation
// 1. URL बनाएँguard let url = URL(string: "https://api.example.com/users") else { print("अमान्य URL") return}
// 2. अनुरोध बनाएँ (डिफ़ॉल्ट GET है)var request = URLRequest(url: url)request.httpMethod = "GET"request.setValue("application/json", forHTTPHeaderField: "Accept")
// 3. सत्र बनाएँlet session = URLSession.shared
// 4. अनुरोध निष्पादित करें (क्लोज़र के साथ पुराना तरीका)let task = session.dataTask(with: request) { data, response, error in if let error = error { print("अनुरोध त्रुटि: \\(error.localizedDescription)") return } guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else { print("सर्वर ने त्रुटि लौटाई") return } if let data = data, let jsonString = String(data: data, encoding: .utf8) { print("प्राप्त डेटा: \\(jsonString)") }}task.resume() // महत्वपूर्ण! कार्य प्रारंभ करेंमुख्य बिंदु: हमेशा प्रतिक्रिया स्थिति (200...299) की जाँच करें, resume() को कॉल करना न भूलें, और संभावित त्रुटियों को संभालें। वास्तविक परियोजनाओं में, इस कोड को आमतौर पर एक अलग सेवा स्तर पर ले जाया जाता है।
आधुनिक दृष्टिकोण: async/await
Swift 5.5 से शुरू होकर, async/await का उपयोग करना संभव हो गया है, जो कोड को अधिक पठनीय बनाता है और "क्लोज़र पिरामिड" से छुटकारा दिलाता है।
func fetchUsers() async throws -> Data { guard let url = URL(string: "https://api.example.com/users") else { throw URLError(.badURL) } var request = URLRequest(url: url) request.httpMethod = "GET" request.setValue("application/json", forHTTPHeaderField: "Accept") let (data, response) = try await URLSession.shared.data(for: request) guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else { throw URLError(.badServerResponse) } return data}इस कोड को किसी भी एसिंक्रोनस फ़ंक्शन या टास्क से कॉल किया जा सकता है, जो तर्क को काफी सरल बनाता है।
JSON के साथ काम करना: Codable और डेटा मॉडल
शायद ही कभी डेटा "कच्चे" रूप में आता है। अक्सर हम JSON के साथ काम करते हैं। Swift एक सुरुचिपूर्ण समाधान प्रदान करता है - Codable प्रोटोकॉल (जो Encodable और Decodable को जोड़ता है)।
मॉडल बनाना और डिकोड करना
// 1. डेटा संरचना परिभाषित करेंstruct User: Codable { let id: Int let name: String let email: String}
// 2. उपयोगकर्ताओं की सूची प्राप्त करने के लिए एसिंक्रोनस फ़ंक्शनfunc fetchUsers() async throws -> [User] { let data = try await fetchUsersData() // पिछले उदाहरण से let decoder = JSONDecoder() return try decoder.decode