Como escrever uma API REST em Kotlin em 30 minutos: guia passo a passo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que Kotlin e API REST?

\n

O 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.

\n

Neste 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.

\n

Se você deseja expandir seu stack de tecnologias ou simplesmente experimentar Kotlin para desenvolvimento backend, este guia é para você.

\n\n

Passo 1: Configuração do projeto e dependências

\n

Para 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.

\n

Selecione 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
\n

Após baixar o arquivo, descompacte-o e abra no IntelliJ IDEA ou outro editor.

\n

Se você estiver criando o projeto manualmente, adicione as seguintes dependências no build.gradle.kts:

\n
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}
\n

Agora, criaremos o arquivo Application.kt — o ponto de entrada da aplicação.

\n
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}
\n

Pronto! Temos uma configuração básica para trabalhar com JSON e um servidor na porta 8080.

\n\n

Passo 2: Criação do modelo de dados e repositório

\n

Para a API REST, precisamos de dados. Vamos criar um modelo simples User (usuário) e um repositório temporário em memória.

\n

Primeiro, definimos uma data class com a anotação @Serializable:

\n
import kotlinx.serialization.Serializable\n\n@Serializable\ndata class User(\n    val id: Int,\n    val name: String,\n    val email: String\n)
\n

Agora, criamos um objeto repositório que armazenará os usuários:

\n
object 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}
\n

Esta é uma solução simples, mas para uma demonstração em 30 minutos é ideal.

\n\n

Passo 3: Configuração das rotas (endpoints REST)

\n

Agora a parte mais interessante — criaremos os endpoints para operações CRUD. Adicionaremos o arquivo Routing.kt:

\n
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                

Blogs

Book Recommendations