O que é Actix-web e para que serve?
\n\nActix-web é um framework web poderoso, pragmático e extremamente rápido para a linguagem de programação Rust. Ele é construído com base no modelo de atores (biblioteca Actix) e no runtime assíncrono Tokio. O Actix-web permite criar aplicações web e APIs de alto desempenho, capazes de processar milhões de requisições por segundo.
\n\nPor que usar Actix-web?
\n- \n
- Desempenho: O Actix-web está consistentemente entre os três frameworks web mais rápidos do mundo (de acordo com os testes TechEmpower), superando soluções como Go net/http e Node.js Express. \n
- Segurança: O Rust garante segurança de memória em tempo de compilação, eliminando classes inteiras de vulnerabilidades (estouro de buffer, condições de corrida). \n
- Segurança de tipos: Graças ao sistema de tipos rigoroso do Rust, muitos erros (por exemplo, formato JSON inválido) são detectados em tempo de compilação. \n
- Assincronicidade: Suporte completo a async/await permite processar milhares de conexões simultâneas sem criar uma thread para cada uma. \n
- Ecossistema: O Actix-web integra-se facilmente com outras crates do Rust: serde (serialização), sqlx/diesel (bancos de dados), reqwest (cliente HTTP). \n
O Actix-web é ideal para: APIs REST, microsserviços, servidores WebSocket, aplicações web de alta carga, servidores proxy.
\n\nInstalação do Actix-web
\n\nComo o Actix-web é uma biblioteca para Rust, a instalação é feita através do gerenciador de pacotes cargo (análogo ao pip para Python).
Passo 1. Certifique-se de que o Rust está instalado. Verifique com o comando:
\nrustc --version\ncargo --version\nSe o Rust não estiver instalado, baixe-o em rustup.rs.
\n\nPasso 2. Crie um novo projeto:
\ncargo new my_actix_app\ncd my_actix_app\n\nPasso 3. Adicione o Actix-web às dependências. Abra o arquivo Cargo.toml e adicione:
[dependencies]\nactix-web = "4"\n\nPasso 4. Instale as dependências e compile o projeto:
\ncargo build\n\nPronto! Agora você pode usar o Actix-web no seu projeto.
\n\nInício rápido: "Hello, World!" no Actix-web
\n\nVamos criar um servidor web simples que responde a requisições GET.
\n\nExemplo 1: Servidor mínimo
\n// main.rs\nuse actix_web::{get, App, HttpResponse, HttpServer, Responder};\n\n#[get("/")]\nasync fn hello() -> impl Responder {\n HttpResponse::Ok().body("Hello, World!")\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n HttpServer::new(|| {\n App::new()\n .service(hello)\n })\n .bind(("127.0.0.1", 8080))?\n .run()\n .await\n}\n\nExecução: cargo run
Verificação: Abra o navegador no endereço http://127.0.0.1:8080 ou execute:
curl http://127.0.0.1:8080\nVocê verá a resposta: Hello, World!
Principais métodos e funções do Actix-web
\n\nVamos analisar os elementos-chave do framework. Para cada um, são fornecidos descrição, parâmetros e um exemplo funcional.
\n\n1. #[get("/path")] — macro para processar requisições GET
\nO que faz: Decora uma função assíncrona, transformando-a em um manipulador de requisições HTTP GET para o caminho especificado.
\nParâmetros: Caminho (string), pode conter segmentos dinâmicos (por exemplo, /{id}).
Exemplo:
\nuse actix_web::{get, HttpResponse, Responder};\n\n#[get("/user/{id}")]\nasync fn get_user(path: actix_web::web::Path<String>) -> impl Responder {\n let user_id = path.into_inner();\n HttpRespons