Microservicios en Rust: por dónde empezar y no volverse loco

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

¿Por qué Rust es tu próximo paso en microservicios?

\n\n

El mundo de los microservicios ha estado dividido durante mucho tiempo entre Java (con su Spring Boot), Python (FastAPI, Django) y Go. Pero en los últimos años se escucha cada vez más la voz de Rust. ¿Por qué? Porque Rust ofrece lo que antes parecía inalcanzable: el rendimiento de C++ y la seguridad de memoria, sin un recolector de basura.

\n\n

Si escribes en Python, estás acostumbrado a la velocidad de desarrollo. Pero cuando la carga crece, Python empieza a «ralentizarse». Rust resuelve este problema de forma radical: un microservicio en Rust puede reemplazar de 3 a 4 servicios en Python en términos de rendimiento. Y además, el código no «falla» en tiempo de ejecución con NullPointerException.

\n\n

En este artículo no filosofaremos. Tomaremos y escribiremos un microservicio en Rust desde cero. Verás que no da miedo, sino que es muy entretenido.

\n\n

Preparando el entorno: qué necesitas instalar

\n\n

Antes de escribir código, asegurémonos de que tienes todo lo necesario. Si eres nuevo en Rust, no te asustes, la instalación toma 2 minutos.

\n\n

1. Instalación de Rust

\n

La forma más sencilla es a través del instalador oficial rustup:

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n\n

Después de la instalación, verifica la versión:

\n\n
rustc --version\ncargo --version
\n\n

2. Elección del editor

\n

Recomiendo VS Code con la extensión rust-analyzer. Esto te dará autocompletado, resaltado de errores y refactorización «lista para usar».

\n\n

3. Docker (para contenerización)

\n

Los microservicios suelen vivir en contenedores. Instala Docker Desktop o Docker Engine. Construiremos la imagen al final del artículo.

\n\n

Eligiendo el framework: Actix-web vs Axum vs Rocket

\n\n

En el mundo de Rust hay tres frameworks principales para servidores HTTP. Aquí tienes una breve comparación:

\n\n
    \n
  • Actix-web — el más rápido (hasta 1 millón de solicitudes/seg). Maduro, con muchos ejemplos. Ideal para producción.
  • \n
  • Axum — moderno, de los creadores de Tokio. Se integra mejor con el ecosistema async.
  • \n
  • Rocket — la sintaxis más «amigable», pero se actualiza más lentamente.
  • \n
\n\n

En este artículo usaremos Actix-web, ya que está probado por años y tiene la comunidad más grande. Pero si quieres un stack «moderno», elige Axum sin dudar.

\n\n

Primer microservicio: servicio de acortamiento de enlaces

\n\n

Para no ser abstractos, escribamos un microservicio real — url-shortener. Recibirá una URL larga y devolverá una corta.

\n\n

Paso 1. Crear el proyecto

\n
cargo new url-shortener\ncd url-shortener
\n\n

Paso 2. Agregar dependencias

\n

Abre Cargo.toml y agrega:

\n\n
[dependencies]\nactix-web = "4"\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\nuuid = { version = "1", features = ["v4"] }\ntokio = { version = "1", features = ["full"] }
\n\n

Paso 3. Escribir el código

\n

Reemplaza el contenido de src/main.rs con el siguiente código:

\n\n
use actix_web::{web, App, HttpServer, HttpResponse, Responder};\nuse serde::{Deserialize, Serialize};\nuse std::sync::Mutex;\nuse uuid::Uuid;\n\n// Estructura para almacenar enlaces en memoria\nstruct AppState {\n    links: Mutex>,\n}\n\n#[derive(Serialize, Deserialize, Clone)]\nstruct Link {\n    id: String,\n    url: String,\n}\n\n#[derive(Deserialize)]\nstruct CreateLinkRequest {\n    url: String,\n}\n\n// POST /shorten — crea un enlace corto\nasync fn shorten(data: web::Data<AppState>, body: web::Json<CreateLinkRequest>) -> impl Responder {\n    let new_link = Link {\n        id: Uuid::new_v4().to_string()[..8].to_string(), // tomamos los primeros 8 caracteres del UUID\n        url: body.url.clone(),\n    };\n\n    let mut links = data.lin                

Blogs

Book Recommendations