OkHttp क्या है और इसकी ज़रूरत क्यों है?
OkHttp एक शक्तिशाली और कुशल HTTP लाइब्रेरी है जो JVM (Java Virtual Machine), Android और Kotlin/Native के लिए Square कंपनी द्वारा बनाई गई है। यह HTTP अनुरोध (requests) भेजने और प्रतिक्रिया (responses) प्राप्त करने के लिए एक आसान API प्रदान करता है। OkHttp Android इकोसिस्टम में नेटवर्किंग के लिए डी-फैक्टो स्टैंडर्ड है और सर्वर-साइड Kotlin ऐप्लिकेशन में भी व्यापक रूप से उपयोग किया जाता है।
Java के मानक साधनों (HttpURLConnection) के बजाय OkHttp का उपयोग क्यों करें?
- सरल और सुविधाजनक: साफ और फ्लूएंट API जिसे पढ़ना और लिखना आसान है।
- प्रदर्शन: HTTP/2 के लिए बिल्ट-इन सपोर्ट, ऑटोमैटिक रिस्पॉन्स कम्प्रेशन (gzip), कनेक्शन पूलिंग और कैशिंग।
- विश्वसनीयता: नेटवर्क विफलता पर ऑटोमैटिक रीट्राई, DNS और TLS त्रुटियों के प्रति मजबूती।
- लचीलापन: लॉगिंग, ऑथेंटिकेशन, अनुरोध और प्रतिक्रिया में बदलाव के लिए आसानी से कॉन्फ़िगर करने योग्य इंटरसेप्टर।
- परीक्षण क्षमता: MockWebServer का उपयोग करके नेटवर्क लेयर को बदलने की सुविधा।
OkHttp Android ऐप्लिकेशन, REST API क्लाइंट, माइक्रोसर्विसेज़ और किसी भी अन्य Kotlin प्रोजेक्ट के लिए आदर्श है जहाँ तेज़ और विश्वसनीय HTTP कनेक्टिविटी की आवश्यकता होती है।
इंस्टॉलेशन (Installation)
OkHttp Maven Central के माध्यम से वितरित किया जाता है। इसे अपने प्रोजेक्ट में जोड़ने के लिए Gradle बिल्ड सिस्टम (Kotlin के लिए सबसे आम) का उपयोग करें।
Android / Kotlin/JVM प्रोजेक्ट के लिए (build.gradle.kts):
dependencies {
implementation("com.squareup.okhttp3:okhttp:4.12.0")
// लॉगिंग के लिए (वैकल्पिक)
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
}
Android / Kotlin/JVM प्रोजेक्ट के लिए (build.gradle):
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0'
}
Maven के लिए (pom.xml):
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
महत्वपूर्ण: सुनिश्चित करें कि OkHttp का वर्शन आपके Kotlin वर्शन के साथ संगत है। नवीनतम वर्शन हमेशा MVNRepository पर पाया जा सकता है।
त्वरित शुरुआत (Quick Start)
सबसे सरल उदाहरण — GET अनुरोध करना और प्रतिक्रिया के बॉडी को स्ट्रिंग के रूप में प्राप्त करना।
import okhttp3.OkHttpClient
import okhttp3.Request
import java.io.IOException
fun main() {
// 1. क्लाइंट बनाएँ (आमतौर पर पूरे ऐप के लिए एक)
val client = OkHttpClient()
// 2. अनुरोध बनाएँ
val request = Request.Builder()
.url("https://api.github.com/users/octocat")
.build()
// 3. अनुरोध को सिंक्रोनस रूप से निष्पादित करें (मौजूदा थ्रेड को ब्लॉक करता है)
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) {
throw IOException("Unexpected code $response")
}
// 4. प्रतिक्रिया का बॉडी प्राप्त करें
println(response.body?.string())
}
}
व्याख्या:
OkHttpClient()— क्लाइंट का एक इंस्टेंस बनाता है। यह थ्रेड-सेफ है, इसलिए एक इंस्टेंस बनाकर उसका पुन: उपयोग करने की सलाह दी जाती है।Request.Builder()— अनुरोध को कॉन्फ़िगर करने के लिए बिल्डर पैटर्न का उपयोग करता है।client.newCall(request)— एक नया कॉल (Call) बनाता है, जिसे सिंक्रोनस (execute()) या एसिंक्रोनस (enqueue()) रूप से निष्पादित किया जा सकता है।response.use { ... }— सुनिश्चित करता है कि प्रतिक्रिया के संसाधन (बॉडी, कनेक्शन) उपयोग के बाद बंद हो जाएँ।response.body?.string()— प्रतिक्रिया के बॉडी को स्ट्रिंग के रूप में पढ़ता है। महत्वपूर्ण: बॉडी को केवल एक बार पढ़ा जा सकता है।