Pular para conteúdo

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 🧠

  1. O que significa o atributo #[actix_web::main] e a palavra-chave async?
  2. Para que serve a crate Serde no contexto de uma API web?
  3. Qual a principal diferença entre um método GET e um método POST?

Próxima Aula: Vamos encerrar o curso com o Projeto Final e as Tendências do Mercado! 🚀