Aula 15 - Rust para Web (Introdução) 🌐
Objetivo
Objetivo: Entrar no mundo do desenvolvimento web com Rust, conhecendo o framework Actix Web e aprendendo a criar uma API REST básica, rápida e segura.
1. Por que usar Rust na Web? 🚀
Rust tem se tornado uma escolha popular para o backend devido a: - Performance Extrema: Ideal para serviços de alta carga. - Segurança: Previne crashes comuns em servidores C++/C. - Ecossistema: Frameworks como Actix Web e Axum são consistentemente os mais rápidos em benchmarks mundiais.
2. Olá, Actix Web! 🦀
O Actix Web é um framework poderoso, pragmático e extremamente rápido.
Configurando o Cargo.toml
[dependencies]
actix-web = "4"
serde = { version = "1.0", features = ["derive"] } # Para serialização JSON
Criando o Servidor Básico
use actix_web::{get, App, HttpResponse, HttpServer, Responder};
#[get("/")]
async fn hello() -> impl Responder {
HttpResponse::Ok().body("Olá, Actix Web! 🦀")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.service(hello)
})
.bind(("127.0.0.1", 8080))?
.run()
.await
}
3. Rotas e JSON 🛰️
Servidores modernos geralmente se comunicam via JSON. O Rust usa a crate Serde para transformar Structs em JSON e vice-versa.
use actix_web::{post, web, HttpResponse, Responder};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct Info {
nome: String,
}
#[post("/echo")]
async fn echo(item: web::Json<Info>) -> impl Responder {
HttpResponse::Ok().json(item.0) // Retorna o JSON recebido
}
4. Visualização: Fluxo de uma Requisição 🔄
graph LR
A["Cliente (Browser/Postman)"] -- GET /produtos --> B["Actix Web Server"]
B --> C{Roteamento}
C -->|Match| D["Handler Function (Async)"]
D --> E["Lógica / Banco de Dados"]
E --> F["HttpResponse (JSON)"]
F -- 200 OK --> A
style B fill:#f96,stroke:#333
5. Mini-Projeto: API de Lista de Compras 🛒
Desenvolva um servidor web que:
1. Tenha uma rota GET /itens que retorne uma lista de itens em JSON.
2. Tenha uma rota POST /itens que receba um novo item e o "adicione" (por enquanto, apenas imprima no console e retorne sucesso).
3. Utilize Structs com Serialize e Deserialize.
4. Teste as rotas usando o Postman ou o comando curl.
6. Exercício de Fixação 🧠
- O que significa o atributo
#[actix_web::main]e a palavra-chaveasync? - Para que serve a crate Serde no contexto de uma API web?
- Qual a principal diferença entre um método
GETe um métodoPOST?
Próxima Aula: Vamos encerrar o curso com o Projeto Final e as Tendências do Mercado! 🚀