Hyper 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 é Hyper e para que serve

\n\n

Hyper é uma biblioteca HTTP assíncrona de alto desempenho para a linguagem Rust, escrita em Rust. É uma das bibliotecas mais populares e respeitadas no ecossistema Rust para trabalhar com os protocolos HTTP/1 e HTTP/2. Hyper fornece tanto partes de cliente quanto de servidor, permitindo que desenvolvedores criem aplicações web e APIs rápidas, seguras e eficientes.

\n\n

Principais razões para usar Hyper:

\n
    \n
  • Desempenho: Hyper é construído sobre o runtime assíncrono Tokio e usa E/S não bloqueante, permitindo processar milhares de conexões simultâneas com consumo mínimo de recursos.
  • \n
  • Segurança: Rust garante segurança de memória em tempo de compilação, e Hyper segue esses princípios, minimizando riscos de vazamentos de memória e condições de corrida.
  • \n
  • Flexibilidade: A biblioteca fornece controle de baixo nível sobre conexões HTTP, permitindo implementar praticamente qualquer lógica de processamento de requisições.
  • \n
  • Compatibilidade: Hyper é a base para muitos outros frameworks populares em Rust, como Warp, Axum e Tide.
  • \n
  • Suporte a HTTP/2: Suporte nativo a HTTP/2 para uso mais eficiente dos recursos de rede.
  • \n
\n\n

Hyper é ideal para criar microsserviços, servidores proxy, gateways de API e qualquer outra aplicação de rede onde velocidade e confiabilidade são importantes.

\n\n

Instalação do Hyper

\n\n

A instalação do Hyper em um projeto Rust é feita através do gerenciador de pacotes Cargo. Adicione as seguintes dependências ao arquivo Cargo.toml:

\n\n
[dependencies]\nhyper = { version = "1.5", features = ["full"] }\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"
\n\n

Explicação das dependências:

\n
    \n
  • hyper: Biblioteca principal com todas as funcionalidades habilitadas (servidor, cliente, HTTP/2).
  • \n
  • tokio: Runtime assíncrono necessário para o funcionamento do Hyper.
  • \n
  • serde e serde_json: Para serialização/desserialização de dados (será necessário nos exemplos).
  • \n
\n\n

Após adicionar as dependências, execute o comando cargo build para baixar e compilar as bibliotecas.

\n\n

Início rápido: servidor HTTP simples

\n\n

Vamos criar um servidor HTTP mínimo que responde "Hello, World!" a qualquer requisição. Crie o arquivo src/main.rs com o seguinte conteúdo:

\n\n
use hyper::service::{service_fn, Service};\nuse hyper::{Body, Request, Response, Server};\nuse std::convert::Infallible;\nuse std::future::Future;\nuse std::pin::Pin;\nuse std::task::{Context, Poll};\n\n// Define o tipo para nosso serviço\nstruct HelloWorld;\n\nimpl Service<Request<Body>> for HelloWorld {\n    type Response = Response<Body>;\n    type Error = Infallible;\n    type Future = Pin<Box<dyn Future<Output = Result<Self::Response, Self::Error>> + Send>>;\n\n    fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {\n        Poll::Ready(Ok(()))\n    }\n\n    fn call(&mut self, _req: Request<Body>) -> Self::Future {\n        let response = Response::builder()\n            .status(200)\n            .header("Content-Type", "text/plain")\n            .body(Body::from("Hello, World!"))\n            .unwrap();\n\n        Box::pin(async { Ok(response) })\n    }\n}\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {\n    let addr = ([127, 0, 0, 1], 3000).into();\n    let server = Server::bind(&addr).serve(service_fn(|req| async move {\n        let response = Response::builder()\n            .status(200)\n            .header("Content-Type", "text/plain")\n            .body(Body::from("Hell                    

Recommendations