Retrofit হলো Android-এর জন্য একটি টাইপ-সেফ HTTP ক্লায়েন্ট, যা Square কোম্পানি Java ভাষায় তৈরি করেছে। লাইব্রেরিটি Java ইন্টারফেস এবং অ্যানোটেশনের মাধ্যমে REST APIs সংজ্ঞায়িত করার অনুমতি দেয়, স্বয়ংক্রিয়ভাবে HTTP প্রতিক্রিয়াগুলোকে Java অবজেক্টে রূপান্তর করে। GitHub-এ Retrofit রিপোজিটরি অনুযায়ী, প্রকল্পটি সারা বিশ্বে 42,000-এরও বেশি প্রকল্প দ্বারা ব্যবহৃত হয়। লাইব্রেরিটি Android ডেভেলপমেন্টে নেটওয়ার্ক অনুরোধের জন্য মানদণ্ড হিসেবে রয়ে গেছে।
মূল পয়েন্ট
Retrofit হলো Android অ্যাপ্লিকেশনে HTTP অনুরোধ করার জন্য একটি লাইব্রেরি, যা Square দ্বারা তৈরি। এটি Java ইন্টারফেস এবং অ্যানোটেশনের মাধ্যমে REST APIs সংজ্ঞায়িত করার একটি ঘোষণামূলক পদ্ধতি প্রদান করে, যা নেটওয়ার্ক ইন্টারঅ্যাকশন কোডকে পরিষ্কার এবং পূর্বাভাসযোগ্য করে তোলে।
Retrofit-এর মূল ধারণা হলো ডেভেলপার API-কে একটি ইন্টারফেস হিসেবে মেথড এবং অ্যানোটেশন সহ বর্ণনা করে, এবং লাইব্রেরি স্বয়ংক্রিয়ভাবে বাস্তবায়ন তৈরি করে। এই পদ্ধতি নিশ্চিত করে যে সমস্ত endpoints টাইপকৃত, এবং URL বা প্যারামিটারে ত্রুটিগুলি রানটাইমের পরিবর্তে কম্পাইল টাইমে সনাক্ত হয়।
Retrofit সমস্ত জনপ্রিয় HTTP মেথড এবং ডেটা ফর্ম্যাট সমর্থন করে। লাইব্রেরিটি Square এবং কমিউনিটি দ্বারা সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয়: নিয়মিত নতুন রিলিজ আসে, এবং বর্তমান সংস্করণ 2.11-এ Java 17 এবং Kotlin 2.0-এর জন্য সমর্থন অন্তর্ভুক্ত রয়েছে। Retrofit Android-এর জন্য সবচেয়ে জনপ্রিয় HTTP ক্লায়েন্ট হিসেবে রয়ে গেছে।
Retrofit OkHttp-এর উপরে কাজ করে — যা Square-এর একটি দক্ষ HTTP ক্লায়েন্টও। এই সংমিশ্রণ ক্যাশিং, অনুরোধ ইন্টারসেপশন এবং ট্রান্সপোর্ট প্রোটোকল স্তরে সংযোগ ব্যবস্থাপনা প্রদান করে। লাইব্রেরিটি সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস উভয় কল সমর্থন করে।
2013 সালে প্রথম রিলিজের পর থেকে, Retrofit বেশ কয়েকটি বড় আপডেটের মধ্য দিয়ে গেছে। বর্তমান সংস্করণ Retrofit 2 প্রথম সংস্করণের অভিজ্ঞতার ভিত্তিতে সম্পূর্ণরূপে পুনর্লিখিত হয়েছে এবং অ্যাসিঙ্ক্রোনিসিটির জন্য কনভার্টার এবং অ্যাডাপ্টারের আরও নমনীয় সিস্টেম প্রদান করে।
Retrofit-এর আর্কিটেকচার দায়িত্ব পৃথকীকরণের নীতি অনুসরণ করে: ইন্টারফেস শুধুমাত্র API চুক্তি সংজ্ঞায়িত করে, কনভার্টার সিরিয়ালাইজেশন পরিচালনা করে, এবং অ্যাডাপ্টার অ্যাসিঙ্ক্রোনিসিটি পরিচালনা করে। এটি বাকি কোড পরিবর্তন না করেই যেকোনো উপাদান প্রতিস্থাপনের অনুমতি দেয়। উদাহরণস্বরূপ, আপনি endpoint সংজ্ঞা পরিবর্তন না করেই Gson থেকে Moshi-তে স্যুইচ করতে পারেন।
Retrofit বৈশিষ্ট্যগুলির একটি সেট প্রদান করে যা মোবাইল অ্যাপ্লিকেশনে প্রায় সমস্ত নেটওয়ার্ক ইন্টারঅ্যাকশন পরিস্থিতি কভার করে। মূল সুবিধা হলো API সংজ্ঞার ঘোষণামূলক শৈলী।
অ্যানোটেশন @GET, @POST, @PUT, @PATCH, @DELETE এবং @HTTP সরাসরি ইন্টারফেসে HTTP মেথড এবং URL টেমপ্লেট নির্দিষ্ট করার অনুমতি দেয়। পাথ প্যারামিটার @Path-এর মাধ্যমে, কোয়েরি প্যারামিটার @Query-এর মাধ্যমে এবং অনুরোধের বডি @Body-এর মাধ্যমে সেট করা হয়। এই পদ্ধতি অ্যাপ্লিকেশনের API স্তরকে সম্পূর্ণরূপে টাইপকৃত করে তোলে।
কনভার্টার HTTP প্রতিক্রিয়াগুলোকে Java অবজেক্টে এবং বিপরীতভাবে রূপান্তর করে। Retrofit Gson, Moshi, Jackson, Protobuf এবং Wire সমর্থন করে। ডেভেলপার Converter.Factory-এর মাধ্যমে প্রয়োজনীয় কনভার্টার সংযুক্ত করে, এবং লাইব্রেরি এটি স্বয়ংক্রিয়ভাবে সমস্ত অনুরোধ এবং প্রতিক্রিয়ায় প্রয়োগ করে।
অ্যাডাপ্টার CallAdapter API মেথডগুলির রিটার্ন টাইপ পরিবর্তন করার অনুমতি দেয়। স্ট্যান্ডার্ড Call-এর পরিবর্তে, RxJava-র জন্য Observable, Kotlin coroutines-এর জন্য Deferred, বা LiveData ব্যবহার করা যেতে পারে। এটি নির্বাচিত অ্যাপ্লিকেশন আর্কিটেকচারের সাথে নেটওয়ার্ক অনুরোধগুলিকে সংহত করে।
ডায়নামিক URL @Url অ্যানোটেশনের মাধ্যমে সেট করা হয়, যা রানটাইমে endpoint পাস করার অনুমতি দেয়। হেডারগুলি @Headers-এর মাধ্যমে স্থিরভাবে বা @Header প্যারামিটারের মাধ্যমে গতিশীলভাবে নির্দিষ্ট করা যেতে পারে। সমস্ত অনুরোধের জন্য গ্লোবাল হেডারের ক্ষেত্রে, একটি OkHttp ইন্টারসেপ্টর ব্যবহার করা হয় যা প্রতিটি আউটগোয়িং অনুরোধে হেডার যোগ করে।
Retrofit তিনটি ধাপে কাজ করে: API ইন্টারফেস সংজ্ঞায়িত করা, Retrofit ইনস্ট্যান্স তৈরি করা এবং অনুরোধ কার্যকর করা। লাইব্রেরি অ্যানোটেশন এবং কনভার্টারের উপর ভিত্তি করে রানটাইমে ইন্টারফেসের বাস্তবায়ন তৈরি করে।
যখন একটি API মেথড কল করা হয়, Retrofit অ্যানোটেশন এবং আর্গুমেন্টের উপর ভিত্তি করে একটি Request অবজেক্ট তৈরি করে। অনুরোধটি কার্যকর করার জন্য OkHttp-এ পাঠানো হয়। প্রতিক্রিয়া পাওয়ার পর, লাইব্রেরিটি প্রয়োজনীয় টাইপে রূপান্তরের জন্য এটি Converter.Factory-তে পাঠায়। CallAdapter ফলাফলটিকে একটি অ্যাসিঙ্ক্রোনাস র্যাপারে মোড়ানো করে। প্রতিটি ধাপ কাস্টমাইজ করা যেতে পারে।
interface ApiService {
@GET("users/{id}")
suspend fun getUser(@Path("id") id: Int): User
}
val retrofit = Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val api = retrofit.create(ApiService::class.java)
ইনস্টলেশন Retrofit-এর Gradle-এর মাধ্যমে করা হয় — Android-এর স্ট্যান্ডার্ড বিল্ড সিস্টেম। লাইব্রেরিটি Maven Central-এর মাধ্যমে বিতরণ করা হয় এবং প্রকল্পের build.gradle-এ বেশ কয়েকটি ডিপেন্ডেন্সি যোগ করার প্রয়োজন হয়।
build.gradle ফাইলে (মডিউল স্তরে), Retrofit, Gson কনভার্টার এবং OkHttp-এর জন্য ডিপেন্ডেন্সি যোগ করুন। কেন্দ্রীভূত ব্যবস্থাপনার জন্য রুট build.gradle-এ লাইব্রেরি সংস্করণগুলি ভেরিয়েবলে বের করার পরামর্শ দেওয়া হয়। Retrofit 2-এর জন্য ন্যূনতম Android API 21 প্রয়োজন।
dependencies {
implementation "com.squareup.retrofit2:retrofit:2.11.0"
implementation "com.squareup.retrofit2:converter-gson:2.11.0"
implementation "com.squareup.okhttp3:okhttp:4.12.0"
implementation "com.squareup.okhttp3:logging-interceptor:4.12.0"
}
একটি Retrofit ইনস্ট্যান্স Builder-এর মাধ্যমে তৈরি করা হয়। বাধ্যতামূলক প্যারামিটার: baseUrl এবং ConverterFactory। অপ্রয়োজনীয় সংযোগ তৈরি এড়াতে Retrofit এবং OkHttpClient-এর জন্য সিঙ্গলটন ব্যবহার করার পরামর্শ দেওয়া হয়। logging-interceptor যোগ করা ডেভেলপমেন্টের সময় নেটওয়ার্ক অনুরোধ ডিবাগিং সহজ করে।
Kotlin প্রকল্পগুলির জন্য, Call টাইপের পরিবর্তে API ইন্টারফেসে suspend ফাংশন ব্যবহার করার পরামর্শ দেওয়া হয়। এটি কোড সহজ করে এবং coroutines-এর কাঠামোগত সমবর্তিতা ব্যবহারের অনুমতি দেয়। Call থেকে suspend-এ স্যুইচ করার সময়, শুধুমাত্র ইন্টারফেসে রিটার্ন টাইপ পরিবর্তন করাই যথেষ্ট — বাকি কোড স্বয়ংক্রিয়ভাবে মানিয়ে নেয়।
নীচের উদাহরণগুলি Android অ্যাপ্লিকেশনে Retrofit-এর সাথে কাজ করার সাধারণ পরিস্থিতি দেখায়: একটি সাধারণ GET অনুরোধ থেকে সার্ভারে ফাইল আপলোড পর্যন্ত।
কোয়েরি স্ট্রিং প্যারামিটার সহ একটি সাধারণ GET অনুরোধ একটি মৌলিক অপারেশন। @Query অ্যানোটেশন স্বয়ংক্রিয়ভাবে URL-এ প্যারামিটার যোগ করে, এবং suspend ফাংশন মূল থ্রেড ব্লক না করেই coroutine থেকে অনুরোধ কল করার অনুমতি দেয়।
interface UserApi {
@GET("users")
suspend fun getUsers(
@Query("page") page: Int,
@Query("limit") limit: Int = 20
): List<User>
}
val users = api.getUsers(page = 1)
JSON বডি সহ POST অনুরোধ অবজেক্ট পাস করতে @Body অ্যানোটেশন ব্যবহার করে। GsonConverterFactory স্বয়ংক্রিয়ভাবে User অবজেক্টকে JSON-এ সিরিয়ালাইজ করে। Kotlin coroutines Callback ইন্টারফেস ছাড়াই ব্যাকগ্রাউন্ড থ্রেডে অনুরোধের এক্সিকিউশন নিশ্চিত করে।
interface UserApi {
@POST("users")
suspend fun createUser(@Body user: User): User
}
val user = User(name = "আনা ইভানোভা", email = "anna@example.com")
val created = api.createUser(user)
@Multipart অ্যানোটেশন @Part-এর সাথে সার্ভারে ফাইল আপলোড করার অনুমতি দেয়। Retrofit প্রয়োজনীয় হেডার সহ স্বয়ংক্রিয়ভাবে multipart অনুরোধ তৈরি করে। OkHttp RequestBody-এর মাধ্যমে আপলোড অগ্রগতি পরিচালনা করে, যা ব্যবহারকারীকে একটি নির্দেশক প্রদর্শনের সুযোগ দেয়।
interface FileApi {
@Multipart
@POST("upload")
suspend fun uploadImage(
@Part file: MultipartBody.Part
): UploadResponse
}
val body = "image.jpg".toRequestBody("image/jpeg".toMediaTypeOrNull())
val part = MultipartBody.Part.createFormData("file", "image.jpg", body)
Retrofit-এ ত্রুটি হ্যান্ডলিং OkHttp প্রক্রিয়া এবং Kotlin coroutines-এর সংমিশ্রণের উপর নির্মিত। OkHttp ইন্টারসেপ্টর অনুরোধ লগ করা, প্রমাণীকরণ হেডার যোগ করা এবং অ্যাপ্লিকেশন কোডে পৌঁছানোর আগে ত্রুটিগুলি পরিচালনা করার অনুমতি দেয়।
কেন্দ্রীভূত ত্রুটি হ্যান্ডলিংয়ের জন্য, API কলের চারপাশে একটি সিলড ক্লাস Result হিসেবে র্যাপার তৈরি করা হয়। এই জাতীয় ক্লাসের দুটি সাবক্লাস থাকে: ডেটা সহ Success এবং ব্যতিক্রম সহ Error। ViewModel একটি একীভূত ফলাফল গ্রহণ করে এবং প্রতিটি ফাংশনে ত্রুটি হ্যান্ডলিং কোড ডুপ্লিকেট না করেই সংশ্লিষ্ট ইউজার ইন্টারফেস অবস্থা প্রদর্শন করতে পারে।
ইন্টারসেপ্টর দুই ধরনের হয়: অ্যাপ্লিকেশন ইন্টারসেপ্টর সার্ভারে পাঠানোর আগে অনুরোধ পরিবর্তন করে, এবং নেটওয়ার্ক ইন্টারসেপ্টর পাওয়ার পর প্রতিক্রিয়া নিয়ে কাজ করে। উদাহরণস্বরূপ, একটি ইন্টারসেপ্টর 401 পাওয়ার পর স্বয়ংক্রিয়ভাবে অ্যাক্সেস টোকেন রিফ্রেশ করতে পারে এবং ডেভেলপারের অংশগ্রহণ ছাড়াই নতুন টোকেন দিয়ে অনুরোধ পুনরায় করতে পারে।
লগিং ইন্টারসেপ্টর HttpLoggingInterceptor নেটওয়ার্ক অনুরোধ ডিবাগ করার জন্য একটি অপরিহার্য টুল। এটি Logcat-এ অনুরোধ মেথড, URL, হেডার, বডি এবং প্রতিক্রিয়া কোড আউটপুট করে। লগিং স্তর কনফিগার করা যেতে পারে: ন্যূনতম তথ্যের জন্য BASIC, হেডারের জন্য HEADERS, বা সম্পূর্ণ বিষয়বস্তুর জন্য BODY। প্রোডাকশনে, BASIC ব্যবহার বা সম্পূর্ণরূপে লগিং অক্ষম করার পরামর্শ দেওয়া হয়।
OkHttp-এ ইন্টারসেপ্টর দুই প্রকারে বিভক্ত: অনুরোধ পরিবর্তনের জন্য অ্যাপ্লিকেশন ইন্টারসেপ্টর এবং কাঁচা নেটওয়ার্ক ডেটা নিয়ে কাজ করার জন্য নেটওয়ার্ক ইন্টারসেপ্টর। লগিং ইন্টারসেপ্টর স্বয়ংক্রিয়ভাবে Logcat-এ অনুরোধ এবং প্রতিক্রিয়ার বিবরণ আউটপুট করে।
Coroutine স্তরে ত্রুটি হ্যান্ডলিং suspend ফাংশন কলের চারপাশে try-catch-এর মাধ্যমে করা হয়। Retrofit 4xx এবং 5xx কোডের জন্য HttpException, নেটওয়ার্ক না থাকলে UnknownHostException এবং টাইমআউট অতিক্রম করলে SocketTimeoutException হিসাবে ত্রুটি ফেরত দেয়। একীভূত হ্যান্ডলিংয়ের জন্য সিলড ক্লাস Result ব্যবহার করার পরামর্শ দেওয়া হয়।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Retrofit হলো OkHttp-এর উপরে একটি উচ্চ-স্তরের র্যাপার। OkHttp নিম্ন-স্তরের HTTP অপারেশন করে, যখন Retrofit ঘোষণামূলক অ্যানোটেশন, কনভার্টার এবং অ্যাডাপ্টার যোগ করে। সাধারণত, প্রকল্পগুলি উভয় লাইব্রেরি একসাথে ব্যবহার করে।
ত্রুটিগুলি suspend কলের চারপাশে try-catch-এর মাধ্যমে পরিচালিত হয়। সফল ডেটা বা ত্রুটি ফেরত দিতে Result ক্লাস ব্যবহার করার পরামর্শ দেওয়া হয়। এটি প্রতিটি ViewModel-এ একাধিক catch ব্লক এড়িয়ে চলে।
Retrofit Gson, Moshi, Jackson, Protobuf, Wire, Simple XML এবং Scalars সমর্থন করে। প্রতিটি কনভার্টার Converter.Factory-এর মাধ্যমে সংযুক্ত হয়। সবচেয়ে জনপ্রিয় হলো GsonConverterFactory এবং MoshiConverterFactory।
না, Retrofit OkHttp-এর সাথে দৃঢ়ভাবে সংযুক্ত এবং অন্যান্য HTTP ক্লায়েন্ট সমর্থন করে না। Kotlin-এ মাল্টিপ্ল্যাটফর্ম প্রকল্পের জন্য, Ktor ব্যবহার করুন যা iOS এবং JS সহ সমস্ত প্ল্যাটফর্মে কাজ করে।
টাইমআউট OkHttpClient-এর মাধ্যমে কনফিগার করা হয়। ক্লায়েন্ট তৈরি করার সময় connectTimeout, readTimeout এবং writeTimeout প্রপার্টি সেট করুন, তারপর এটি Retrofit.Builder.client()-এ পাঠান। ডিফল্ট মান 10 সেকেন্ড।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন