Ktor হল Kotlin-এর জন্য একটি অ্যাসিঙ্ক্রোনাস HTTP ক্লায়েন্ট এবং সার্ভার ফ্রেমওয়ার্ক যা মাল্টিপ্ল্যাটফর্ম ডেভেলপমেন্ট সমর্থন করে। লাইব্রেরিটি Kotlin coroutines-এর উপর নির্মিত এবং JVM, iOS, Android, JS এবং Native-এ কাজ করে। GitHub-এ Ktor রিপোজিটরি অনুসারে, প্রকল্পটি সক্রিয়ভাবে JetBrains টিম দ্বারা উন্নয়ন করা হচ্ছে। Ktor HTTP সংযোগের নমনীয় কনফিগারেশনের জন্য প্লাগইন সিস্টেম সহ একটি মডুলার আর্কিটেকচার অফার করে।
মূল পয়েন্ট
Ktor হল Kotlin-এ HTTP ক্লায়েন্ট এবং সার্ভার তৈরির জন্য JetBrains দ্বারা ডেভেলপ করা একটি ফ্রেমওয়ার্ক। ঐতিহ্যবাহী লাইব্রেরির বিপরীতে, Ktor শুরু থেকেই মাল্টিপ্ল্যাটফর্ম ডেভেলপমেন্টের জন্য ডিজাইন করা হয়েছিল এবং এটি Kotlin-সমর্থিত সমস্ত প্ল্যাটফর্মে কাজ করে।
Ktor মিডলওয়্যার হ্যান্ডলার পদ্ধতি ব্যবহার করে, যা Kodein এবং Express.js-এর আর্কিটেকচার দ্বারা অনুপ্রাণিত। প্রতিটি রিকোয়েস্ট হ্যান্ডলার ফাংশনের একটি পাইপলাইনের মধ্য দিয়ে যায় যা রিকোয়েস্ট এবং রেসপন্স পরিবর্তন করতে পারে। এটি কঠোর অ্যানোটেশন-ভিত্তিক আর্কিটেকচারযুক্ত লাইব্রেরিতে অনুপলব্ধ নমনীয়তা প্রদান করে।
বর্তমান সংস্করণ Ktor 3.0-এ Kotlin 2.0, K2 কম্পাইলার এবং উন্নত পারফরম্যান্স সহ নতুন CIO (Coroutine I/O) ইঞ্জিনের জন্য সমর্থন অন্তর্ভুক্ত রয়েছে। লাইব্রেরিটি Apache 2.0 লাইসেন্সের অধীনে বিতরণ করা হয় এবং সীমাবদ্ধতা ছাড়া বাণিজ্যিক ব্যবহারের জন্য উপলব্ধ।
Ktor-এর ক্লায়েন্ট অংশ সম্পূর্ণরূপে Kotlin coroutines-এর উপর নির্মিত, যা থ্রেড ব্লকিং ছাড়া কার্যকর অ্যাসিঙ্ক্রোনাস রিকোয়েস্ট এক্সিকিউশন প্রদান করে। সার্ভার অংশ রাউটিং, রিকোয়েস্ট প্রসেসিং এবং WebSocket সংযোগ সহ HTTP সার্ভার তৈরির অনুমতি দেয়।
Ktor প্লাগইন আর্কিটেকচার ব্যবহার করে: সমস্ত অতিরিক্ত বৈশিষ্ট্য — লগিং, সিরিয়ালাইজেশন, অথেনটিকেশন — প্লাগইনের মাধ্যমে সংযুক্ত হয়। এটি লাইব্রেরিকে মডুলার করে তোলে এবং শুধুমাত্র প্রয়োজনীয় উপাদান সংযোগের অনুমতি দেয়, যা চূড়ান্ত অ্যাপ্লিকেশনের আকার হ্রাস করে।
সমস্ত প্ল্যাটফর্মে একীভূত API-র জন্য ধন্যবাদ, ডেভেলপারকে iOS এবং Android-এর জন্য আলাদা HTTP ক্লায়েন্ট শিখতে হয় না। মাল্টিপ্ল্যাটফর্ম প্রকল্পে, নেটওয়ার্ক লেয়ারের কোড সম্পূর্ণরূপে ভাগ করা হয় এবং প্ল্যাটফর্ম-নির্দিষ্ট বাস্তবায়ন HttpClient ইঞ্জিনের পিছনে লুকানো থাকে। এটি ডেভেলপমেন্টের সময় কমায় এবং প্ল্যাটফর্ম পার্থক্যের সাথে সম্পর্কিত ত্রুটির সংখ্যা হ্রাস করে।
Ktor বৈশিষ্ট্যের একটি সেট প্রদান করে যা এটিকে আধুনিক Kotlin প্রকল্পের জন্য আকর্ষণীয় পছন্দ করে তোলে, বিশেষ করে মাল্টিপ্ল্যাটফর্ম প্রকল্পগুলির জন্য।
Ktor JVM, Android, iOS, macOS, Windows, Linux, JavaScript এবং Wasm-এ কাজ করে। একই HTTP ক্লায়েন্ট কোড পরিবর্তন ছাড়াই সমস্ত প্ল্যাটফর্মে চলে। এটি OkHttp বা URLSession-এর সাথে আবদ্ধ লাইব্রেরির উপর একটি মূল সুবিধা।
Kotlin-এর coroutines কলব্যাক ছাড়া প্রাকৃতিক অ্যাসিঙ্ক্রোনাসিটি প্রদান করে। প্রতিটি রিকোয়েস্ট একটি suspend ফাংশন যা যেকোনো coroutine থেকে কল করা যেতে পারে। Ktor Flow-এর মাধ্যমে রেসপন্স স্ট্রিমিং সমর্থন করে, যা দীর্ঘ সংযোগ এবং WebSocket-এর জন্য সুবিধাজনক।
Ktor প্লাগইন install ব্লকের মাধ্যমে সংযুক্ত হয় এবং আলাদাভাবে কনফিগার করা হয়। প্রধান প্লাগইন: সিরিয়ালাইজেশনের জন্য ContentNegotiation, লগিংয়ের জন্য Logging, অথেনটিকেশনের জন্য Auth এবং দ্বিমুখী যোগাযোগের জন্য WebSockets। প্রতিটি প্লাগইন স্বাধীনভাবে সক্রিয় বা নিষ্ক্রিয় করা যেতে পারে।
এরর হ্যান্ডলিং Ktor-এ এক্সেপশনের উপর ভিত্তি করে। ClientRequestException ক্লাস 4xx কোডের জন্য, ServerResponseException 5xx-এর জন্য এবং IOException নেটওয়ার্ক ব্যর্থতার জন্য নিক্ষিপ্ত হয়। টাইমআউট HttpTimeout প্লাগইনের মাধ্যমে কনফিগার করা হয়, যা সংযোগ, পড়া এবং লেখার জন্য অপেক্ষার সময় নির্ধারণ করে। পুনরায় চেষ্টার জন্য Retry প্লাগইন ব্যবহার করা হয় প্রচেষ্টার সংখ্যা এবং বিলম্বের সেটিংস সহ।
Ktor পাইপলাইন আর্কিটেকচার ব্যবহার করে যেখানে প্রতিটি রিকোয়েস্ট হ্যান্ডলারের একটি চেইনের মধ্য দিয়ে যায়। ক্লায়েন্ট ইনস্টল করা প্লাগইন সহ HttpClient কনফিগারেশন তৈরি করে, এবং get বা post-এর প্রতিটি কল প্লাগইনের মাধ্যমে তাদের সংযোগের ক্রম অনুসারে যায়।
HttpClient অবজেক্ট প্ল্যাটফর্ম-নির্দিষ্ট ইঞ্জিন দিয়ে তৈরি করা হয়: JVM এবং Android-এর জন্য CIO, iOS এবং macOS-এর জন্য Darwin, Android সামঞ্জস্যের জন্য OkHttp, ব্রাউজারের জন্য Js। ইঞ্জিন স্পষ্টভাবে নির্বাচন করা যেতে পারে বা স্বয়ংক্রিয় নির্বাচনের জন্য ছেড়ে দেওয়া যেতে পারে। প্রতিটি রিকোয়েস্ট HttpResponse রিটার্ন করে যাতে রেসপন্স বডি, হেডার এবং স্ট্যাটাস থাকে।
val client = HttpClient(CIO) {
install(ContentNegotiation) {
json(Json {
ignoreUnknownKeys = true
})
}
}
suspend fun fetchUsers(): List<User> {
return client.get("https://api.example.com/users").body()
}
Ktor ইনস্টলেশন Gradle বা Maven-এর মাধ্যমে করা হয়। মাল্টিপ্ল্যাটফর্ম প্রকল্পের জন্য, নির্ভরতাগুলি প্রতিটি লক্ষ্যের জন্য sourceSets-এ উল্লেখ করা হয়। Ktor Maven Central-এর মাধ্যমে বিতরণ করা হয়।
build.gradle.kts-এ, সাধারণ কোডের জন্য ktor-client-core নির্ভরতা এবং নির্দিষ্ট প্ল্যাটফর্মের জন্য একটি ইঞ্জিন যোগ করুন। Ktor সংস্করণ gradle.properties-এ একটি ভেরিয়েবলের মাধ্যমে সেট করা হয়। Ktor 3.x-এর জন্য Kotlin 2.0+ প্রয়োজন এবং এটি K2 কম্পাইলার সমর্থন করে।
val ktorVersion = "3.0.3"
dependencies {
implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("io.ktor:ktor-client-cio:$ktorVersion")
implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
implementation("io.ktor:ktor-client-logging:$ktorVersion")
}
iOS-এর জন্য, Darwin ইঞ্জিন ব্যবহার করা হয় যা নেটিভ URLSession-কে র্যাপ করে। Kotlin Multiplatform-এ, এটি সর্বোচ্চ পারফরম্যান্স এবং iOS সিস্টেম ক্যাশিং মেকানিজমের সাথে ইন্টিগ্রেশন প্রদান করে। ইঞ্জিনটি iOS sourceSet-এ একটি আলাদা নির্ভরতা হিসাবে যোগ করা হয়।
Ktor-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল ContentNegotiation-এর মাধ্যমে বিভিন্ন সিরিয়ালাইজেশন ফরম্যাটের সমর্থন। JSON ছাড়াও, প্লাগইন Protobuf, CBOR, XML এবং কাস্টম ফরম্যাট সমর্থন করে। সিরিয়ালাইজেশনের জন্য kotlinx.serialization বা Jackson লাইব্রেরি ব্যবহার করা হয় এবং ডেভেলপার রিকোয়েস্ট কোড পরিবর্তন না করেই তাদের মধ্যে সুইচ করতে পারে।
নীচের উদাহরণগুলি Ktor ক্লায়েন্টের সাথে কাজ করার সাধারণ পরিস্থিতি দেখায়: বেসিক GET রিকোয়েস্ট, ডেটা পাঠানো এবং মাল্টিপ্ল্যাটফর্ম কোড নিয়ে কাজ করা।
একটি সহজ GET রিকোয়েস্ট যা ডেটা ক্লাসে রেসপন্সের স্বয়ংক্রিয় ডিসিরিয়ালাইজেশন করে। Ktor JSON-কে অবজেক্টে রূপান্তর করতে kotlinx.serialization সহ ContentNegotiation প্লাগইন ব্যবহার করে। কোড সংক্ষিপ্ত এবং টাইপ-সেফ হয়।
@Serializable
data class Post(
val id: Int,
val title: String,
val body: String
)
suspend fun getPosts(): List<Post> {
val response = client.get("https://jsonplaceholder.typicode.com/posts")
return response.body()
}
POST রিকোয়েস্ট Ktor-এ contentType এবং setBody সহ post পদ্ধতির মাধ্যমে একটি ডেটা ক্লাসকে JSON বডি হিসাবে পাঠায়। ContentNegotiation প্লাগইন স্বয়ংক্রিয়ভাবে অবজেক্টকে JSON স্ট্রিং-এ সিরিয়ালাইজ করে। রেসপন্স সিঙ্ক্রোনাস বা অ্যাসিঙ্ক্রোনাসভাবে প্রক্রিয়া করা যেতে পারে।
suspend fun createPost(): Post {
val newPost = Post(
id = 0,
title = "নতুন পোস্ট",
body = "পোস্টের বিষয়বস্তু"
)
val response = client.post("https://jsonplaceholder.typicode.com/posts") {
contentType(ContentType.Application.Json)
setBody(newPost)
}
return response.body()
}
Ktor-এ submitFormWithBinaryData পদ্ধতি multipart ফরম্যাটে ফাইল এবং ফর্ম পাঠানোর অনুমতি দেয়। Ktor স্বয়ংক্রিয়ভাবে ডেটাকে অংশে বিভক্ত করে এবং হেডার যোগ করে। অগ্রগতি ট্র্যাক করতে onUpload ব্যবহার করা হয়, যা পাঠানো ডেটার বাইট গ্রহণ করে।
suspend fun uploadFile(fileBytes: ByteArray) {
client.submitFormWithBinaryData(
url = "https://api.example.com/upload",
formData = formData {
append("file", fileBytes, Headers.build {
append(HttpHeaders.ContentType, "image/png")
append(HttpHeaders.ContentDisposition, "filename=\"photo.png\"")
})
}
)
}
পছন্দ Ktor এবং Retrofit-এর মধ্যে প্রকল্পের আর্কিটেকচার এবং মাল্টিপ্ল্যাটফর্ম প্রয়োজনীয়তার উপর নির্ভর করে। Retrofit শুধুমাত্র Android প্রকল্পের জন্য মানদণ্ড হিসাবে রয়ে গেছে, যখন Ktor Kotlin Multiplatform-এর জন্য সেরা পছন্দ।
Ktor WebSocket এবং SSE (Server-Sent Events)-এর জন্য বিল্ট-ইন সমর্থন প্রদান করে, যা এটিকে রিয়েল-টাইম অ্যাপ্লিকেশনের জন্য সুবিধাজনক করে তোলে। Retrofit সরাসরি WebSocket সমর্থন করে না — এর জন্য আলাদা OkHttp WebSocket লাইব্রেরি প্রয়োজন। Ktor তার প্লাগইন সিস্টেমের কারণে বিভিন্ন পরিবেশের জন্য কনফিগার করাও সহজ, যেখানে প্রতিটি প্লাগইন একটি ফাংশনের জন্য দায়ী।
Ktor-এ Auth প্লাগইন বেসিক অথেনটিকেশন, Bearer টোকেন, Digest এবং OAuth2 সমর্থন করে। অথেনটিকেশন কনফিগারেশন ডিক্লারেটিভভাবে করা হয়: ডেভেলপার প্রদানকারী, টোকেন উৎস এবং সুযোগ নির্দিষ্ট করে। Ktor স্বয়ংক্রিয়ভাবে রিকোয়েস্টে অথেনটিকেশন হেডার যোগ করে এবং টোকেনের মেয়াদ শেষ হলে তা রিফ্রেশ করতে পারে।
যদি একটি প্রকল্প iOS এবং Android-এ শেয়ার্ড কোড সহ Kotlin Multiplatform ব্যবহার করে, তাহলে Ktor-ই একমাত্র বিকল্প যা অতিরিক্ত স্তর ছাড়া উভয় প্ল্যাটফর্মে কাজ করে। Retrofit OkHttp এবং JVM-এর সাথে শক্তভাবে আবদ্ধ, যা এটিকে iOS-এর জন্য অনুপযুক্ত করে তোলে।
শুধুমাত্র Android প্রকল্পের জন্য, Retrofit আরও পরিণত API, আরও বেশি সংখ্যক কনভার্টার এবং OkHttp ইন্টারসেপ্টর প্রদান করে। Ktor এই পরিস্থিতিতেও কাজ করে, কিন্তু এর প্লাগইন ইকোসিস্টেম কম বিস্তৃত। উভয় লাইব্রেরি coroutines সমর্থন করে এবং তুলনীয় পারফরম্যান্স দেয়।
| মাপকাঠি | Ktor | Retrofit |
|---|---|---|
| মাল্টিপ্ল্যাটফর্ম | iOS, Android, JVM, JS, Native | শুধুমাত্র JVM এবং Android |
| HTTP ইঞ্জিন | CIO, Darwin, OkHttp, Js | OkHttp |
| কনভার্টার | kotlinx.serialization, Jackson | Gson, Moshi, Jackson, Protobuf |
| আর্কিটেকচার | প্লাগইন সহ পাইপলাইন | কোড জেনারেশন সহ অ্যানোটেশন |
| ডেভেলপার | JetBrains | Square |
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Ktor — JetBrains-এর coroutines-এর উপর মাল্টিপ্ল্যাটফর্ম HTTP ক্লায়েন্ট। Retrofit — OkHttp-এর উপর ভিত্তি করে Square-এর Android লাইব্রেরি। Ktor iOS, Android, JS এবং Native-এ কাজ করে, যখন Retrofit শুধুমাত্র JVM-এ কাজ করে।
হ্যাঁ, Ktor Darwin ইঞ্জিনের মাধ্যমে iOS সমর্থন করে যা নেটিভ URLSession ব্যবহার করে। এটি সর্বোচ্চ পারফরম্যান্স এবং iOS সিস্টেম ক্যাশের সাথে সঠিক অপারেশন নিশ্চিত করে। ক্লায়েন্ট কোড প্ল্যাটফর্মের মধ্যে ভাগ করা থাকে।
Ktor ইঞ্জিন সমর্থন করে: CIO (JVM/Android), Darwin (iOS/macOS), OkHttp (Android), Js (ব্রাউজার), Jetty, Netty, Tomcat (সার্ভার)। ইঞ্জিন স্পষ্টভাবে নির্বাচন করা যেতে পারে বা ডিফল্ট স্বয়ংক্রিয় নির্বাচনে ছেড়ে দেওয়া যেতে পারে।
হ্যাঁ, Ktor-এর ক্লায়েন্ট এবং সার্ভার উভয়ের জন্যই বিল্ট-ইন WebSocket সমর্থন রয়েছে। ক্লায়েন্টের জন্য WebSockets প্লাগইন ব্যবহার করা হয়, যা দ্বিমুখী সংযোগ স্থাপন এবং রিয়েল-টাইমে বার্তা বিনিময়ের অনুমতি দেয়।
ত্রুটিগুলি suspend কলের চারপাশে try-catch-এর মাধ্যমে পরিচালনা করা হয়। Ktor 4xx-এর জন্য ClientRequestException, 5xx-এর জন্য ServerResponseException এবং নেটওয়ার্ক ত্রুটির জন্য IOException নিক্ষেপ করে। একীকরণের জন্য Result টাইপ ব্যবহার করার পরামর্শ দেওয়া হয়।
উপসংহার
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন