Microsserviços em Rust: por onde começar e não enlouquecer

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

Por que Rust é seu próximo passo em microsserviços?

\n\n

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

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

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

Preparando o ambiente: o que instalar

\n\n

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

1. Instalação do Rust

\n

A maneira mais simples é através do instalador oficial rustup:

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n\n

Após a instalação, verifique a versão:

\n\n
rustc --version\ncargo --version
\n\n

2. Escolha do editor

\n

Recomendo VS Code com a extensão rust-analyzer. Isso lhe dará autocompletar, destaque de erros e refatoração "prontos para uso".

\n\n

3. Docker (para conteinerização)

\n

Microsserviços geralmente vivem em contêineres. Instale o Docker Desktop ou Docker Engine. Vamos construir a imagem no final do artigo.

\n\n

Escolhendo o framework: Actix-web vs Axum vs Rocket

\n\n

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

Primeiro microsserviço: serviço de encurtamento de links

\n\n

Para não sermos abstratos, vamos escrever um microsserviço real — url-shortener. Ele receberá uma URL longa e retornará uma curta.

\n\n

Passo 1. Criando o projeto

\n
cargo new url-shortener\ncd url-shortener
\n\n

Passo 2. Adicionando dependências

\n

Abra o Cargo.toml e adicione:

\n\n
[dependencies]\nactix-web = "4"\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\nuuid = { version = "1", features = ["v4"] }\ntokio = { version = "1", features = ["full"] }
\n\n

Passo 3. Escrevendo o código

\n

Substitua o conteúdo de src/main.rs pelo seguinte código:

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

Blogs

Book Recommendations