Retrofit: यह क्या है, Android HTTP क्लाइंट की विशेषताएं

लेखक: IT Sectr प्रकाशित: 2026-03-07 पढ़ने का समय: 8 मिनट

Retrofit Android और Kotlin के लिए Square कंपनी द्वारा विकसित एक टाइप किया गया HTTP क्लाइंट है। यह लाइब्रेरी एनोटेशन की मदद से REST API को Java या Kotlin इंटरफ़ेस में बदलने की अनुमति देती है। Square, 2025 के अनुसार, Retrofit का उपयोग हजारों ऐप्स में HTTP अनुरोधों के साथ काम करने के मानक उपकरण के रूप में किया जाता है।

मुख्य बिंदु

  • Retrofit घोषणात्मक API के साथ Android और Kotlin के लिए Square का टाइप किया गया HTTP क्लाइंट है
  • एनोटेशन @GET, @POST, @Path, @Query बिना boilerplate कोड के HTTP अनुरोधों का वर्णन करते हैं
  • कन्वर्टर Gson, Moshi और Kotlinx Serialization JSON को Kotlin ऑब्जेक्ट में बदलते हैं
  • OkHttp अनिवार्य परिवहन परत है जो Retrofit के अंतर्गत सभी HTTP अनुरोधों को निष्पादित करता है
  • Suspend फ़ंक्शन एसिंक्रोनस कॉल के लिए Retrofit को Kotlin कोरूटीन के साथ एकीकृत करते हैं

Retrofit क्या है?

Retrofit Android प्लेटफ़ॉर्म पर REST API के साथ टाइप किए गए इंटरैक्शन के लिए एक लाइब्रेरी है, जिसे Square द्वारा विकसित किया गया है। यह Java इंटरफ़ेस या Kotlin इंटरफ़ेस के माध्यम से एनोटेशन के साथ HTTP अनुरोधों का वर्णन करने का एक घोषणात्मक तरीका प्रदान करती है, जो मैन्युअल JSON पार्सिंग और HTTP कनेक्शन प्रबंधन की आवश्यकता को पूरी तरह से समाप्त कर देती है।

यह लाइब्रेरी 2013 में AsyncTask और HttpURLConnection जैसे बोझिल समाधानों के विकल्प के रूप में उभरी। 2025 तक, Retrofit अपनी सरलता और प्रकार सुरक्षा के कारण Android ऐप्स में नेटवर्क संचार के लिए वास्तविक मानक बना हुआ है। JetBrains Developer Ecosystem 2024 सर्वेक्षण के अनुसार, 65% से अधिक Android डेवलपर वाणिज्यिक परियोजनाओं में Retrofit का उपयोग करते हैं।

Retrofit का विकल्पों से मुख्य अंतर घोषणात्मक दृष्टिकोण है: डेवलपर वर्णन करता है कि क्या करना है (कौन सा एंडपॉइंट कॉल करना है, कौन से पैरामीटर पास करने हैं) न कि यह कैसे करना है (कनेक्शन कैसे खोलें, InputStream कैसे पढ़ें, JSON कैसे पार्स करें)। यह HttpURLConnection के मैन्युअल उपयोग की तुलना में boilerplate कोड को 60–70% तक कम करता है।

Retrofit कैसे काम करता है

कार्य सिद्धांत Retrofit Java डायनामिक प्रॉक्सी पर आधारित है। जब डेवलपर एनोटेड इंटरफ़ेस की किसी विधि को कॉल करता है, तो Retrofit Proxy.newProxyInstance तंत्र के माध्यम से कॉल को इंटरसेप्ट करता है और इसे HTTP अनुरोध में बदल देता है। पूरी प्रक्रिया संकलन समय पर कोड जनरेशन के बिना रनटाइम पर होती है।

Retrofit.Builder इंस्टेंस बनाते समय, बेस URL और कन्वर्टर फ़ैक्टरी निर्दिष्ट की जाती है। Builder OkHttpClient को कॉन्फ़िगर करता है — टाइमआउट, इंटरसेप्टर, कनेक्शन पूल और कैश सेट करता है। create(Class) विधि इंटरफ़ेस का कार्यान्वयन उत्पन्न करती है, एक प्रॉक्सी ऑब्जेक्ट लौटाती है जिसे सामान्य क्लास की तरह कॉल किया जा सकता है।

अनुरोध निष्पादन श्रृंखला इस प्रकार दिखती है: एनोटेशन HTTP विधि निकालते हैं, पैरामीटर URL या अनुरोध निकाय में डाले जाते हैं, कन्वर्टर निकाय को सीरियलाइज़ करता है, OkHttp अनुरोध निष्पादित करता है, कन्वर्टर प्रतिक्रिया को डीसीरियलाइज़ करता है, और परिणाम निर्दिष्ट प्रकार में लौटाया जाता है। प्रत्येक चरण पृथक है और इसे कस्टम कार्यान्वयन से बदला जा सकता है, उदाहरण के लिए परीक्षण के लिए OkHttpClient को MockWebServer से बदलना या API बदलने पर कन्वर्टर बदलना।

एक महत्वपूर्ण विशेषता — Retrofit सीधे स्ट्रीमिंग डेटा ट्रांसमिशन का समर्थन नहीं करता है। स्ट्रीमिंग के लिए, OkHttp ResponseBody का उपयोग इंटरफ़ेस विधि के रिटर्न प्रकार के रूप में किया जाता है। Retrofit स्वचालित रूप से अनुरोध रद्दीकरण का प्रबंधन भी नहीं करता है — रद्द करने के लिए Call का संदर्भ रखना और cancel() कॉल करना आवश्यक है। Kotlin में suspend फ़ंक्शन के साथ, मूल कोरूटीन रद्द होने पर अनुरोध रद्दीकरण स्वचालित रूप से होता है।

Call ऑब्जेक्ट का जीवनचक्र

Call<T> एक ऑब्जेक्ट है जो एक HTTP अनुरोध का प्रतिनिधित्व करता है। निष्पादन (execute या enqueue) के बाद, Call का पुन: उपयोग नहीं किया जा सकता — दोहराए गए अनुरोध के लिए इंटरफ़ेस विधि को कॉल करके एक नया Call बनाना होगा। यह गलती से एक ही अनुरोध को दो बार भेजने से रोकता है, जिससे सर्वर पर डुप्लिकेट संचालन हो सकता है।

Kotlin में, Call के बजाय suspend फ़ंक्शन का उपयोग किया जाता है, जो स्वचालित रूप से अनुरोध जीवनचक्र का प्रबंधन करते हैं। Retrofit निष्पादन को Dispatchers.IO पर स्विच करता है और परिणाम को कोरूटीन में लौटाता है। यह Call और Callback संस्करण की तुलना में कोड को 30–40% तक कम करता है।

HTTP विधियों के लिए Retrofit एनोटेशन

एनोटेशन Retrofit में HTTP अनुरोधों को कॉन्फ़िगर करने का मुख्य तंत्र हैं। प्रत्येक एनोटेशन एक मानक HTTP विधि से मेल खाता है और एंडपॉइंट तक सापेक्ष पथ स्वीकार करता है। Retrofit GET, POST, PUT, DELETE, PATCH, HEAD और OPTIONS का समर्थन करता है।

एनोटेशनHTTP विधिउद्देश्य
@GETGETसर्वर से डेटा प्राप्त करना
@POSTPOSTनया संसाधन बनाना
@PUTPUTसंसाधन को पूरी तरह अपडेट करना
@DELETEDELETEसंसाधन हटाना
@PATCHPATCHसंसाधन को आंशिक रूप से अपडेट करना

अनुरोध पैरामीटर एनोटेशन

@Path URL खंड में मान डालता है: @Path("id") Int id पथ में {id} को बदलता है। @Query क्वेरी पैरामीटर जोड़ता है: @Query("page") Int page ?page=5 में बदल जाता है। @Body चयनित कन्वर्टर के माध्यम से स्वचालित सीरियलाइज़ेशन के साथ अनुरोध निकाय में ऑब्जेक्ट पास करता है। @Header और @Headers HTTP हेडर प्रबंधित करते हैं — स्थिर या गतिशील।

इन एनोटेशन को संयोजित करके, किसी भी REST एंडपॉइंट का वर्णन किया जा सकता है। उदाहरण के लिए, एंडपॉइंट POST /api/users/{id}/posts?limit=10 के लिए @POST, id के लिए @Path, limit के लिए @Query और पास किए गए ऑब्जेक्ट के लिए @Body की आवश्यकता होती है। Retrofit स्वचालित रूप से सही HTTP अनुरोध बनाएगा। अतिरिक्त रूप से @Url (गतिशील URL), @Field (फ़ॉर्म-एनकोडेड निकाय), @Part और @PartMap फ़ाइलों के साथ मल्टीपार्ट अनुरोधों के लिए समर्थित हैं।

Kotlin में Retrofit कोड उदाहरण

आइए एक व्यावहारिक उदाहरण देखें — GitHub API के लिए एक इंटरफ़ेस। रिपॉजिटरी की सूची प्राप्त करने की विधि के साथ एक Kotlin इंटरफ़ेस बनाया जाता है। Repo डेटा क्लास JSON प्रतिक्रिया संरचना का वर्णन करता है।

kotlin
data class Repo(
    val name: String,
    val description: String?,
    val stargazersCount: Int,
    val forksCount: Int
)

interface GitHubApi {
    @GET("users/{user}/repos")
    suspend fun getRepos(
        @Path("user") user: String,
        @Query("sort") sort: String = "updated"
    ): List<Repo>
}

इंटरफ़ेस का वर्णन करने के बाद, Builder के माध्यम से एक Retrofit इंस्टेंस बनाया जाता है। बेस URL, कन्वर्टर और OkHttpClient एक बार कॉन्फ़िगर किए जाते हैं और डिपेंडेंसी इंजेक्शन के माध्यम से पुन: उपयोग किए जाते हैं।

kotlin
val retrofit = Retrofit.Builder()
    .baseUrl("https://api.github.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .client(OkHttpClient.Builder()
        .connectTimeout(30, TimeUnit.SECONDS)
        .build())
    .build()

val api = retrofit.create(GitHubApi::class.java)

Response रैपर के साथ प्रतिक्रिया हैंडलिंग

HTTP स्थिति कोड के लचीले हैंडलिंग के लिए, Response<T> रैपर का उपयोग करें। यह 4xx और 5xx त्रुटियों पर अपवाद फेंके बिना प्रतिक्रिया कोड, हेडर और निकाय तक पहुंच प्रदान करता है। यह try-catch के बिना 404 और 500 को संभालने की अनुमति देता है।

kotlin
interface GitHubApi {
    @GET("users/{user}/repos")
    suspend fun getRepos(
        @Path("user") user: String
    ): Response<List<Repo>>
}

val response = api.getRepos("octocat")
if (response.isSuccessful) {
    println(response.body()?.size)
} else {
    Log.e("API", "Error: ${response.code()}")
}

Retrofit में कन्वर्टर और सीरियलाइज़ेशन

कन्वर्टर Retrofit के घटक हैं जो ऑब्जेक्ट को HTTP निकाय में बदलने और वापस बदलने के लिए जिम्मेदार हैं। Retrofit सीरियलाइज़ेशन को अपने कोर में एम्बेड नहीं करता है — इसके बजाय यह Converter.Factory के माध्यम से मॉड्यूलर दृष्टिकोण का उपयोग करता है, जो किसी भी सीरियलाइज़ेशन लाइब्रेरी को प्लग इन करने की अनुमति देता है।

सबसे लोकप्रिय कन्वर्टर Gson लाइब्रेरी पर आधारित Google का GsonConverterFactory है। यह अधिकांश परियोजनाओं के लिए काम करता है, कस्टम TypeAdapter और JsonDeserializer का समर्थन करता है। हालांकि, Gson रिफ्लेक्शन का उपयोग करता है और Kotlin की null सुरक्षा का सम्मान नहीं करता है, जो अप्रत्याशित null फ़ील्ड पर NPE का कारण बन सकता है।

एक विकल्प Square का MoshiConverterFactory है: प्रकारों के साथ अधिक सख्त, बेहतर Kotlin समर्थन (null सुरक्षा, डिफ़ॉल्ट मान) और बिना रिफ्लेक्शन के। शुद्ध Kotlin परियोजनाओं के लिए, Kotlinx Serialization Converter इष्टतम है, जो संकलन समय पर @Serializable एनोटेशन के साथ काम करता है। यह रिफ्लेक्शन का उपयोग नहीं करता है, sealed class, डिफ़ॉल्ट मान और मल्टीप्लेटफ़ॉर्म का समर्थन करता है।

कन्वर्टर का चुनाव प्रदर्शन और प्रकार सुरक्षा को प्रभावित करता है। Gson बिना कस्टम कॉन्फ़िगरेशन के Kotlin के non-null फ़ील्ड में null को डीसीरियलाइज़ कर सकता है, जिससे एक्सेस करने पर NPE होता है। Moshi @Json(name) एनोटेशन और failOnUnknown के माध्यम से इस समस्या को हल करता है। Kotlinx Serialization सबसे सुरक्षित है — यह संकलन समय पर कोड उत्पन्न करता है, रनटाइम प्रकार त्रुटियों को पूरी तरह से समाप्त करता है।

Retrofit के साथ काम करते समय सामान्य गलतियाँ

suspend फ़ंक्शन में HTTP त्रुटि हैंडलिंग की कमी सबसे आम समस्या है। यदि सर्वर 4xx या 5xx लौटाता है, तो Retrofit HttpException फेंकता है। try-catch के बिना, ऐप क्रैश हो जाता है। रिटर्न प्रकार के रूप में Response<T> का उपयोग करने से यह समस्या हल होती है, जो body तक पहुंचने से पहले isSuccessful की जांच करने की अनुमति देता है।

गलत कैशिंग कॉन्फ़िगरेशन अत्यधिक ट्रैफ़िक की ओर ले जाता है। Retrofit स्वयं प्रतिक्रियाओं को कैश नहीं करता है — यह कार्य OkHttpClient Cache के माध्यम से करता है। कैश के बिना, प्रत्येक अनुरोध पूरी तरह से निष्पादित होता है, भले ही डेटा नहीं बदला हो। OkHttpClient में 10 MB कैश जोड़ने से समान जानकारी के बार-बार अनुरोधों पर ट्रैफ़िक 40–60% कम हो जाता है।

प्रत्येक अनुरोध के लिए Retrofit बनाना शुरुआती लोगों की एक सामान्य गलती है। Retrofit.Builder एक संसाधन-गहन ऑपरेशन है जिसमें रनटाइम पर प्रॉक्सी क्लास जनरेशन शामिल है। सही अभ्यास एक Retrofit इंस्टेंस बनाना और DI फ्रेमवर्क के माध्यम से इसका पुन: उपयोग करना है। Hilt, Koin या Dagger पूरे ऐप के लिए एक सिंगलटन Retrofit इंस्टेंस प्रदान करते हैं, जो मेमोरी बचाता है और अनुरोधों को गति देता है।

प्राधिकरण के लिए Interceptor को अनदेखा करना चौथी समस्या है। प्रत्येक कॉल में मैन्युअल रूप से Authorization हेडर जोड़ने के बजाय, OkHttpClient में एक वैश्विक Interceptor कॉन्फ़िगर करें। Interceptor प्रत्येक अनुरोध को इंटरसेप्ट करता है, Bearer टोकन जोड़ता है, और Authenticator 401 प्रतिक्रिया को संभालता है, टोकन को रीफ्रेश करता है और स्वचालित रूप से अनुरोध दोहराता है। यह प्रमाणीकरण तर्क को केंद्रीकृत करता है।

अक्सर पूछे जाने वाले प्रश्न

Retrofit OkHttp से कैसे अलग है?

Retrofit OkHttp के ऊपर एक आवरण है जो एनोटेशन के माध्यम से घोषणात्मक API प्रदान करता है। OkHttp एक निम्न-स्तरीय HTTP क्लाइंट है जो सीधे Request और Response के साथ काम करता है। Retrofit OkHttp को परिवहन के रूप में उपयोग करके टाइपिंग, सीरियलाइज़ेशन और प्रतिक्रिया हैंडलिंग को सरल बनाता है।

Retrofit के लिए कौन सा कन्वर्टर चुनें?

Java प्रोजेक्ट के लिए — GsonConverterFactory। Kotlin के साथ Moshi के लिए — MoshiConverterFactory (प्रकारों के साथ अधिक सुरक्षित)। शुद्ध Kotlin के लिए इष्टतम विकल्प Kotlinx Serialization Converter है। यह बिना रिफ्लेक्शन के काम करता है, sealed class और डिफ़ॉल्ट मान का समर्थन करता है।

क्या Retrofit कोरूटीन का समर्थन करता है?

हाँ, संस्करण 2.6.0 से Retrofit suspend फ़ंक्शन का समर्थन करता है। विधि को suspend के रूप में घोषित करें, और Retrofit Dispatchers.IO पर अनुरोध निष्पादित करेगा, परिणाम को कोरूटीन में लौटाएगा। Call और enqueue का उपयोग करने की आवश्यकता नहीं है — कोड अनुक्रमिक हो जाता है।

Retrofit में प्राधिकरण कैसे सेट करें?

प्राधिकरण OkHttp Interceptor के माध्यम से जोड़ा जाता है। intercept() में Authorization हेडर जोड़ें। गतिशील टोकन के लिए OkHttp के Authenticator का उपयोग करें — यह 401 प्रतिक्रिया को इंटरसेप्ट करता है और स्वचालित रूप से टोकन को रीफ्रेश करता है, नए हेडर के साथ अनुरोध दोहराता है।

क्या Retrofit का उपयोग OkHttp के बिना किया जा सकता है?

नहीं — Retrofit हमेशा OkHttp को परिवहन परत के रूप में उपयोग करता है। OkHttpClient Builder.client() के माध्यम से पास किया जाता है और टाइमआउट, इंटरसेप्टर, कैशिंग और कनेक्शन पूल का प्रबंधन करता है। OkHttp के बिना, Retrofit एक भी अनुरोध निष्पादित नहीं कर सकता।

सारांश

  • Retrofit घोषणात्मक एनोटेशन-आधारित API के साथ Android और Kotlin के लिए Square का टाइप किया गया HTTP क्लाइंट है
  • एनोटेशन @GET, @POST, @Path, @Query और @Body बिना boilerplate कोड के REST अनुरोधों का वर्णन करते हैं
  • Java डायनामिक प्रॉक्सी रनटाइम पर इंटरफ़ेस विधि कॉल को HTTP अनुरोधों में बदलते हैं
  • कन्वर्टर Gson, Moshi और Kotlinx Serialization JSON सीरियलाइज़ेशन को ऑब्जेक्ट में प्रदान करते हैं
  • OkHttp इंटरसेप्टर, कैशिंग और कनेक्शन पूल के साथ अनिवार्य परिवहन परत है
  • Suspend फ़ंक्शन एसिंक्रोनस HTTP कॉल को Kotlin कोरूटीन के साथ एकीकृत करते हैं
  • Response रैपर बिना अनहैंडल्ड अपवादों के 4xx और 5xx HTTP त्रुटियों को संभालता है

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें