17

Ktor و بک‌اند؛ کاتلین پشت صحنه هم بلده

کاتلین فقط اندروید نیست؛ می‌تونه API هم بسازه، مثل آدم حسابی.

درس 17 از 20

Ktor چیه؟

Ktor فریم‌ورک سبک JetBrains برای ساخت سرویس و API با کاتلینه. برای میکروسرویس، APIهای کوچک و پروژه‌های Kotlin-first انتخاب جذابیه. نه همیشه جای Spring رو می‌گیره، نه بچه‌بازیه؛ ابزار درست برای جای درست.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

نکته کاربردی: این بخش اسکلت ذهنی درس را می‌سازد. وقتی بدانی این قطعه دقیقاً چه مسئله‌ای را حل می‌کند، بعداً موقع پروژه فقط syntax حفظی تحویل نمی‌دهی؛ تصمیم درست می‌گیری. این توضیح قرار است دید پروژه‌ای بدهد، نه اینکه فقط تعریف کتابی حفظ کنی.

Route ساده

در بک‌اند route مشخص می‌کنه کاربر وقتی به یک مسیر میاد، چی دریافت کنه. مثل تابلوهای راهنمایی؛ `/hello` یعنی سلام بده، نه اینکه کاربر رو بفرستی پارکینگ.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

Ktor route
fun Application.module() {
    routing {
        get("/hello") {
            call.respondText("سلام از Ktor")
        }
    }
}
خروجی یا نتیجه اجرا
در مسیر /hello پاسخ می‌گیری:
سلام از Ktor
نکته کاربردی: اینجا باید به رفتار کد نگاه کنی، نه فقط ظاهرش. مقدارها را عوض کن و دوباره اجرا بگیر تا دستت بفهمد برنامه چطور واکنش نشان می‌دهد. اگر خروجی با چیزی که انتظار داشتی فرق کرد، اول مقدار متغیرها و مسیر اجرا را چک کن؛ ۹۰٪ باگ‌های اول راه همین‌جا قایم شده‌اند.

داده JSON با data class

برای response ساختارمند از data class استفاده کن. با serialization می‌تونی JSON برگردونی و کلاینت هم راحت‌تر مصرفش کنه.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

data response
@Serializable
data class ApiMessage(
    val message: String,
    val status: String
)

get("/status") {
    call.respond(ApiMessage("همه‌چی اوکیه", "ok"))
}
خروجی یا نتیجه اجرا
در مسیر /status پاسخ JSON شبیه این است:
{"message":"همه‌چی اوکیه","status":"ok"}
نکته کاربردی: این الگو در پروژه واقعی زیاد تکرار می‌شود. از همین حالا تمیز و خوانا بنویس تا بعداً موقع دیباگ، خودت به خودت فحش ندهی. اگر خروجی با چیزی که انتظار داشتی فرق کرد، اول مقدار متغیرها و مسیر اجرا را چک کن؛ ۹۰٪ باگ‌های اول راه همین‌جا قایم شده‌اند.

نکته معماری

route رو با منطق کسب‌وکار قاطی نکن. route فقط در ورودی باشه، سرویس‌ها کار اصلی رو انجام بدن. وگرنه فایل route تبدیل می‌شه به هیولایی که حتی خودت هم از باز کردنش می‌ترسی.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

نکته کاربردی: نکته حرفه‌ای این است که Kotlin معمولاً راه کوتاه‌تر دارد، ولی کوتاه‌تر همیشه بهتر نیست. اول خوانایی، بعد زرنگ‌بازی. این توضیح قرار است دید پروژه‌ای بدهد، نه اینکه فقط تعریف کتابی حفظ کنی.

نتیجه این درس 🎯

Ktor نشان می‌دهد Kotlin فقط برای Android نیست؛ پشت سرور هم می‌تواند API تمیز بسازد. route، data class و پاسخ JSON پایه‌ی یک بک‌اند درست‌وحسابی‌اند.

تمرین! 🧠

یک route فرضی بنویس که `/version` را جواب بدهد و متن نسخه برنامه را برگرداند.

جواب تمرین
fun Application.module() {
    routing {
        get("/version") {
            call.respondText("DiCode API v1.0")
        }
    }
}
خروجی جواب
در مسیر /version پاسخ می‌گیری: DiCode API v1.0