Cliente HTTP en Rust: haciendo solicitudes correctamente

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
```html

Cliente HTTP en Rust: haciendo solicitudes correctamente



Rust es un lenguaje de programación de sistemas moderno que ha ganado popularidad gracias a su rendimiento y seguridad de memoria. Sin embargo, muchos desarrolladores acostumbrados a Python o JavaScript se preguntan: ¿cómo realizar solicitudes HTTP en Rust? En este artículo analizaremos la creación de un cliente HTTP en Rust utilizando la popular biblioteca reqwest. Aprenderá cómo hacer solicitudes GET y POST, procesar JSON, gestionar encabezados y trabajar con asincronía. Después de leerlo, podrá integrar con confianza un cliente HTTP en sus proyectos Rust.



1. Instalación y configuración del entorno



Para empezar, crearemos un nuevo proyecto Rust y añadiremos las dependencias necesarias. Abra la terminal y ejecute:



cargo new http_client_rustcd http_client_rust


Ahora edite el archivo Cargo.toml añadiendo las siguientes dependencias:



[dependencies]reqwest = { version = "0.11", features = ["json"] }tokio = { version = "1", features = ["full"] }serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"


Analicemos cada biblioteca:

  • reqwest — el cliente HTTP principal. La bandera json añade soporte para serialización/deserialización JSON.
  • tokio — el runtime asíncrono necesario para que reqwest funcione en modo asíncrono.
  • serde y serde_json — para trabajar con estructuras JSON.


Después de añadir las dependencias, ejecute cargo build para descargar y compilar todas las bibliotecas.



2. Solicitud GET básica



Empecemos con una solicitud GET simple a una API pública. Crearemos una estructura para la respuesta y realizaremos la solicitud al servicio JSONPlaceholder:



use reqwest;use serde::Deserialize;

#[derive(Debug, Deserialize)]struct Post { userId: u32, id: u32, title: String, body: String,}

#[tokio::main]async fn main() -> Result<(), reqwest::Error> { let url = "https://jsonplaceholder.typicode.com/posts/1"; let response = reqwest::get(url).await?; let post: Post = response.json().await?; println!("{:#?}", post); Ok(())}


Analicemos el código:

  • El atributo #[derive(Debug, Deserialize)] genera automáticamente los traits para impresión y deserialización.
  • #[tokio::main] convierte la función en un punto de entrada asíncrono.
  • reqwest::get() realiza la solicitud GET, y .await espera su finalización.
  • response.json() transforma la respuesta JSON en nuestra estructura.


Ejecute el código con el comando cargo run. Verá los datos del post en la consola.



3. Solicitud POST con envío de datos



Ahora analicemos cómo enviar datos al servidor. Para una solicitud POST necesitaremos crear una estructura para los datos a enviar y usar el método post():



use reqwest::Client;use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize)]struct NewPost { title: String, body: String, userId: u32,}

#[derive(Debug, Deserialize)]struct CreatedPost { id: u32, title: String, body: String, userId: u32,}

#[tokio::main]async fn main() -> Result<(), reqwest::Error> { let client = Client::new(); let new_post = NewPost { title: "Mi primer post en Rust".to_string(), body: "Este es el cuerpo del post enviado con reqwest".to_string(), userId: 1, }; let response = client .post("https://jsonplaceholder.typicode.com/posts") .json(&new_post) .send() .await?; let created_post: CreatedPost = response.json().await?; println!("Post creado con ID: {}", created_post.id); println ```

Blogs

Book Recommendations