Kotlin में HTTP क्लाइंट: सही तरीके से अनुरोध करना
Android और Kotlin पर बैकएंड सेवाओं का आधुनिक विकास शायद ही कभी रिमोट API के साथ इंटरैक्शन के बिना होता है। एक विश्वसनीय HTTP क्लाइंट बनाना एक बुनियादी कार्य है, जिसके सही समाधान पर पूरे एप्लिकेशन की स्थिरता निर्भर करती है। इस लेख में, हम दो सबसे लोकप्रिय लाइब्रेरीज़: Ktor Client और OkHttp का उपयोग करके Kotlin में HTTP अनुरोध करने का तरीका समझेंगे। आप सीखेंगे कि GET और POST अनुरोध कैसे भेजें, JSON को कैसे प्रोसेस करें, त्रुटियों को कैसे प्रबंधित करें और स्वच्छ, रखरखाव योग्य कोड कैसे लिखें।
Ktor Client क्यों आधुनिक Kotlin डेवलपर की पसंद है
Ktor Client एक एसिंक्रोनस HTTP क्लाइंट है, जिसे JetBrains टीम द्वारा विशेष रूप से Kotlin के लिए बनाया गया है। यह कोरूटीन (coroutines) को पूरी तरह से सपोर्ट करता है, जो कोड को संक्षिप्त और सुरक्षित बनाता है। OkHttp के विपरीत, Ktor को शुरू से ही मल्टीप्लेटफ़ॉर्म को ध्यान में रखकर डिज़ाइन किया गया है: एक ही कोड Android, iOS, JVM, JS और Native पर काम करता है।
डिपेंडेंसीज़ इंस्टॉल करना
Ktor Client के साथ काम करने के लिए, build.gradle.kts फ़ाइल में निम्नलिखित डिपेंडेंसीज़ जोड़ें:
dependencies { // बेसिक क्लाइंट implementation("io.ktor:ktor-client-core:2.3.7") // JVM के लिए इंजन (OkHttp या CIO) implementation("io.ktor:ktor-client-okhttp:2.3.7") // JSON सीरियलाइज़ेशन के लिए implementation("io.ktor:ktor-client-content-negotiation:2.3.7") implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7") // Kotlinx Serialization implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}सरल GET अनुरोध
एक HTTP क्लाइंट बनाएं और टेस्ट API (JSONPlaceholder) पर GET अनुरोध करें:
import io.ktor.client.*import io.ktor.client.request.*import io.ktor.client.statement.*import kotlinx.coroutines.runBlocking
suspend fun fetchUser(userId: Int): String { val client = HttpClient { // बेसिक कॉन्फ़िगरेशन engine { // OkHttp इंजन की सेटिंग्स } } val response: HttpResponse = client.get("https://jsonplaceholder.typicode.com/users/$userId") return response.bodyAsText()}
fun main() = runBlocking { val userData = fetchUser(1) println(userData)}ध्यान दें: fetchUser एक suspend फ़ंक्शन है। यह इसे थ्रेड को ब्लॉक किए बिना कोरूटीन से कॉल करने की अनुमति देता है।
JSON बॉडी के साथ POST अनुरोध
JSON प्रारूप में डेटा भेजने के लिए, ContentNegotiation प्लगइन कनेक्ट करें और एक data-क्लास परिभाषित करें:
import io.ktor.client.*import io.ktor.client.call.*import io.ktor.client.plugins.contentnegotiation.*import io.ktor.client.request.*import io.ktor.http.*import io.ktor.serialization.kotlinx.json.*import kotlinx.serialization.Serializableimport kotlinx.serialization.json.Json
@Serializabledata class Post(val userId: Int, val id: Int? = null, val title: String, val body: String)
suspend fun createPost(post: Post): Post { val client = HttpClient { install(ContentNegotiation) { json(Json { ignoreUnknownKeys = true prettyPrint = true }) } } val response: Post = client.post("https://jsonplaceholder.typicode.com/posts") { contentType(ContentType.Application.Json) setBody(post) }.body() client.close() return response}
fun main() = runBlocking { val newPost = Post(userId = 1, title = "Ktor Client", body = "बहुत अच्छा काम करता है!") val createdPost = createPost(newPost) println(createdPost)}मुख्य बिंदु: ContentNegotiation प्लगइन स्वचालित रूप से ऑब्जेक्ट को JSON में सीरियलाइज़ करता है और प्रतिक्रिया को वापस data-क्लास में डीसीरियलाइज़ करता है।
OkHttp — Android के लिए सिद्ध मानक
OkHttp Android डेवलपमेंट में नेटवर्क अनुरोधों के लिए डी-फैक्टो मानक बना हुआ है। यह तेज़, विश्वसनीय है और प्