Axum para Rust: guia completo com exemplos

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

O que é Axum e para que serve?

\n

Axum é um framework web moderno, ergonômico e de alto desempenho para a linguagem Rust, desenvolvido pela equipe Tokio. Ele é construído sobre os populares crates tokio, tower e hyper, garantindo alta performance e assincronicidade "prontas para uso".

\n

O principal objetivo do Axum é fornecer aos desenvolvedores uma API intuitiva para criar aplicações web e APIs, mantendo toda a potência e segurança do Rust. Diferente de soluções mais "de baixo nível", o Axum abstrai a complexidade de trabalhar com o protocolo HTTP, permitindo focar na lógica de negócio.

\n

Axum é ideal para:

\n
    \n
  • Criação de APIs RESTful e microsserviços
  • \n
  • Desenvolvimento de aplicações web com renderização no servidor
  • \n
  • Construção de servidores proxy e middleware
  • \n
  • Implementação de conexões WebSocket
  • \n
  • Qualquer cenário que exija alta performance e confiabilidade
  • \n
\n\n

Instalação do Axum

\n

Como Rust é uma linguagem compilada, a instalação é feita através do gerenciador de pacotes Cargo. Adicione as seguintes dependências ao seu arquivo Cargo.toml:

\n
[dependencies]\naxum = "0.7"\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\ntower-http = { version = "0.5", features = ["cors", "trace"] }\ntracing = "0.1"\ntracing-subscriber = "0.3"
\n

Depois disso, execute o comando cargo build para baixar e compilar as dependências.

\n\n

Início rápido: primeira aplicação com Axum

\n

Crie o arquivo src/main.rs e escreva um servidor HTTP simples:

\n
use axum::{\n    routing::get,\n    Router,\n};\nuse std::net::SocketAddr;\n\n#[tokio::main]\nasync fn main() {\n    // Criando o roteador\n    let app = Router::new()\n        .route("/", get(root_handler))\n        .route("/hello/:name", get(hello_handler));\n\n    // Iniciando o servidor\n    let addr = SocketAddr::from(([127, 0, 0, 1], 3000));\n    println!("Servidor rodando em {}", addr);\n    \n    axum::Server::bind(&addr)\n        .serve(app.into_make_service())\n        .await\n        .unwrap();\n}\n\nasync fn root_handler() -> &'static str {\n    "Bem-vindo à página inicial!"\n}\n\nasync fn hello_handler(axum::extract::Path(name): axum::extract::Path) -> String {\n    format!("Olá, {}!", name)\n}
\n

Execute o servidor com o comando cargo run e abra o navegador no endereço http://localhost:3000/hello/Mundo.

\n\n

Principais métodos e funções do Axum

\n\n

1. Router::new()

\n

Descrição: Cria um novo roteador vazio. Este é o ponto de entrada principal para configurar sua aplicação.

\n

Parâmetros: Nenhum.

\n

Exemplo:

\n
use axum::Router;\n\nlet app: Router = Router::new();
\n\n

2. Router::route()

\n

Descrição: Adiciona uma rota ao caminho especificado com o método HTTP e manipulador fornecidos.

\n

Parâmetros:

\n
    \n
  • path: &str — caminho da rota (pode conter segmentos dinâmicos, ex: /users/:id)
  • \n
  • method_router: MethodRouter — resultado da chamada de get(), post(), put(), delete(), etc.
  • \n
\n

Exemplo:

\n
use axum::{routing::get, Router};\n\nasync fn users_list() -> &'static str { "Lista de usuários" }\nasync fn create_user() -> &'static str { "Criação de usuário" }\n\nlet app = Router::new()\n    .route("/users", get(users_list).post(create_user));
\n\n

3. routing::get(), post(), put(), delete()

\n

Descrição: Criam um manipulador para o respectivo método HTTP.

\n

Parâmetros:

\n

Recommendations