परिचय: Swift डेवलपर अभी भी HTTP अनुरोध क्यों गूगल करते हैं?
\n\nयदि आपने कभी Swift में कोई ऐप लिखा है जो सर्वर से संवाद करता है, तो आप निश्चित रूप से इस प्रश्न का सामना कर चुके हैं। लगता है, इसमें क्या मुश्किल है? अनुरोध भेजा, उत्तर मिला। लेकिन व्यवहार में, हर दूसरा डेवलपर (अनुभवी भी) Stack Overflow खोलता है और खोजता है: "How to make HTTP request in Swift?"। और यह सामान्य है।
\n\nक्यों? क्योंकि Swift का पारिस्थितिकी तंत्र बदल रहा है। कल तक सभी closures और delegates लिखते थे। आज — async/await। और कल, शायद कुछ और आए। 2025 में, नेटवर्क अनुरोधों के दृष्टिकोण स्थिर हो गए हैं, लेकिन शैतान, हमेशा की तरह, विवरणों में है: थ्रेड प्रबंधन, त्रुटि प्रबंधन, अनुरोध रद्द करना, परीक्षण।
इस लेख में हम Swift में HTTP अनुरोध करने की वास्तविक सर्वोत्तम प्रथाओं पर चर्चा करेंगे — बुनियादी URLSession से लेकर async/await और लाइब्रेरीज़ के साथ उन्नत तकनीकों तक। आप सीखेंगे कि स्वच्छ, सुरक्षित और कुशल नेटवर्क कोड कैसे लिखें। चलिए शुरू करते हैं!
1. URLSession: वह नींव जो हर किसी को जाननी चाहिए
\n\nमुख्य बात से शुरू करते हैं। Swift (Foundation) की मानक लाइब्रेरी में HTTP के साथ काम करने के लिए सब कुछ है — यह URLSession क्लास है। याद रखें: 90% कार्यों के लिए आपको तृतीय-पक्ष लाइब्रेरीज़ की आवश्यकता नहीं है। URLSession एक शक्तिशाली, लचीला और मूल उपकरण है।
1.1. सरल GET अनुरोध (पुरानी शैली)
\n\nआइए याद करें कि यह पहले कैसे किया जाता था। यह कोड आप अभी भी लीगेसी प्रोजेक्ट्स में देख सकते हैं:
\n\nlet url = URL(string: "https://api.pythonlib.ru/users")!\nlet task = URLSession.shared.dataTask(with: url) { data, response, error in\n if let error = error {\n print("त्रुटि: \\(error.localizedDescription)")\n return\n }\n guard let data = data else {\n print("कोई डेटा नहीं")\n return\n }\n // डेटा के साथ काम करें\n print("प्राप्त बाइट्स: \\(data.count)")\n}\ntask.resume()\n\nयह कोड काम करता है। लेकिन इसकी कमियाँ हैं:
\n- \n
- Callback hell — यदि अनुरोधों की श्रृंखला बनानी हो, तो कोड अपठनीय हो जाता है। \n
- मेमोरी लीक — closure में
weak selfभूलना आसान है। \n - रद्द करना मुश्किल —
taskका संदर्भ रखना पड़ता है। \n
2025 में हम अलग तरह से लिखते हैं।
\n\n1.2. async/await के साथ आधुनिक GET अनुरोध
\n\nSwift 5.5 (iOS 15, macOS 12) से शुरू करके, हमारे पास structured concurrency है। यह सब कुछ बदल देता है:
\n\nfunc fetchUsers() async throws -> [User] {\n let url = URL(string: "https://api.pythonlib.ru/users")!\n let (data, response) = try await URLSession.shared.data(from: url)\n \n guard let httpResponse = response as? HTTPURLResponse,\n (200...299).contains(httpResponse.statusCode) else {\n throw URLError(.badServerResponse)\n }\n \n return try JSONDecoder().decode([User].self, from: data)\n}\n\nसुंदरता, है ना? कोई closures नहीं, कोई resume() नहीं। कोड सिंक्रोनस जैसा पढ़ा जाता है, लेकिन एसिंक्रोनस रूप से निष्पादित होता है। 2025 में यह डी-फैक्टो मानक है।
2. POST अनुरोध: सर्वर पर डेटा भेजना
\n\nअब डेटा भेजते हैं। मान लीजिए, हमें एक नया उपयोगकर्ता बनाना है।
\n\n2.1. JSON बॉडी के साथ POST
\n\nfunc createUser(name: String, email: String) async throws -> User {\n let url = URL(string: "https://api.pythonlib.ru/users")!\n var request = URLRequest(url: url)\n request.httpMethod = "POST"\n request.setValue("application/json", forHTTPHeaderField: "Content-Type")\n \n let body = ["name": name, "email": email]\n request.httpBody = try JSONSerialization.data(withJSONObject: body)\n \n let (data, response) = try await URLSession.shared.data(for: request)\n // उत्तर प्रसंस्करण...\n return try JSONDecoder().decode(User.self, from: data)\n}
ब्लॉग
पुस्तक अनुशंसाएँ
यह भी पढ़ें