Por que Kotlin é a melhor escolha para microsserviços em 2024?
\n\nVocê já escreveu um microsserviço em Python e depois pensou: "E se ele funcionasse mais rápido, consumisse menos memória e o código continuasse tão legível?" Familiar? Então bem-vindo ao mundo do Kotlin — a linguagem que o Google escolheu para Android e que a comunidade de desenvolvedores backend escolheu para criar microsserviços leves e performáticos.
\n\nKotlin se encaixa perfeitamente na arquitetura de microsserviços: é estaticamente tipado, compila para bytecode JVM (ou código nativo via Kotlin/Native), mas não requer toneladas de boilerplate como Java. E o principal: suas coroutines permitem processar milhares de requisições em uma única thread sem a dor do callback hell.
\n\nNeste artigo, não vamos dar aulas teóricas. Vamos pegar e escrever dois microsserviços: User Service (REST API) e Notification Service (simulação de envio de e-mails). Tudo em Kotlin puro + Ktor. Vamos lá!
\n\n1. Ferramentas: o que instalar antes de começar
\n\nAntes de escrever código, vamos garantir que seu computador está pronto para a ação.
\n\nO que instalar:
\n- \n
- JDK 17+ — Kotlin roda na JVM, então não tem como escapar do Java. Baixe em Adoptium. \n
- IntelliJ IDEA Community Edition — a melhor IDE para Kotlin (sim, é da JetBrains e sim, é gratuita). \n
- Gradle (ou Maven) — sistema de build. No IntelliJ já vem embutido, mas se quiser instalar separadamente: gradle.org. \n
- Docker (opcional, mas facilita muito o deploy). \n
Se você tem macOS ou Linux — já está no meio do caminho para o sucesso. No Windows, recomendo WSL2.
\n\n2. Criando nosso primeiro microsserviço: User Service com Ktor
\n\nKtor é um framework dos criadores do Kotlin. Ele é extremamente leve: você decide quais módulos conectar (roteamento, serialização, logging). Nada de mágica — apenas código puro.
\n\n2.1. Geração do projeto
\nA maneira mais rápida é usar o Ktor Project Generator. Selecione:
\n- \n
- Build system: Gradle Kotlin DSL \n
- Engine: Netty (o mais popular) \n
- Plugins: Routing, Content Negotiation (JSON), Status Pages \n
Baixe o arquivo, abra no IntelliJ — e em 2 minutos você tem um esqueleto pronto.
\n\n2.2. Escrevendo a REST API: obtendo usuários
\nVamos criar um modelo simples e um endpoint. O código será o mais legível possível:
\n\n// Model.kt\ndata class User(\n val id: Int,\n val name: String,\n val email: String\n)\n\n// UserRepository.kt\nobject UserRepository {\n private val users = mutableListOf(\n User(1, "Alice", "alice@example.com"),\n User(2, "Bob", "bob@example.com")\n )\n\n fun findAll(): List<User> = users\n fun findById(id: Int): User? = users.find { it.id == id }\n}\n\n// Application.kt (ponto de entrada)\nfun main() {\n embeddedServer(Netty, port = 8080) {\n configureSerialization()\n configureRouting()\n }.start(wait = true)\n}\n\n// Routing.kt\nfun Application.configureRouting() {\n routing {\n route("/api/v1/users") {\n get {\n call.respond(UserRepository.findAll())\n }\n get("/{id}") {\n val id = call.parameters["id"]?.toIntOrNull()\n if (id == null) {\n call.respond(HttpStatusCode.BadRequest, "Invalid ID")\n return@get\n }\n val user = UserRepository.findById(id)\n if (user != null) {\n call.respond(user)\n } else {\n call.respond(HttpStatusCode.NotFound, "User not found")\n