Hyper para Rust: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es Hyper y para qué sirve?

\n\n

Hyper es una biblioteca HTTP asíncrona de alto rendimiento para el lenguaje Rust, escrita en el propio Rust. Es una de las bibliotecas más populares y respetadas en el ecosistema de Rust para trabajar con los protocolos HTTP/1 y HTTP/2. Hyper proporciona tanto la parte cliente como la parte servidor, permitiendo a los desarrolladores crear aplicaciones web y API rápidas, seguras y eficientes.

\n\n

Principales razones para usar Hyper:

\n
    \n
  • Rendimiento: Hyper está construido sobre el runtime asíncrono Tokio y utiliza E/S no bloqueante, lo que permite manejar miles de conexiones simultáneas con un consumo mínimo de recursos.
  • \n
  • Seguridad: Rust garantiza la seguridad de la memoria en tiempo de compilación, y Hyper sigue estos principios, minimizando los riesgos de fugas de memoria y condiciones de carrera.
  • \n
  • Flexibilidad: La biblioteca proporciona control de bajo nivel sobre las conexiones HTTP, permitiendo implementar prácticamente cualquier lógica de procesamiento de solicitudes.
  • \n
  • Compatibilidad: Hyper es la base de muchos otros frameworks populares de Rust, como Warp, Axum y Tide.
  • \n
  • Soporte HTTP/2: Soporte integrado para HTTP/2 para un uso más eficiente de los recursos de red.
  • \n
\n\n

Hyper es ideal para crear microservicios, servidores proxy, puertas de enlace API y cualquier otra aplicación de red donde la velocidad y la fiabilidad sean importantes.

\n\n

Instalación de Hyper

\n\n

La instalación de Hyper en un proyecto de Rust se realiza a través del gestor de paquetes Cargo. Agregue las siguientes dependencias al archivo 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

Explicación de las dependencias:

\n
    \n
  • hyper: La biblioteca principal con todas las funciones incluidas (servidor, cliente, HTTP/2).
  • \n
  • tokio: Runtime asíncrono necesario para que Hyper funcione.
  • \n
  • serde y serde_json: Para serialización/deserialización de datos (será necesario en los ejemplos).
  • \n
\n\n

Después de agregar las dependencias, ejecute el comando cargo build para descargar y compilar las bibliotecas.

\n\n

Inicio rápido: un servidor HTTP simple

\n\n

Creemos un servidor HTTP mínimo que responda "¡Hola, Mundo!" a cualquier solicitud. Cree un archivo src/main.rs con el siguiente contenido:

\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// Definimos el tipo para nuestro servicio\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("¡Hola, Mundo!"))\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