Swift पर API: सिद्धांत से वास्तविक अनुरोधों तक
\n\nप्रत्येक iOS डेवलपर को देर-सबेर एप्लिकेशन को सर्वर से जोड़ने की आवश्यकता का सामना करना पड़ता है। चाहे वह समाचार फ़ीड लोड करना हो, फ़ॉर्म डेटा भेजना हो या रीयल-टाइम स्ट्रीमिंग हो — API (Application Programming Interface) के बिना काम नहीं चलता। लेकिन कौन सा प्रोटोकॉल चुनें? क्लासिक REST, लचीला GraphQL या अति-तेज़ gRPC?
\n\nइस लेख में हम केवल फायदे और नुकसान सूचीबद्ध नहीं करेंगे। हम वास्तविक उदाहरणों के साथ Swift पर API कार्य को समझेंगे, कोड दिखाएंगे और व्यावहारिक सुझाव देंगे। आप सीखेंगे कि नेटवर्क लेयर को सही तरीके से कैसे संरचित करें, किन लाइब्रेरीज़ का उपयोग करें और प्रत्येक दृष्टिकोण कब सबसे अच्छा विकल्प बनता है।
\n\nयदि आप Swift में लिखते हैं और चाहते हैं कि आपका एप्लिकेशन बैकएंड से तेज़, विश्वसनीय और सुंदर तरीके से संवाद करे — यह लेख आपके लिए है। चलिए शुरू करते हैं!
\n\nSwift पर REST API: क्लासिक जो कभी पुराना नहीं होता
\n\nREST (Representational State Transfer) एक आर्किटेक्चरल शैली है जो संसाधनों के साथ काम करने के लिए HTTP विधियों (GET, POST, PUT, DELETE) का उपयोग करती है। अधिकांश सार्वजनिक API (GitHub, Twitter, Stripe) REST पर ही बने हैं। Swift डेवलपर के लिए इसका मतलब है कि आप JSON, URLSession या Alamofire के साथ काम करेंगे।
\n\nURLSession के साथ बुनियादी GET अनुरोध
\n\nसबसे सरल से शुरू करते हैं — डेटा प्राप्त करना। मान लीजिए हमें JSONPlaceholder से उपयोगकर्ताओं की सूची लोड करनी है:
\n\nimport Foundation\n\nstruct User: Codable {\n let id: Int\n let name: String\n let email: String\n}\n\nfunc fetchUsers() async throws -> [User] {\n let url = URL(string: "https://jsonplaceholder.typicode.com/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\nTask {\n do {\n let users = try await fetchUsers()\n print("लोड किए गए \\(users.count) उपयोगकर्ता")\n } catch {\n print("त्रुटि: \\(error.localizedDescription)")\n }\n}\n\nasync/await के उपयोग पर ध्यान दें — यह Swift में एसिंक्रोनस कोड के साथ काम करने का आधुनिक तरीका है। कोड पठनीय और छोटा हो गया है, बिना क्लोज़र और कॉलबैक के।
Alamofire के साथ POST अनुरोध
\n\nAlamofire Swift पर नेटवर्किंग के लिए सबसे लोकप्रिय लाइब्रेरी है। यह त्रुटि प्रबंधन, पैरामीटर एन्कोडिंग और फ़ाइल अपलोड को सरल बनाती है। डेटा भेजने का उदाहरण:
\n\nimport Alamofire\n\nstruct NewUser: Encodable {\n let name: String\n let email: String\n}\n\nAF.request("https://jsonplaceholder.typicode.com/users",\n method: .post,\n parameters: NewUser(name: "इवान", email: "ivan@example.com"),\n encoder: JSONParameterEncoder.default)\n .validate()\n .responseDecodable(of: User.self) { response in\n switch response.result {\n case .success(let user):\n print("id के साथ उपयोगकर्ता बनाया गया: \\(user.id)")\n case .failure(let error):\n print("त्रुटि: \\(error.localizedDescription)")\n }\n }\n\nसुझाव: .validate() का उपयोग करें — यह स्वचालित रूप से स्टेटस-कोड की जाँच करेगा और HTTP त्रुटियों को Alamofire त्रुटियों में बदल देगा। आपका कोड साफ़ होगा और डिबगिंग आसान होगी।
REST कब सबसे अच्छा विकल्प है?
\n- \n
- आपके पास सरल CRUD एप्लिकेशन है (नोट्स, कार्य सूची)। \n
- API निश्चित एंडपॉइंट प्रदान करता है। \n
- आपको जटिल डेटा नेस्टिंग की आवश्यकता नहीं है। \n
Swift पर GraphQL: अनुरोधों का लचीलापन
\n\nGraphQL एक क्वेरी भाषा है जो क्लाइंट को ठीक उतना डेटा अनुरोध करने की अनुमति देती है जितनी आवश्यकता है। न तो over-fetching (अतिरिक्त फ़ील्ड) और न ही under-fetching (कई अनुरोधों की आवश्यकता)। Swift के लिए एक उत्कृष्ट लाइब्रेरी है Apollo iOS