كيفية كتابة REST API على Kotlin في 30 دقيقة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة

Kotlin هي لغة برمجة حديثة تكتسب شعبية سريعة في تطوير الواجهة الخلفية. بفضل بناء الجملة المختصر، والتوافق الكامل مع Java، والأدوات القوية مثل إطار العمل Ktor، فإن كتابة REST API بلغة Kotlin تستغرق حرفياً 30 دقيقة. في هذه المقالة، سنقوم بإنشاء REST API كامل لإدارة قائمة المهام (Todo API). ستتعلم كيفية إعداد المشروع، وإنشاء نقاط النهاية، وتوصيل قاعدة البيانات، واختبار API. لا نظرية زائدة — فقط تطبيق عملي.



الخطوة 1: إعداد المشروع والتبعيات

لبدء سريع، نستخدم IntelliJ IDEA (Community Edition) أو أي محرر آخر. سنقوم بإنشاء مشروع Gradle جديد باستخدام Kotlin DSL.



إنشاء هيكل المشروع

أضف التبعيات التالية إلى ملف build.gradle.kts:

plugins {    kotlin("jvm") version "1.9.22"    application}

repositories { mavenCentral()}

dependencies { implementation("io.ktor:ktor-server-core:2.3.7") implementation("io.ktor:ktor-server-netty:2.3.7") implementation("io.ktor:ktor-server-content-negotiation:2.3.7") implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7") implementation("org.jetbrains.exposed:exposed-core:0.44.1") implementation("org.jetbrains.exposed:exposed-dao:0.44.1") implementation("org.jetbrains.exposed:exposed-jdbc:0.44.1") implementation("com.h2database:h2:2.2.224") implementation("ch.qos.logback:logback-classic:1.4.14")}

application { mainClass.set("ApplicationKt")}

نحن نستخدم:

  • Ktor — إطار عمل غير متزامن خفيف الوزن لخوادم HTTP.
  • Exposed — ORM للعمل مع قواعد البيانات.
  • H2 — قاعدة بيانات مدمجة للتطوير.
  • Kotlinx.serialization — للعمل مع JSON.


الخطوة 2: إنشاء نموذج البيانات وتوصيل قاعدة البيانات

سنحدد هيكل جدول المهام. قم بإنشاء ملف Database.kt:

import org.jetbrains.exposed.sql.Tableimport org.jetbrains.exposed.sql.insertimport org.jetbrains.exposed.sql.selectAllimport org.jetbrains.exposed.sql.transactions.transaction

object Tasks : Table() { val id = integer("id").autoIncrement() val title = varchar("title", 255) val completed = bool("completed").default(false)

override val primaryKey = PrimaryKey(id)}

data class Task(val id: Int, val title: String, val completed: Boolean)

fun initDatabase() { Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver") transaction { SchemaUtils.create(Tasks) }}

يقوم هذا الكود بإنشاء جدول Tasks بثلاثة حقول: id و title و completed. الدالة initDatabase() تقوم بتهيئة قاعدة البيانات في الذاكرة.



الخطوة 3: كتابة وحدات التحكم في REST API

الآن سنقوم بإنشاء ملف التطبيق الرئيسي Application.kt. هنا سنحدد جميع نقاط النهاية.



الإعداد الأساسي للخادم

import io.ktor.server.application.*import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.routing.*import io.ktor.server.response.*import io.ktor.server.request.*import io.ktor.serialization.kotlinx.json.*import io.ktor.server.plugins.contentnegotiation.*

fun main() { embeddedServer(Netty, port = 8080) { install(ContentNegotiation) { json() } initDatabase() configureRouting() }.start(wait = true)}


تنفيذ نقاط نهاية CRUD

fun Application.configureRouting() {    routing {        // الحصول على جميع المهام        get("/tasks") {            val tasks = transaction {                Tasks.selectAll().map { row ->                    Task(                        id = row[Tasks.id],                

المدونات

توصيات الكتب