Por que Rust é seu próximo passo em microsserviços?
\n\nO mundo dos microsserviços foi dividido por muito tempo entre Java (com seu Spring Boot), Python (FastAPI, Django) e Go. Mas nos últimos dois anos, a voz do Rust tem sido ouvida cada vez mais. Por quê? Porque Rust oferece o que antes parecia inatingível: desempenho de C++ e segurança de memória — sem coletor de lixo.
\n\nSe você programa em Python, está acostumado à velocidade de desenvolvimento. Mas quando a carga aumenta, o Python começa a "ficar lento". Rust resolve esse problema radicalmente: um microsserviço em Rust pode substituir 3–4 serviços em Python em termos de desempenho. E o código não "quebra" em tempo de execução com NullPointerException.
\n\nNeste artigo, não vamos filosofar. Vamos pegar e escrever um microsserviço em Rust do zero. Você verá que não é assustador, mas sim muito empolgante.
\n\nPreparando o ambiente: o que instalar
\n\nAntes de escrever código, vamos garantir que você tenha tudo o que precisa. Se você é iniciante em Rust — não se preocupe, a instalação leva 2 minutos.
\n\n1. Instalação do Rust
\nA maneira mais simples é através do instalador oficial rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nApós a instalação, verifique a versão:
\n\nrustc --version\ncargo --version\n\n2. Escolha do editor
\nRecomendo VS Code com a extensão rust-analyzer. Isso lhe dará autocompletar, destaque de erros e refatoração "prontos para uso".
3. Docker (para conteinerização)
\nMicrosserviços geralmente vivem em contêineres. Instale o Docker Desktop ou Docker Engine. Vamos construir a imagem no final do artigo.
\n\nEscolhendo o framework: Actix-web vs Axum vs Rocket
\n\nNo mundo Rust, existem três frameworks principais para servidores HTTP. Aqui está uma breve comparação:
\n\n- \n
- Actix-web — o mais rápido (até 1 milhão de requisições/seg). Maduro, muitos exemplos. Ideal para produção. \n
- Axum — moderno, dos criadores do Tokio. Melhor integração com o ecossistema async. \n
- Rocket — a sintaxe mais "amigável", mas atualiza mais lentamente. \n
Neste artigo, usaremos Actix-web, pois é testado há anos e tem a maior comunidade. Mas se você quiser uma stack "moderna" — fique à vontade para usar Axum.
\n\nPrimeiro microsserviço: serviço de encurtamento de links
\n\nPara não sermos abstratos, vamos escrever um microsserviço real — url-shortener. Ele receberá uma URL longa e retornará uma curta.
\n\nPasso 1. Criando o projeto
\ncargo new url-shortener\ncd url-shortener\n\nPasso 2. Adicionando dependências
\nAbra o Cargo.toml e adicione:
[dependencies]\nactix-web = "4"\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\nuuid = { version = "1", features = ["v4"] }\ntokio = { version = "1", features = ["full"] }\n\nPasso 3. Escrevendo o código
\nSubstitua o conteúdo de src/main.rs pelo seguinte código:
use actix_web::{web, App, HttpServer, HttpResponse, Responder};\nuse serde::{Deserialize, Serialize};\nuse std::sync::Mutex;\nuse uuid::Uuid;\n\n// Estrutura para armazenar links em memória\nstruct AppState {\n links: Mutex>,\n}\n\n#[derive(Serialize, Deserialize, Clone)]\nstruct Link {\n id: String,\n url: String,\n}\n\n#[derive(Deserialize)]\nstruct CreateLinkRequest {\n url: String,\n}\n\n// POST /shorten — cria um link curto\nasync fn shorten(data: web::Data<AppState>, body: web::Json<CreateLinkRequest>) -> impl Responder {\n let new_link = Link {\n id: Uuid::new_v4().to_string()[..8].to_string(), // pega os primeiros 8 caracteres do UUID\n url: body.url.clone(),\n };\n\n let mut links = data.lin