如何在30分钟内用Kotlin编写REST API

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言

Kotlin 是一种现代编程语言,在后端开发中迅速流行起来。凭借其简洁的语法、与 Java 的完全兼容性以及 Ktor 框架等强大工具,用 Kotlin 编写 REST API 只需 30 分钟。在本文中,我们将创建一个用于管理任务列表的完整 REST API(Todo API)。您将学习如何设置项目、创建端点、连接数据库以及测试 API。没有多余的理论——只有实践。



第一步:项目设置与依赖项

为了快速启动,我们使用 IntelliJ IDEA(社区版)或任何其他编辑器。让我们创建一个带有 Kotlin DSL 的新 Gradle 项目。



创建项目结构

在 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。


第二步:创建数据模型并连接数据库

让我们定义任务表的结构。创建文件 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() 函数初始化内存数据库。



第三步:编写 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],                

博客

书籍推荐