Introdução: Por que Kotlin e API REST?
\nO desenvolvimento web moderno é impensável sem APIs REST. Se você já conhece Python e frameworks como Flask ou FastAPI, certamente aprecia a simplicidade e velocidade na criação de aplicações servidoras. Kotlin, como uma linguagem moderna para JVM, oferece não menos elegância e concisão, especialmente em conjunto com o framework Ktor.
\nNeste artigo, criaremos uma API REST completa em Kotlin em 30 minutos. Você aprenderá a configurar o projeto, criar rotas, processar JSON e iniciar o servidor. Sem enrolação — apenas prática.
\nSe você deseja expandir seu stack de tecnologias ou simplesmente experimentar Kotlin para desenvolvimento backend, este guia é para você.
\n\nPasso 1: Configuração do projeto e dependências
\nPara começar, precisaremos de um projeto em Kotlin. Usaremos o gerenciador de builds Gradle (ou Maven — à sua escolha). A maneira mais rápida é criar um projeto através do Ktor Project Generator.
\nSelecione as seguintes opções:
\n- \n
- Build System: Gradle Kotlin DSL \n
- Engine: Netty (ou qualquer outro) \n
- Plugins: Content Negotiation (JSON), Routing, Status Pages \n
Após baixar o arquivo, descompacte-o e abra no IntelliJ IDEA ou outro editor.
\nSe você estiver criando o projeto manualmente, adicione as seguintes dependências no build.gradle.kts:
dependencies {\n implementation("io.ktor:ktor-server-core:2.3.0")\n implementation("io.ktor:ktor-server-netty:2.3.0")\n implementation("io.ktor:ktor-server-content-negotiation:2.3.0")\n implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.0")\n implementation("ch.qos.logback:logback-classic:1.4.11")\n}\nAgora, criaremos o arquivo Application.kt — o ponto de entrada da aplicação.
import io.ktor.server.engine.*\nimport io.ktor.server.netty.*\nimport io.ktor.server.application.*\nimport io.ktor.server.plugins.contentnegotiation.*\nimport io.ktor.serialization.kotlinx.json.*\nimport kotlinx.serialization.json.Json\n\nfun main() {\n embeddedServer(Netty, port = 8080, host = "0.0.0.0") {\n configureSerialization()\n configureRouting()\n }.start(wait = true)\n}\n\nfun Application.configureSerialization() {\n install(ContentNegotiation) {\n json(Json {\n prettyPrint = true\n isLenient = true\n })\n }\n}\nPronto! Temos uma configuração básica para trabalhar com JSON e um servidor na porta 8080.
\n\nPasso 2: Criação do modelo de dados e repositório
\nPara a API REST, precisamos de dados. Vamos criar um modelo simples User (usuário) e um repositório temporário em memória.
\nPrimeiro, definimos uma data class com a anotação @Serializable:
import kotlinx.serialization.Serializable\n\n@Serializable\ndata class User(\n val id: Int,\n val name: String,\n val email: String\n)\nAgora, criamos um objeto repositório que armazenará os usuários:
\nobject UserRepository {\n private val users = mutableListOf(\n User(1, "Ivan Ivanov", "ivan@example.com"),\n User(2, "Maria Petrova", "maria@example.com")\n )\n\n fun getAll(): List<User> = users.toList()\n\n fun getById(id: Int): User? = users.find { it.id == id }\n\n fun add(user: User): User {\n users.add(user)\n return user\n }\n\n fun delete(id: Int): Boolean = users.removeIf { it.id == id }\n}\nEsta é uma solução simples, mas para uma demonstração em 30 minutos é ideal.
\n\nPasso 3: Configuração das rotas (endpoints REST)
\nAgora a parte mais interessante — criaremos os endpoints para operações CRUD. Adicionaremos o arquivo Routing.kt:
import io.ktor.server.routing.*\nimport io.ktor.server.response.*\nimport io.ktor.server.request.*\n\nfun Application.configureRouting() {\n routing {\n route("/api/u