Kotlin में HTTP क्लाइंट: A से Z तक सही तरीके से अनुरोध करना
\nKotlin में आधुनिक डेवलपमेंट दूरस्थ सर्वरों के साथ इंटरैक्शन के बिना अधूरी है। चाहे वह Android पर मोबाइल ऐप हो या Ktor पर सर्वर-साइड समाधान — HTTP अनुरोध डेटा आदान-प्रदान की नींव हैं। इस लेख में, हम सीखेंगे कि Kotlin में HTTP क्लाइंट कैसे बनाएं, सर्वोत्तम प्रथाओं, लोकप्रिय लाइब्रेरीज़ और coroutines के साथ आधुनिक दृष्टिकोण का उपयोग करते हुए। आप जानेंगे कि GET और POST अनुरोध कैसे करें, त्रुटियों को कैसे संभालें, JSON के साथ कैसे काम करें और एक मजबूत नेटवर्क लेयर आर्किटेक्चर कैसे बनाएं।
\n\nKotlin HTTP क्लाइंट के लिए आदर्श क्यों है?
\nKotlin संक्षिप्त सिंटैक्स, null safety और Java इकोसिस्टम के साथ पूर्ण संगतता प्रदान करता है। coroutines के लिए धन्यवाद, एसिंक्रोनस अनुरोध सहज और समझने योग्य हो जाते हैं, बिना जटिल कॉलबैक के। आप अनुक्रमिक कोड लिख सकते हैं जो एसिंक्रोनस रूप से निष्पादित होता है — इससे पढ़ना और डीबग करना काफी आसान हो जाता है। इसके अलावा, Kotlin का Android डेवलपमेंट में व्यापक रूप से उपयोग किया जाता है, जहाँ नेटवर्क अनुरोध एक दैनिक कार्य है।
\n\nKotlin में HTTP के लिए मुख्य लाइब्रेरीज़
\nआजकल तीन दृष्टिकोण सबसे लोकप्रिय हैं:
\n- \n
- Ktor Client — JetBrains द्वारा मल्टीप्लेटफ़ॉर्म क्लाइंट। JVM, Android, iOS, JS और Native को सपोर्ट करता है। उन प्रोजेक्ट्स के लिए आदर्श जहाँ एक समान कोडबेस की आवश्यकता होती है। \n
- OkHttp + Retrofit — Android/JVM के लिए क्लासिक स्टैक। OkHttp निम्न-स्तरीय नेटवर्किंग के लिए जिम्मेदार है, जबकि Retrofit टाइप किए गए इंटरफ़ेस जनरेट करता है। \n
- Fuel — कार्यात्मक दृष्टिकोण वाली हल्की लाइब्रेरी। छोटे प्रोजेक्ट्स के लिए उपयुक्त। \n
इस लेख में, हम Ktor और OkHttp पर ध्यान केंद्रित करेंगे, क्योंकि वे 90% परिदृश्यों को कवर करते हैं।
\n\nप्रोजेक्ट सेटअप और पहले अनुरोध
\nशुरू करने के लिए, निर्भरताएँ जोड़ें। यदि आप Gradle (Kotlin DSL) का उपयोग कर रहे हैं, तो Ktor Client कनेक्ट करें:
\ndependencies {\n implementation("io.ktor:ktor-client-core:2.3.7")\n implementation("io.ktor:ktor-client-cio:2.3.7") // CIO इंजन\n implementation("io.ktor:ktor-client-content-negotiation:2.3.7")\n implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")\n}\nOkHttp के लिए निर्भरताएँ इस प्रकार होंगी:
\ndependencies {\n implementation("com.squareup.okhttp3:okhttp:4.12.0")\n implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")\n implementation("com.google.code.gson:gson:2.10.1")\n}\n\nKtor Client के साथ GET अनुरोध
\nएक सरल क्लाइंट बनाएँ और सार्वजनिक API पर GET अनुरोध करें:
\nimport io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\n\nsuspend fun fetchData(): String {\n val client = HttpClient()\n val response: HttpResponse = client.get("https://jsonplaceholder.typicode.com/posts/1")\n val body = response.bodyAsText()\n client.close()\n return body\n}\n\n// coroutine में उपयोग\nfun main() = runBlocking {\n println(fetchData())\n}\nध्यान दें: suspend — Kotlin में रोकी जा सकने वाली फ़ंक्शन के लिए कीवर्ड है। यह थ्रेड को ब्लॉक किए बिना अनुरोध निष्पादित करने की अनुमति देता है।
OkHttp के साथ GET अनुरोध
\nOkHttp पर समान उदाहरण इस प्रकार दिखता है:
\nimport okhttp3.OkHttpClient\nimport okhttp3.Request\n\nfun fetchDataSync(): String {\n val client = OkHttpClient()\n val request = Request.Builder()\n .url("https://jsonplaceholder.typicode.com/posts/1")\n .build()\n client.newCall(request).execute().use { response ->\n return response.body?.string() ?: "त्रुटि"\n }\n}\n\n// सामान्य थ्रेड में कॉल (ब्लॉकिंग)\nfun main() {\n println(fetchDataSync())\n}\nOkHttp डिफ़ॉल्ट रूप से सिंक्रोनस है, लेकिन इसे suspendCancellableCoroutine का उपयोग करके आसानी से coroutines के अनुकूल बनाया जा सकता है।
POST अनुरोध और JSON के साथ काम करना
\nडेटा भेजना दूसरा सबसे महत्वपूर्ण ऑपरेशन है। आइए देखें कि JS